BookmarkSubscribeRSS Feed
diogoalmas
Calcite | Level 5

Preciso da ajuda para pegar essa consulta que está no SQL e transformar numa tabela no SAS. Alguém me ajuda?

 

/****************************/;
/*SMVF_CONSULTA_STATUS_DOTAL*/;
/****************************/;

 

CREATE OR REPLACE FUNCTION SMVF_CONSULTA_STATUS_DOTAL(P_CD_COTACAO IN NUMBER)
RETURN TY_TAB_CONSULTA_STATUS
PIPELINED AS
R TY_REG_CONSULTA_STATUS;
AGENDAMENTO_EXAMES DATE;
AUTORIZAR_EMISSAO_APOLICE DATE;
CLASSIFICACAO_RISCO DATE;
CONCLUSAO_AVALIACAO DATE;
CONF_SOL_SEGURO_SUBSC DATE;
EMISSAO_APOLICE DATE;
INDICAR_PENDENCIA DATE;
INICIO_SUBSCRICAO DATE;
LIBERACAO_EMISSAO_APOLICE DATE;
PREVISAO_AVALIACAO DATE;
RECEBIMENTO_TELE_EXAMES DATE;
RECEBIMENTO_SOLIC_SEGURO DATE;
RECEBIMENTO_INF_COMPL DATE;
REL_INF_COMPLEMENTAR VARCHAR2(100);
REL_PENDENCIAS VARCHAR2(100);
SOLICITACAO_INF_COMPLEMENTAR DATE;
SOLICITACAO_SEGURO DATE;
SOLUCAO_PENDENCIA DATE;
TELE_EXAME_ENTREGUE DATE;
DTINC_SOL_INF_COMPL DATE;
DTFIM_SOL_INF_COMPL DATE;
NO_DIAS_CLASS_RISCO NUMBER;
DTINC_EMISSAO_APOLICE DATE;
NO_DIAS_EMISSAO NUMBER;
NO_DIAS_LIBERACAO NUMBER;
DTINCINI_AVAL_SEG DATE;
NO_DIAS_AVALSOLSEGURO NUMBER;
DTINI_REC_SOL_SEGURO DATE;
DTINI_LIB_EMIS_APOLICE DATE;
BEGIN
FOR CONSULTA IN (SELECT ACAO.NM_ACAO,
DA.DT_CONFIRMACAO DT_CONFIRMACAO,
DA.DT_INICIO DT_INICIO,
DA.DT_ENCERRAMENTO DT_ENCERRAMENTO,
DA.DS_SUB_PROCESSO DS_SUB_PROCESSO,
ACAO.NO_DIAS NO_DIAS
FROM SMV_WORKFLOW_COTACAO WC
JOIN SMV_ACAO ACAO
ON ACAO.CD_ACAO = WC.CD_ACAO
JOIN SMV_DETALHE_ACAO DA
ON DA.CD_WORKFLOW = WC.CD_WORKFLOW
WHERE CD_COTACAO = P_CD_COTACAO
ORDER BY DA.CD_DETALHE_ACAO ASC) LOOP

IF CONSULTA.NM_ACAO = 'AGENDAMENTO_EXAMES' AND
CONSULTA.DS_SUB_PROCESSO = 'INI' THEN
AGENDAMENTO_EXAMES := CONSULTA.DT_INICIO;
ELSIF CONSULTA.NM_ACAO = 'AGENDAMENTO_EXAMES' AND
CONSULTA.DS_SUB_PROCESSO = 'FIM' THEN
TELE_EXAME_ENTREGUE := CONSULTA.DT_CONFIRMACAO;
ELSIF CONSULTA.NM_ACAO = 'AUTORIZAR_EMISSAO_APOLICE' AND
CONSULTA.DS_SUB_PROCESSO = 'FIM' THEN
AUTORIZAR_EMISSAO_APOLICE := CONSULTA.DT_ENCERRAMENTO;
ELSIF CONSULTA.NM_ACAO = 'AGENDAMENTO_INF_COMPLEMENTAR' THEN
NULL;
ELSIF CONSULTA.NM_ACAO = 'AVALIACAO_SOLIC_SEGURO' AND
CONSULTA.DS_SUB_PROCESSO = 'INI' THEN
DTINCINI_AVAL_SEG := CONSULTA.DT_INICIO;
NO_DIAS_AVALSOLSEGURO := CONSULTA.NO_DIAS;
ELSIF CONSULTA.NM_ACAO = 'AVALIACAO_SOLIC_SEGURO' AND
CONSULTA.DS_SUB_PROCESSO = 'FIM' THEN
IF CONCLUSAO_AVALIACAO IS NULL THEN
CONCLUSAO_AVALIACAO := CONSULTA.DT_CONFIRMACAO;
END IF;
SOLICITACAO_SEGURO := CONSULTA.DT_INICIO;
PREVISAO_AVALIACAO := CONSULTA.DT_INICIO;
ELSIF CONSULTA.NM_ACAO = 'CLASSIFICACAO_RISCO' AND
CONSULTA.DS_SUB_PROCESSO = 'INI' THEN
NO_DIAS_CLASS_RISCO := CONSULTA.NO_DIAS;
CLASSIFICACAO_RISCO := CONSULTA.DT_INICIO;
ELSIF CONSULTA.NM_ACAO = 'EMISSAO_APOLICE' AND
CONSULTA.DS_SUB_PROCESSO = 'INI' THEN
DTINC_EMISSAO_APOLICE := CONSULTA.DT_INICIO;
NO_DIAS_EMISSAO := CONSULTA.NO_DIAS;
ELSIF CONSULTA.NM_ACAO = 'EMISSAO_APOLICE' AND
CONSULTA.DS_SUB_PROCESSO = 'FIM' THEN
EMISSAO_APOLICE := CONSULTA.DT_ENCERRAMENTO;
ELSIF CONSULTA.NM_ACAO = 'INDICAR_PENDENCIA' AND
CONSULTA.DS_SUB_PROCESSO = 'INI' THEN
INDICAR_PENDENCIA := CONSULTA.DT_INICIO;
IF CONSULTA.DT_INICIO IS NOT NULL THEN
CONCLUSAO_AVALIACAO := CONSULTA.DT_INICIO;
END IF;
ELSIF CONSULTA.NM_ACAO = 'INICIO_SUBSCRICAO' AND
CONSULTA.DS_SUB_PROCESSO = 'INI' THEN
INICIO_SUBSCRICAO := CONSULTA.DT_INICIO;
ELSIF CONSULTA.NM_ACAO = 'LIBERACAO_EMISSAO_APOLICE' AND
CONSULTA.DS_SUB_PROCESSO = 'FIM' THEN
LIBERACAO_EMISSAO_APOLICE := CONSULTA.DT_ENCERRAMENTO;
ELSIF CONSULTA.NM_ACAO = 'LIBERACAO_EMISSAO_APOLICE' AND
CONSULTA.DS_SUB_PROCESSO = 'INI' THEN
NO_DIAS_LIBERACAO := CONSULTA.NO_DIAS;
DTINI_LIB_EMIS_APOLICE := CONSULTA.DT_INICIO;
ELSIF CONSULTA.NM_ACAO = 'RECEBIMENTO_INF_COMPLEMENTAR' AND
CONSULTA.DS_SUB_PROCESSO = 'FIM' THEN
NULL;
ELSIF CONSULTA.NM_ACAO = 'RECEBIMENTO_SOLIC_SEGURO' AND
CONSULTA.DS_SUB_PROCESSO = 'FIM' THEN
RECEBIMENTO_SOLIC_SEGURO := CONSULTA.DT_CONFIRMACAO;
CONF_SOL_SEGURO_SUBSC := CONSULTA.DT_CONFIRMACAO;
IF INICIO_SUBSCRICAO IS NULL THEN
INICIO_SUBSCRICAO := CONSULTA.DT_CONFIRMACAO;
END IF;
ELSIF CONSULTA.NM_ACAO = 'RECEBIMENTO_SOLIC_SEGURO' AND
CONSULTA.DS_SUB_PROCESSO = 'INI' THEN
DTINI_REC_SOL_SEGURO:= CONSULTA.DT_INICIO;
ELSIF CONSULTA.NM_ACAO = 'RECEBIMENTO_TELE_EXAMES' AND
CONSULTA.DS_SUB_PROCESSO = 'FIM' THEN
RECEBIMENTO_TELE_EXAMES := CONSULTA.DT_CONFIRMACAO;
ELSIF CONSULTA.NM_ACAO = 'RECLASSIFICACAO_RISCO' THEN
NULL;
ELSIF CONSULTA.NM_ACAO = 'SOLICITACAO_INF_COMPLEMENTAR' AND
CONSULTA.DS_SUB_PROCESSO = 'INI' THEN
SOLICITACAO_INF_COMPLEMENTAR := CONSULTA.DT_INICIO;
DTINC_SOL_INF_COMPL := CONSULTA.DT_INICIO;
ELSIF CONSULTA.NM_ACAO = 'SOLICITACAO_INF_COMPLEMENTAR' AND
CONSULTA.DS_SUB_PROCESSO = 'FIM' THEN
DTFIM_SOL_INF_COMPL := CONSULTA.DT_ENCERRAMENTO;
ELSIF CONSULTA.NM_ACAO = 'INDICAR_PENDENCIA' AND
CONSULTA.DS_SUB_PROCESSO = 'FIM' THEN
SOLUCAO_PENDENCIA := CONSULTA.DT_CONFIRMACAO;
END IF;
END LOOP;
FOR CONSULTA_PENDENCIA IN (SELECT PC.DT_RECEBIMENTO DT_RECEBIMENTO,
PC.DT_SOLUCAO DT_SOLUCAO,
PENDENCIA.NM_PENDENCIA,
IC_AFETA_SUBSCRICAO
FROM SMV_PENDENCIA_COTACAO PC
JOIN SMV_PENDENCIA PENDENCIA
ON PENDENCIA.CD_PENDENCIA = PC.CD_PENDENCIA
WHERE CD_COTACAO = P_CD_COTACAO
ORDER BY DT_RECEBIMENTO) LOOP

IF CONSULTA_PENDENCIA.IC_AFETA_SUBSCRICAO = 1 THEN --RELACAO INF COMPLEMENTAR
REL_INF_COMPLEMENTAR := CONSULTA_PENDENCIA.NM_PENDENCIA;
RECEBIMENTO_INF_COMPL := CONSULTA_PENDENCIA.DT_RECEBIMENTO;
IF CONSULTA_PENDENCIA.DT_RECEBIMENTO IS NULL THEN
REL_INF_COMPLEMENTAR := CONSULTA_PENDENCIA.NM_PENDENCIA;
RECEBIMENTO_INF_COMPL := CONSULTA_PENDENCIA.DT_RECEBIMENTO;
END IF;
END IF;
IF CONSULTA_PENDENCIA.IC_AFETA_SUBSCRICAO = 0 THEN
REL_PENDENCIAS := CONSULTA_PENDENCIA.NM_PENDENCIA;
END IF;
END LOOP;
R := TY_REG_CONSULTA_STATUS(P_CD_COTACAO,
AGENDAMENTO_EXAMES,
TELE_EXAME_ENTREGUE,
RECEBIMENTO_TELE_EXAMES,
RECEBIMENTO_SOLIC_SEGURO,
CONCLUSAO_AVALIACAO,
INDICAR_PENDENCIA,
REL_PENDENCIAS,
SOLUCAO_PENDENCIA,
SOLICITACAO_SEGURO,
RECEBIMENTO_SOLIC_SEGURO,
INICIO_SUBSCRICAO,
SOLICITACAO_INF_COMPLEMENTAR,
REL_INF_COMPLEMENTAR,
RECEBIMENTO_INF_COMPL,
CLASSIFICACAO_RISCO,
NULL, --RECLASS RISCO
AUTORIZAR_EMISSAO_APOLICE,
LIBERACAO_EMISSAO_APOLICE,
EMISSAO_APOLICE,
DTINC_SOL_INF_COMPL,
DTFIM_SOL_INF_COMPL,
NO_DIAS_CLASS_RISCO,
DTINC_EMISSAO_APOLICE,
NO_DIAS_EMISSAO,
NO_DIAS_LIBERACAO,
DTINCINI_AVAL_SEG,
NO_DIAS_AVALSOLSEGURO,
DTINI_REC_SOL_SEGURO,
DTINI_LIB_EMIS_APOLICE
);
PIPE ROW(R);
RETURN;
END;

/*******************************/;
/*SMVF_CONSULTA_STATUS_DT_GRID*/;
/*****************************/;

 

CREATE OR REPLACE FUNCTION SMVF_CONSULTA_STATUS_DT_GRID(P_CD_COTACAO IN NUMBER)
RETURN TY_TAB_CONSULTA_STATUS_GRID

PIPELINED AS
R TY_REG_CONSULTA_STATUS_GRID;
DIFPRAZOSLA NUMBER;
TEMPOPROCESSO NUMBER;
STATUSACAOCOTACAO VARCHAR2(200);
RESPONSAVEL NUMBER;
FASE VARCHAR2(200);
STATUSCOTACAO VARCHAR2(200);
DATAINICIO DATE;
DATAFIM DATE;
PRAZOSLA NUMBER;
NUMERODIAS NUMBER;
PENDENTE NUMBER := 0;
EXISTEWORKFLOW BOOLEAN := FALSE;
BEGIN
FOR CONSULTA IN (SELECT ACAO.NM_ACAO NM_ACAO,
DA.DT_CONFIRMACAO DT_CONFIRMACAO,
DA.DT_INICIO DT_INICIO,
DA.DT_ENCERRAMENTO DT_ENCERRAMENTO,
DA.DS_SUB_PROCESSO DS_SUB_PROCESSO,
ACAO.NO_DIAS NO_DIAS,
ACAO.DS_FASE FASE,
ACAO.CD_RESPONSAVEL RESPONSAVEL,
SACAO.DS_STATUS STATUSCOTACAO,
COT.DT_DESISTENCIA DT_DESISTENCIA,
COT.DT_RECUSA DT_RECUSA,
PROP.DT_CANCELAMENTO DT_CANCELAMENTO,
COT.CD_COTACAO CD_COTACAO,
WC.CD_WORKFLOW CD_WORKFLOW,
ACAO.DS_STATUS_ABERTURA DS_STATUS_ABERTURA,
ACAO.CD_ACAO CD_ACAO,
(select
CLIENTE.NO_DOCUMENTO_PRINCIPAL NO_DOCUMENTO_PRINCIPAL
from smv_pessoa cliente
JOIN smv_pessoa_cotacao pc ON cliente.cd_pessoa = pc.cd_pessoa and pc.CD_TIPO_PESSOA_COTACAO = 'SEG'
where pc.cd_cotacao = COT.CD_COTACAO
) as NO_DOCUMENTO_PRINCIPAL
FROM SMV_COTACAO COT
JOIN SMV_PROPOSTA PROP
ON PROP.CD_COTACAO = COT.CD_COTACAO
JOIN SMV_WORKFLOW_COTACAO WC
ON WC.CD_COTACAO = COT.CD_COTACAO
AND WC.CD_COTACAO = PROP.CD_COTACAO
JOIN SMV_ACAO ACAO
ON ACAO.CD_ACAO = WC.CD_ACAO
JOIN SMV_DETALHE_ACAO DA
ON DA.CD_WORKFLOW = WC.CD_WORKFLOW
JOIN SMV_STATUS_ACAO SACAO
ON SACAO.CD_STATUS_ACAO =
ACAO.CD_STATUS_ACAO_ABERTURA

WHERE COT.CD_COTACAO = P_CD_COTACAO
And prop.cd_tipo_proposta = 'PIND'
AND ACAO.CD_ACAO NOT IN
(SELECT ACAO1.CD_ACAO
FROM SMV_WORKFLOW_COTACAO WC1
JOIN SMV_ACAO ACAO1
ON ACAO1.CD_ACAO = WC1.CD_ACAO
JOIN SMV_DETALHE_ACAO DA1
ON DA1.CD_WORKFLOW = WC1.CD_WORKFLOW
WHERE CD_COTACAO = P_CD_COTACAO
AND DA1.DS_SUB_PROCESSO = 'FIM')
ORDER BY DT_INICIO DESC) LOOP
PRAZOSLA := PVV_UTIL.SMVF_CALC_PRAZO_SLA_DIA_FINAL(CONSULTA.DT_INICIO,

pvv_util.smvf_calc_dias_sla(CONSULTA.NO_DOCUMENTO_PRINCIPAL, CONSULTA.cd_acao),

TO_DATE(TO_CHAR(smvk_param.obter_data_sistema(), 'YYYY/MM/DD'),
'YYYY/MM/DD'),
CONSULTA.DT_DESISTENCIA,
CONSULTA.DT_CANCELAMENTO,
CONSULTA.DT_RECUSA);
EXISTEWORKFLOW := TRUE;
DATAINICIO := CONSULTA.DT_INICIO;
DATAFIM := CONSULTA.DT_ENCERRAMENTO;
RESPONSAVEL := CONSULTA.RESPONSAVEL;
FASE := CONSULTA.FASE;
STATUSCOTACAO := CONSULTA.STATUSCOTACAO;
NUMERODIAS := CONSULTA.NO_DIAS;
STATUSACAOCOTACAO := CONSULTA.DS_STATUS_ABERTURA;
IF PRAZOSLA < 0 THEN
DIFPRAZOSLA := -1;
ELSIF PRAZOSLA >= 0 AND PRAZOSLA <= (NUMERODIAS / 2) THEN
DIFPRAZOSLA := 0;
ELSE
DIFPRAZOSLA := 1;
END IF;
TEMPOPROCESSO := NUMERODIAS - PRAZOSLA;
IF CONSULTA.DT_RECUSA IS NOT NULL THEN
PENDENTE := 0;
STATUSACAOCOTACAO := 'Recusada';
STATUSCOTACAO := 'RECUSADA';
exit;
END IF;
IF STATUSCOTACAO = 'RECUSADA' THEN
PENDENTE := 0;
STATUSACAOCOTACAO := 'Recusada';
exit;
END IF;

IF STATUSCOTACAO = 'COTACAO_PENDENCIA' THEN
PENDENTE := 1;
END IF;

END LOOP;
IF EXISTEWORKFLOW = FALSE THEN
DIFPRAZOSLA := 1;
FOR CONSULTA IN (SELECT ACAO.NM_ACAO NM_ACAO,
DA.DT_CONFIRMACAO DT_CONFIRMACAO,
DA.DT_INICIO DT_INICIO,
DA.DT_ENCERRAMENTO DT_ENCERRAMENTO,
DA.DS_SUB_PROCESSO DS_SUB_PROCESSO,
ACAO.NO_DIAS NO_DIAS,
ACAO.DS_FASE FASE,
ACAO.CD_RESPONSAVEL RESPONSAVEL,
SACAO.DS_STATUS STATUSCOTACAO,
COT.DT_DESISTENCIA DT_DESISTENCIA,
COT.DT_RECUSA DT_RECUSA,
PROP.DT_CANCELAMENTO DT_CANCELAMENTO,
COT.CD_COTACAO CD_COTACAO,
WC.CD_WORKFLOW CD_WORKFLOW,
ACAO.DS_STATUS_ABERTURA DS_STATUS_ABERTURA,
ACAO.DS_STATUS_ENCERRAMENTO DS_STATUS_ENCERRAMENTO
FROM SMV_COTACAO COT
JOIN SMV_PROPOSTA PROP
ON PROP.CD_COTACAO = COT.CD_COTACAO
JOIN SMV_WORKFLOW_COTACAO WC
ON WC.CD_COTACAO = COT.CD_COTACAO
AND WC.CD_COTACAO = PROP.CD_COTACAO
JOIN SMV_ACAO ACAO
ON ACAO.CD_ACAO = WC.CD_ACAO
JOIN SMV_DETALHE_ACAO DA
ON DA.CD_WORKFLOW = WC.CD_WORKFLOW
JOIN SMV_STATUS_ACAO SACAO
ON SACAO.CD_STATUS_ACAO =
ACAO.CD_STATUS_ACAO_ABERTURA
WHERE COT.CD_COTACAO = P_CD_COTACAO
ORDER BY DT_INICIO ASC) LOOP
IF CONSULTA.DS_SUB_PROCESSO = 'INI' THEN
DATAINICIO := CONSULTA.DT_INICIO;
END IF;
DATAFIM := CONSULTA.DT_ENCERRAMENTO;
RESPONSAVEL := CONSULTA.RESPONSAVEL;
FASE := CONSULTA.FASE;
STATUSCOTACAO := CONSULTA.STATUSCOTACAO;
STATUSACAOCOTACAO := CONSULTA.DS_STATUS_ENCERRAMENTO;
TEMPOPROCESSO := NUMERODIAS - PRAZOSLA;

IF CONSULTA.DT_RECUSA IS NOT NULL THEN
PENDENTE := 0;
STATUSACAOCOTACAO := 'Recusada';
STATUSCOTACAO := 'RECUSADA';
exit;
END IF;

IF STATUSCOTACAO = 'RECUSADA' THEN
PENDENTE := 0;
STATUSACAOCOTACAO := 'Recusada';
exit;
END IF;

IF STATUSCOTACAO = 'COTACAO_PENDENCIA' THEN
PENDENTE := 1;
END IF;

END LOOP;
END IF;
R := TY_REG_CONSULTA_STATUS_GRID(P_CD_COTACAO,
DIFPRAZOSLA,
TEMPOPROCESSO,
STATUSACAOCOTACAO,
RESPONSAVEL,
FASE,
STATUSCOTACAO,
DATAINICIO,
DATAFIM,
PRAZOSLA,
NUMERODIAS,
PENDENTE);
PIPE ROW(R);
RETURN;
END SMVF_CONSULTA_STATUS_DT_GRID;

 

2 REPLIES 2
Gastaldi
Calcite | Level 5

Você pode transformar essa consulta e gerar a tabela de saída em uma Libname do SAS com PROC SQL, mas para isso isso todas as bases precisam estar disponíveis.

diogoalmas
Calcite | Level 5
Isso eu sei só não sei os comandos equivalentes para jogar essa consulta para o SAS sem fazer ele se conectar pelo sql. Pois na minha empresa eles limitam o acesso ao banco pelo conect sql. Com isso teria que passar tudo isso para linguagem em que o SQL do SAS reconheça.
Esse que é o problema.

sas-innovate-2024.png

Available on demand!

Missed SAS Innovate Las Vegas? Watch all the action for free! View the keynotes, general sessions and 22 breakouts on demand.

 

Register now!

SAS Enterprise Guide vs. SAS Studio

What’s the difference between SAS Enterprise Guide and SAS Studio? How are they similar? Just ask SAS’ Danny Modlin.

Find more tutorials on the SAS Users YouTube channel.

Click image to register for webinarClick image to register for webinar

Classroom Training Available!

Select SAS Training centers are offering in-person courses. View upcoming courses for:

View all other training opportunities.

Discussion stats
  • 2 replies
  • 1449 views
  • 0 likes
  • 2 in conversation