Não localizar a origem de um campo num script

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
pnet1
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 73
Registrado em: Qui, 23 Jan 2020 9:12 pm

Tenho essa Function e nela tem o campo Status. Não consegui saber qual a tabela de origem desse campo. Podem me dar uma ajuda? Aliás, dificuldade em enteder a Functio toda, mas o que eu quero é localizar a origem de Status(x.Status)

Selecionar tudo

create or replace FUNCTION fct_getvisitasgestao (
    p_dataini     DATE,
    p_datafim     DATE,
    p_matricula   trade_usuario.matricula%TYPE,
    p_status      VARCHAR2,
    p_id_modulo   trade_usuario.id_modulo%TYPE
) RETURN CLOB IS
    l_cursor   SYS_REFCURSOR;
    vresult    CLOB;
	vvisita    VARCHAR2(4000);
    vlimiteArquivo NUMBER;
BEGIN

/*NaoIniciados
Em Andamento
Atrasados
Finalizados
NaoRealizados
Cancelados
*/
    IF p_id_modulo = 1 THEN
        OPEN l_cursor FOR 
                        SELECT 
							'{' ||
                            '"DataVisita": "' || to_char(x."DataVisita", 'dd/MM/yyyy') || '",' ||
							CASE x."Status"
                                  WHEN 'NaoIniciados'    THEN '"OrdemStatus": 0,'
                                  WHEN 'Em Andamento'    THEN '"OrdemStatus": 1,'
                                  WHEN 'Atrasados'       THEN '"OrdemStatus": 2,'
                                  WHEN 'Finalizados'     THEN '"OrdemStatus": 3,'
                                  WHEN 'NaoRealizados'   THEN '"OrdemStatus": 4,'
                                  WHEN 'Cancelados'      THEN '"OrdemStatus": 5,'
                              END ||
                              '"Status": "' || x."Status" || '",' ||
                              '"ID_VISITA_AGENDADA": ' || x.id_visita_agendada  || ',' ||
                              '"CODIGO_CLIENTE": ' || x.codigo_cliente  || ',' ||
                              '"Cliente": "' || fct_tratacaracteres(nvl(x."NomeFantasia", x."NomeCliente"))  || '",' ||
                              '"Promotor": "' || fct_tratacaracteres(x.promotor)  || '",' ||
                              '"Endereco": "' || x."Endereco"        || '",' ||
                              '"Numero": "' || x."Numero"         || '",' ||
                              '"Bairro": "' || x."Bairro"          || '",' ||
                              NVL2(x."Complemento", '"Complemento": "' || x."Complemento" || '",', '') ||
                              '"CEP": "' || x."CEP"             || '",' ||
                              '"Regional": "' || x."Regional"        || '",' ||
                              '"UF": "' || x."UF"          || '",' ||
                              '"Cidade": "' || x."Cidade"          || '",' ||
                              '"HoraInicio": "' || TO_CHAR(x."HoraInicio",'YYYY-MM-DD"T"HH24:MI:SS".0000000000Z"') || '",' ||
                              '"HoraFim": "' || TO_CHAR(x."HoraFim",'YYYY-MM-DD"T"HH24:MI:SS".0000000000Z"')  || '",' ||
                              NVL2(x."HoraInicioReal", '"HoraInicioReal": "' || TO_CHAR(x."HoraInicio",'YYYY-MM-DD"T"HH24:MI:SS".0000000000Z"', '') || '",', '') ||
                              NVL2(x."HoraFimReal", '"HoraFimReal": "' || TO_CHAR(x."HoraFimReal",'YYYY-MM-DD"T"HH24:MI:SS".0000000000Z"', '') || '",', '') ||
                              '"NotaGeral": "' || x."NotaGeral" || '"}'
                          FROM
                              (
							  WITH visita AS (
                                      SELECT
                                          id_visita_agendada,
                                          dt_inativo,
                                          dt_update,
                                          hora_inicio,
                                          hora_fim,
                                          diasemana,
                                          codigo_cliente
                                      FROM
                                          trade_visita_agendada UNPIVOT EXCLUDE NULLS ( flag_diasemana
                                              FOR diasemana
                                          IN ( flag_segunda AS '2',
                                          flag_terca AS '3',
                                          flag_quarta AS '4',
                                          flag_quinta AS '5',
                                          flag_sexta AS '6',
                                               flag_sabado AS '7' ) )
                                      WHERE
                                          id_modulo = p_id_modulo
                                          AND flag_diasemana = 'S'
                                  ), usuarioalterado AS (
                                      SELECT
                                          usa.codigo_cliente,
                                          usa.matricula_promotor,
                                          dias.diasdoano
                                      FROM
                                          trade_alteracaopromotor usa,
                                          (
                                              SELECT
                                                  ( TO_DATE(p_dataini) + level - 1 ) diasdoano
                                              FROM
                                                  dual
                                              CONNECT BY
                                                  level <= ( TO_DATE(p_dataini) - TO_DATE(p_datafim) + 1 )
                                          ) dias
                                      WHERE
                                          usa.dt_update <= p_datafim
                                          AND dias.diasdoano <= usa.dt_update
                                          AND usa.id_modulo = p_id_modulo
                                          AND NOT EXISTS (
                                              SELECT
                                                  1
                                              FROM
                                                  trade_alteracaopromotor a
                                              WHERE
                                                  a.codigo_cliente = usa.codigo_cliente
                                                  AND a.id_modulo = p_id_modulo
                                                  AND a.dt_update <= usa.dt_update
                                                  AND a.matricula_promotor <> usa.matricula_promotor
                                                  AND dias.diasdoano <= a.dt_update
                                          )
                                  )
                                  SELECT
                                      (CASE WHEN t.diasdoano >= trunc(sysdate) THEN 'NaoIniciados'
												  ELSE 'NaoRealizados' END) "Status",
                                      vis.id_visita_agendada,
                                      1,
                                      usu.matricula,
                                      usu.matricula_supervisor,
                                      usu.matricula_executivo,
                                      usu.matricula_gerente,
                                      usu.matricula_diretor,
                                      vis.codigo_cliente,
                                      usu.nome            promotor,
                                      vis.HORA_INICIO     "HoraInicio",
                                      vis.HORA_FIM        "HoraFim",
                                      NULL    "HoraInicioReal",
                                      NULL   "HoraFimReal",
                                      CLI.NOME "NomeCliente",
                                      CLI.NOME_FANTASIA "NomeFantasia",
                                      CLI.ENDERECO "Endereco",
                                      CLI.NUMERO "Numero",
                                      CLI.BAIRRO "Bairro",
                                      CLI.COMPLEMENTO "Complemento",
                                      CLI.CEP "CEP",
                                      CLI.REGIONAL "Regional",
                                      CLI.ESTADO "UF",
                                      CLI.CIDADE "Cidade",
                                      '0' "NotaGeral",
                                      t.diasdoano "DataVisita"
                                  FROM (
                                          SELECT
                                              ( TO_DATE(p_dataini) + level - 1 ) diasdoano
                                          FROM
                                              dual
                                          CONNECT BY
                                              level <= ( TO_DATE(p_datafim) - TO_DATE(p_dataini) + 1 )
                                      ) t
                                      INNER JOIN visita vis ON vis.diasemana = TO_CHAR(t.diasdoano, 'd')
                                      INNER JOIN trade_vwm_cliente cli ON cli.codigo_cliente = vis.codigo_cliente
																			AND cli.ativo = 'S'
																			AND cli.id_modulo = p_id_modulo
									  LEFT JOIN usuarioalterado usa ON usa.codigo_cliente = vis.codigo_cliente
																		AND usa.diasdoano = t.diasdoano
                                      INNER JOIN trade_vwm_usuario_superior usu ON nvl(usa.matricula_promotor, cli.matricula_promotor) = usu.matricula
																					--AND usu.ativo = 'S'
																					AND usu.id_modulo = p_id_modulo							   
                                  WHERE T.DIASDOANO >= TRUNC(VIS.DT_UPDATE) 
									and vis.dt_inativo is null
									and TO_DATE(p_datafim,'DD/MM/YY') >= TO_DATE(sysdate,'DD/MM/YY')
									AND vis.id_visita_agendada IN (
                                          SELECT
                                              id_visita_agendada
                                          FROM
                                              trade_visita_agendada
                                          WHERE
                                              trunc(vigencia) = (
                                                  SELECT
                                                      MAX(trunc(vigencia))
                                                  FROM
                                                      trade_visita_agendada
                                                  WHERE
                                                      vigencia IS NOT NULL
                                                      AND trunc(vigencia) <= trunc(t.diasdoano)
                                                      AND id_modulo = p_id_modulo
                                              )
                                    )
									AND NOT EXISTS 
										(SELECT 1 FROM TRADE_PUBLICADO_RESULT PBR 
											WHERE TRUNC(PBR.DT_COLETA) = TRUNC(T.DIASDOANO)
                                                and PBR.MATRICULA = USU.MATRICULA
                                                and PBR.CODIGO_CLIENTE = VIS.CODIGO_CLIENTE)
									AND	( ( usu.matricula = p_matricula )
                                            OR ( usu.matricula_supervisor = p_matricula )
                                            OR ( usu.matricula_executivo = p_matricula )
                                            OR ( usu.matricula_gerente = p_matricula )
                                            OR ( usu.matricula_diretor = p_matricula )
                                            OR EXISTS (
                                          SELECT
                                              1
                                          FROM
                                              trade_usuario_adm m
                                              INNER JOIN trade_cargo_modulo c ON c.id_cargo = m.id_cargo
                                          WHERE
                                              m.matricula = p_matricula
                                              AND m.ativo = 'S'
                                              AND c.id_modulo = p_id_modulo
                                      ) )

								UNION ALL

								SELECT
                                      CASE WHEN pbr.id_status = 1 THEN 
											(CASE WHEN pbr.dt_coleta >= trunc(sysdate) THEN 'NaoIniciados'
												  ELSE 'NaoRealizados' END)
										  WHEN pbr.id_status IN (2,3) THEN
										    (CASE WHEN pbr.dt_coleta >= trunc(sysdate) THEN 'Em Andamento'
												  ELSE 'NaoRealizados' END)
                                          WHEN pbr.id_status = 4 THEN 'Finalizados'
                                          ELSE 'Cancelados'
                                      END "Status",
                                      pbr.id_visita_agendada,
                                      pbr.id_status,
                                      usu.matricula,
                                      usu.matricula_supervisor,
                                      usu.matricula_executivo,
                                      usu.matricula_gerente,
                                      usu.matricula_diretor,
                                      pbr.codigo_cliente,
                                      usu.nome            promotor,
                                      pbr.hora_planejada_checkin     "HoraInicio",
                                      pbr.hora_planejada_checkout        "HoraFim",
                                      pbr.hora_checkin    "HoraInicioReal",
                                      pbr.hora_checkout   "HoraFimReal",
                                      CLI.NOME "NomeCliente",
                                      CLI.NOME_FANTASIA "NomeFantasia",
                                      CLI.ENDERECO "Endereco",
                                      CLI.NUMERO "Numero",
                                      CLI.BAIRRO "Bairro",
                                      CLI.COMPLEMENTO "Complemento",
                                      CLI.CEP "CEP",
                                      CLI.REGIONAL "Regional",
                                      CLI.ESTADO "UF",
                                      CLI.CIDADE "Cidade",
                                      CASE
                                          WHEN nvl(pbr.nota_geral, '0') <> '0' THEN pbr.nota_geral
                                          ELSE nvl((
                                              SELECT
                                                  MAX(pbr.nota_geral)
                                              FROM
                                                  trade_publicado_result r
                                              WHERE
                                                  r.id_visita_agendada = pbr.id_visita_agendada
                                                  AND r.id_modulo = p_id_modulo
                                                  AND r.matricula = pbr.matricula
                                                  AND r.dt_coleta =(
                                                      SELECT
                                                          MAX(r.dt_coleta)
                                                      FROM
                                                          trade_publicado_result p
                                                      WHERE
                                                          r.id_visita_agendada = p.id_visita_agendada
                                                          AND r.id_modulo = p_id_modulo
                                                          AND r.matricula = p.matricula
                                                          AND r.dt_coleta <= p_datafim
                                                          AND nvl(p.nota_geral, '0') <> '0'
                                                  )
                                          ), '0')
                                      END "NotaGeral",
                                      pbr.dt_coleta "DataVisita"
                                  FROM trade_publicado_result pbr
                                      INNER JOIN trade_vwm_cliente cli ON cli.codigo_cliente = pbr.codigo_cliente
																			--AND cli.ativo = 'S'
																			AND cli.id_modulo = p_id_modulo
                                      INNER JOIN trade_vwm_usuario_superior usu ON pbr.matricula= usu.matricula
																					--AND usu.ativo = 'S'
																					AND usu.id_modulo = p_id_modulo							   
                                  WHERE TRUNC(pbr.dt_coleta) between p_dataini and p_datafim
									  and PBR.ID_VISITA_AGENDADA is not null
                                      AND ( ( usu.matricula = p_matricula )
                                            OR ( usu.matricula_supervisor = p_matricula )
                                            OR ( usu.matricula_executivo = p_matricula )
                                            OR ( usu.matricula_gerente = p_matricula )
                                            OR ( usu.matricula_diretor = p_matricula )
                                            OR EXISTS (
                                          SELECT
                                              1
                                          FROM
                                              trade_usuario_adm m
                                              INNER JOIN trade_cargo_modulo c ON c.id_cargo = m.id_cargo
                                          WHERE
                                              m.matricula = p_matricula
                                              AND m.ativo = 'S'
                                              AND c.id_modulo = p_id_modulo
                                      ) )

                              ) x
                          WHERE
                              x."Status" = nvl(p_status, x."Status")
                          ORDER BY
                              1 ASC;

    ELSIF p_id_modulo = 2 THEN
        OPEN l_cursor FOR SELECT 
							'{' ||
                            '"DataVisita": "' || to_char(x."DataVisita", 'dd/MM/yyyy') || '",' ||
							CASE x."Status"
                                  WHEN 'NaoIniciados'    THEN '"OrdemStatus": 0,'
                                  WHEN 'Em Andamento'    THEN '"OrdemStatus": 1,'
                                  WHEN 'Atrasados'       THEN '"OrdemStatus": 2,'
                                  WHEN 'Finalizados'     THEN '"OrdemStatus": 3,'
                                  WHEN 'NaoRealizados'   THEN '"OrdemStatus": 4,'
                                  WHEN 'Cancelados'      THEN '"OrdemStatus": 5,'
                              END ||
                              '"Status": "' || x."Status" || '",' ||
                              '"ID_VISITA_AGENDADA": ' || x.id_visita_agendada  || ',' ||
                              '"CODIGO_CLIENTE": ' || x.codigo_cliente  || ',' ||
                              '"Cliente": "' || fct_tratacaracteres(nvl(cli.nome_fantasia, cli.nome))  || '",' ||
                              '"Promotor": "' || fct_tratacaracteres(x.promotor)  || '",' ||
                              '"Endereco": "' || cli.endereco        || '",' ||
                              '"Numero": "' || cli.numero         || '",' ||
                              '"Bairro": "' || cli.bairro          || '",' ||
                              NVL2(cli.complemento, '"Complemento": "' || cli.complemento || '",', '') ||
                              '"CEP": "' || cli.cep             || '",' ||
                              '"Regional": "' || cli.regional        || '",' ||
                              '"UF": "' || cli.estado          || '",' ||
                              '"Cidade": "' || cli.cidade          || '",' ||
                              '"HoraInicio": "' || TO_CHAR(x."HoraInicio",'YYYY-MM-DD"T"HH24:MI:SS".0000000000Z"') || '",' ||
                              '"HoraFim": "' || TO_CHAR(x."HoraFim",'YYYY-MM-DD"T"HH24:MI:SS".0000000000Z"')  || '",' ||
							  NVL2(x."HoraInicioReal", '"HoraInicioReal": "' || TO_CHAR(x."HoraInicio",'YYYY-MM-DD"T"HH24:MI:SS".0000000000Z"', '') || '",', '') ||
                              NVL2(x."HoraFimReal", '"HoraFimReal": "' || TO_CHAR(x."HoraFimReal",'YYYY-MM-DD"T"HH24:MI:SS".0000000000Z"', '') || '",', '') ||
                              '"NotaGeral": "' || x."NotaGeral" || '"}'
                          FROM
                              (
                                  WITH visita AS (
                                      SELECT
                                          id_visita_agendada,
                                          dt_inativo,
                                          dt_update,
                                          hora_inicio,
                                          hora_fim,
                                          diasemana,
                                          codigo_cliente,
                                          organizacao_venda,
                                          sequencia_visita,
                                          semana_visita
                                      FROM
                                          trade_visita_agendada UNPIVOT EXCLUDE NULLS ( flag_diasemana
                                              FOR diasemana
                                          IN ( flag_segunda AS '2',
                                          flag_terca AS '3',
                                          flag_quarta AS '4',
                                          flag_quinta AS '5',
                                          flag_sexta AS '6',
                                               flag_sabado AS '7' ) )
                                      WHERE
                                          id_modulo = p_id_modulo
                                          AND flag_diasemana = 'S'
                                  ), periodo AS (
                                      SELECT
                                          ( TO_DATE(p_dataini) + level - 1 ) diasdoano
                                      FROM
                                          dual
                                      CONNECT BY
                                          level <= ( TO_DATE(p_datafim) - TO_DATE(p_dataini) + 1 )
                                  ), usuarioalterado AS (
                                      SELECT
                                          usa.codigo_cliente,
                                          usa.matricula_promotor,
                                          dias.diasdoano
                                      FROM
                                          trade_alteracaopromotor usa,
                                          (
                                              SELECT
                                                  ( TO_DATE(p_dataini) + level - 1 ) diasdoano
                                              FROM
                                                  dual
                                              CONNECT BY
                                                  level <= ( TO_DATE(p_datafim) - TO_DATE(p_dataini) + 1 )
                                          ) dias
                                      WHERE
                                          usa.dt_update <= p_datafim
                                          AND dias.diasdoano <= usa.dt_update
                                          AND usa.id_modulo = p_id_modulo
                                          AND NOT EXISTS (
                                              SELECT
                                                  1
                                              FROM
                                                  trade_alteracaopromotor a
                                              WHERE
                                                  a.codigo_cliente = usa.codigo_cliente
                                                  AND a.id_modulo = p_id_modulo
                                                  AND a.dt_update <= usa.dt_update
                                                  AND a.matricula_promotor <> usa.matricula_promotor
                                                  AND dias.diasdoano <= a.dt_update
                                          )
                                  )
                                  SELECT
                                      CASE
                                          WHEN ( nvl(pbr.id_status, 0) = 0
                                                 OR ( pbr.id_status = 1 ) ) THEN ( CASE
                                              WHEN TO_DATE(TO_CHAR(t.diasdoano, 'DD/MM/RRRR ')
                                                           ||(TO_CHAR(vis.hora_inicio, 'HH24MISS')), 'DD/MM/RRRR HH24MISS') > SYSDATE
                                                           THEN 'NaoIniciados'
                                              WHEN trunc(t.diasdoano) = trunc(SYSDATE) THEN 'NaoIniciados'
                                              ELSE 'NaoRealizados'
                                          END )
                                          WHEN pbr.id_status IN (
                                              2,
                                              3
                                          ) THEN ( CASE
                                              WHEN trunc(t.diasdoano) < trunc(SYSDATE) THEN 'NaoRealizados'
                                              ELSE 'Em Andamento'
                                          END )
                                          WHEN pbr.id_status IN (
                                              4
                                          ) THEN 'Finalizados'
                                          ELSE 'Cancelados'
                                      END "Status",
                                      vis.id_visita_agendada,
                                      pbr.id_status,
                                      usu.matricula,
                                      usu.matricula_supervisor,
                                      usu.matricula_executivo,
                                      usu.matricula_gerente,
                                      usu.matricula_diretor,
                                      vis.codigo_cliente,
                                      usu.nome            promotor,
                                      vis.hora_inicio     "HoraInicio",
                                      vis.hora_fim        "HoraFim",
                                      pbr.hora_checkin    "HoraInicioReal",
                                      pbr.hora_checkout   "HoraFimReal",
                                      CASE
                                          WHEN nvl(pbr.nota_geral, '0') <> '0' THEN pbr.nota_geral
                                          ELSE nvl((
                                              SELECT
                                                  MAX(pbr.nota_geral)
                                              FROM
                                                  trade_publicado_result r
                                              WHERE
                                                  r.id_visita_agendada = pbr.id_visita_agendada
                                                  AND r.id_modulo = p_id_modulo
                                                  AND r.matricula = pbr.matricula
                                                  AND r.dt_coleta =(
                                                      SELECT
                                                          MAX(r.dt_coleta)
                                                      FROM
                                                          trade_publicado_result p
                                                      WHERE
                                                          r.id_visita_agendada = p.id_visita_agendada
                                                          AND r.id_modulo = p_id_modulo
                                                          AND r.matricula = p.matricula
                                                          AND r.dt_coleta <= p_datafim
                                                          AND nvl(p.nota_geral, '0') <> '0'
                                                  )
                                          ), '0')
                                      END "NotaGeral",
                                      vis.organizacao_venda,
                                      vis.sequencia_visita,
                                      t.diasdoano "DataVisita"
                                  FROM
                                      (
                                          SELECT
                                              ( TO_DATE(p_dataini) + level - 1 ) diasdoano
                                          FROM
                                              dual
                                          CONNECT BY
                                              level <= ( TO_DATE(p_datafim) - TO_DATE(p_dataini) + 1 )
                                      ) t
                                      INNER JOIN visita vis ON vis.diasemana = TO_CHAR(t.diasdoano, 'd')
                                      INNER JOIN trade_vwm_cliente cli ON cli.codigo_cliente = vis.codigo_cliente
                                                                         AND cli.ativo = 'S'
                                                                         AND cli.id_modulo = p_id_modulo
                                      LEFT JOIN usuarioalterado usa ON usa.codigo_cliente = vis.codigo_cliente
                                                                       AND usa.diasdoano = t.diasdoano




                                      LEFT JOIN trade_publicado_result pbr ON pbr.id_visita_agendada = vis.id_visita_agendada
                                                                              AND trunc(pbr.dt_coleta) = trunc(t.diasdoano)
                                                                              AND pbr.id_modulo = p_id_modulo
                                      INNER JOIN trade_vw_usuario_superior usu 
                                            ON nvl(pbr.matricula, nvl(usa.matricula_promotor, cli.matricula_promotor)) = usu.matricula
                                                    AND usu.ativo = 'S'  
                                                    AND usu.id_modulo = p_id_modulo
                                  WHERE
                                      t.diasdoano <= nvl(trunc(vis.dt_inativo), p_datafim)
                                      AND vis.id_visita_agendada IN (
                                          SELECT
                                              v1.id_visita_agendada
                                          FROM
                                              trade_visita_agendada v1
                                          WHERE
                                              trunc(v1.vigencia) = (
                                                  SELECT
                                                      MAX(trunc(vigencia))
                                                  FROM
                                                      trade_visita_agendada
                                                  WHERE
                                                      vigencia IS NOT NULL
                                                      AND trunc(vigencia) <= trunc(t.diasdoano)
                                                      AND id_modulo = v1.id_modulo
                                                      AND organizacao_venda = v1.organizacao_venda
                                              )
                                              AND v1.id_modulo = p_id_modulo
                                      )
                                      AND t.diasdoano >= trunc(vis.dt_update)
                                      AND ( ( vis.semana_visita = 
                                                CASE
                                                    WHEN mod(TO_CHAR(t.diasdoano, 'IW', 'NLS_DATE_LANGUAGE=PORTUGUESE'), 2) = 0 THEN
                                                        'PAR'
                                                    ELSE
                                                        'IMPAR'
                                                END )
                                            OR ( vis.semana_visita = 'SEMANAL' ) )
                                      AND trunc(t.diasdoano) BETWEEN p_dataini AND p_datafim
                                      --AND trunc(t.diasdoano) >= TO_DATE(SYSDATE, 'DD/MM/YY')
                                      AND ( ( usu.matricula = p_matricula )
                                            OR ( usu.matricula_supervisor = p_matricula )
                                            OR ( usu.matricula_executivo = p_matricula )
                                            OR ( usu.matricula_gerente = p_matricula )
                                            OR ( usu.matricula_diretor = p_matricula )
                                            OR EXISTS (
                                          SELECT
                                              1
                                          FROM
                                              trade_usuario_adm m
                                              INNER JOIN trade_cargo_modulo c ON c.id_cargo = m.id_cargo
                                          WHERE
                                              m.matricula = p_matricula
                                              AND m.ativo = 'S'
                                              AND c.id_modulo = p_id_modulo
                                      ) )
                                  UNION ALL
                                  SELECT
                                      CASE
                                          WHEN ( nvl(pbr.id_status, 0) = 0
                                                 OR ( pbr.id_status = 1 ) ) THEN ( CASE
                                              WHEN TO_DATE(TO_CHAR(t.diasdoano, 'DD/MM/RRRR ')
                                                           ||(TO_CHAR(vis.hora_inicio, 'HH24MISS')), 'DD/MM/RRRR HH24MISS') > SYSDATE
                                                           THEN 'NaoIniciados'
                                              WHEN trunc(t.diasdoano) = trunc(SYSDATE) THEN 'NaoIniciados'
                                              ELSE 'NaoRealizados'
                                          END )
                                          WHEN pbr.id_status IN (
                                              2,
                                              3
                                          ) THEN ( CASE
                                              WHEN trunc(t.diasdoano) < trunc(SYSDATE) THEN 'NaoRealizados'
                                              ELSE 'Em Andamento'
                                          END )
                                          WHEN pbr.id_status IN (
                                              4
                                          ) THEN 'Finalizados'
                                          ELSE 'Cancelados'
                                      END "Status",
                                      vis.id_visita_agendada,
                                      pbr.id_status,
                                      usu.matricula,
                                      usu.matricula_supervisor,
                                      usu.matricula_executivo,
                                      usu.matricula_gerente,
                                      usu.matricula_diretor,
                                      vis.codigo_cliente,
                                      usu.nome            promotor,
                                      vis.hora_inicio     "HoraInicio",
                                      vis.hora_fim        "HoraFim",
                                      pbr.hora_checkin    "HoraInicioReal",
                                      pbr.hora_checkout   "HoraFimReal",
                                      CASE
                                          WHEN nvl(pbr.nota_geral, '0') <> '0' THEN pbr.nota_geral
                                          ELSE nvl((
                                              SELECT
                                                  MAX(pbr.nota_geral)
                                              FROM
                                                  trade_publicado_result r
                                              WHERE
                                                  r.id_visita_agendada = pbr.id_visita_agendada
                                                  AND r.id_modulo = p_id_modulo
                                                  AND r.matricula = pbr.matricula
                                                  AND r.dt_coleta =(
                                                      SELECT
                                                          MAX(r.dt_coleta)
                                                      FROM
                                                          trade_publicado_result p
                                                      WHERE
                                                          r.id_visita_agendada = p.id_visita_agendada
                                                          AND r.id_modulo = p_id_modulo
                                                          AND r.matricula = p.matricula
                                                          AND r.dt_coleta <= p_datafim
                                                          AND nvl(p.nota_geral, '0') <> '0'
                                                  )
                                          ), '0')
                                      END "NotaGeral",
                                      vis.organizacao_venda,
                                      vis.sequencia_visita,
                                      t.diasdoano "DataVisita"
                                  FROM
                                      (
                                          SELECT
                                              ( TO_DATE(p_dataini) + level - 1 ) diasdoano
                                          FROM
                                              dual
                                          CONNECT BY
                                              level <= ( TO_DATE(p_datafim) - TO_DATE(p_dataini) + 1 )
                                      ) t
                                      INNER JOIN visita vis ON vis.diasemana = TO_CHAR(t.diasdoano, 'd')
                                      INNER JOIN trade_cliente_promotores clp ON clp.codigo_cliente = vis.codigo_cliente
                                      INNER JOIN tra_vw_usuario_superior usu ON clp.matricula_promotor = usu.matricula
                                      LEFT JOIN trade_publicado_result pbr ON pbr.matricula = usu.matricula
                                                                              AND pbr.id_modulo = p_id_modulo
                                                                              AND pbr.id_visita_agendada = vis.id_visita_agendada
                                                                              AND trunc(pbr.dt_coleta) = trunc(diasdoano)
                                  WHERE
                                      t.diasdoano <= nvl(trunc(vis.dt_inativo), p_datafim)
                                      AND t.diasdoano >= trunc(vis.dt_update)
                                      AND vis.id_visita_agendada = 0
                                      AND ( ( vis.semana_visita = 
                                                CASE
                                                    WHEN mod(TO_CHAR(t.diasdoano, 'IW', 'NLS_DATE_LANGUAGE=PORTUGUESE'), 2) = 0 THEN
                                                        'PAR'
                                                    ELSE
                                                        'IMPAR'
                                                END )
                                            OR ( vis.semana_visita = 'SEMANAL' ) )
                                      AND trunc(t.diasdoano) BETWEEN p_dataini AND p_datafim
                                      AND trunc(t.diasdoano) >= trunc(clp.dt_inicio)
                                      AND trunc(t.diasdoano) <= trunc(nvl(clp.dt_inativo, p_datafim))
                                      AND ( ( usu.matricula = p_matricula )
                                            OR ( usu.matricula_supervisor = p_matricula )
                                            OR ( usu.matricula_executivo = p_matricula )
                                            OR ( usu.matricula_gerente = p_matricula )
                                            OR ( usu.matricula_diretor = p_matricula )
                                            OR EXISTS (
                                          SELECT
                                              1
                                          FROM
                                              trade_usuario_adm m
                                              INNER JOIN trade_cargo_modulo c ON c.id_cargo = m.id_cargo
                                          WHERE
                                              m.matricula = p_matricula
                                              AND m.ativo = 'S'
                                              AND c.id_modulo = p_id_modulo
                                      ) )
                              ) x
                              INNER JOIN trade_vw_dados_cliente cli ON cli.codigo_cliente = x.codigo_cliente
                          WHERE
                              x."Status" = nvl(p_status, x."Status")
                          ORDER BY
                              1 ASC;
   END IF;


	VRESULT := '{"Visitas": [';

   LOOP
      FETCH l_cursor INTO vvisita;
      EXIT WHEN l_cursor%NOTFOUND;
        VRESULT := VRESULT || vvisita || ',';
   END LOOP;

   VRESULT := VRESULT || ']}';

   SELECT TO_NUMBER(VALOR) INTO vlimiteArquivo FROM TRADE_CONFIG WHERE PARAMETRO = 'limite_tamanho_df' AND ID_MODULO = p_id_modulo;

   IF DBMS_LOB.GETLENGTH(VRESULT) > vlimiteArquivo THEN   
        VRESULT := '{"Visitas": [{"erro": "Tamanho do arquivo de retorno da pesquisa excede o limite da aplicação"}]}';
   END IF;



	/*
    apex_json.initialize_clob_output;
    apex_json.open_object;
    apex_json.write('Visitas', l_cursor);
    apex_json.close_object;
    vresult := apex_json.get_clob_output;
    vresult := replace(vresult, chr(10), '');
    vresult := replace(vresult, chr(13), '');
    apex_json.free_output;
	*/

    --DBMS_OUTPUT.PUT_LINE(VRESULT);
    RETURN VRESULT;
END;
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Tem um IF que define qual query vai ser usada:

Selecionar tudo

    IF p_id_modulo = 1 THEN
......
    ELSIF p_id_modulo = 2 THEN
......

No primeiro IF, a origem é nas queries abaixo (linha 108, onde ele decide se é "NaoIniciados" ou "NaoRealizados".).
Na linha 197 tem um UNION com umas opções a mais. ("EmAndamento").
Essas opções vão ser usadas no select de fora. (linha 26), onde ele converte pra "OrdemStatus 0, 1, 2, 3, 4, 5).

No segundo IF é semelhante:
Linha 383 e 522. (Posteriormente sendo convertido pra OrdemStatus 0,1,2,3,4,5 na linha 291).

E é isso!
pnet1
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 73
Registrado em: Qui, 23 Jan 2020 9:12 pm

Cara, pelo comportamento do sistema é isso mesmo. Vejo que você manja muito disso. Obrigado!!!
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Majestic-12 [Bot] e 23 visitantes