no arquivo XXXX.sql tenho isso:
DECLARE
PROCEDURE P_GERA_LOG(P_TEXTO IN VARCHAR2)
IS
BEGIN
DBMS_OUTPUT.PUT_LINE(TO_CHAR(SYSDATE, 'DD/MM/YY HH24:MI:SS')||' - '||P_TEXTO);
END P_GERA_LOG;
PROCEDURE SLEEP(P_SEGUNDOS IN INT) IS
V_NOW DATE := SYSDATE;
BEGIN
LOOP
EXIT WHEN SYSDATE >= V_NOW + (P_SEGUNDOS * (1/86400));
END LOOP;
END SLEEP;
PROCEDURE P_GERA_OCOREN_NATURA (
P_ID IN NUMBER,
P_CAMINHO_ARQUIVO IN VARCHAR2 := NULL,
P_NOME_ARQUIVO IN VARCHAR2 := NULL,
P_FORMATO_ARQUIVO IN VARCHAR2 := NULL,
P_COMPLEMENTO_ARQUIVO IN VARCHAR2 := NULL,
P_EXTENSAO_ARQUIVO IN VARCHAR2 := NULL
)
IS
CURSOR C_CLIENTES
IS
SELECT
CE.CAIXA_POSTAL_REMETENTE AS ID_REMETENTE,
CE.CAIXA_POSTAL_DESTINATARIO AS ID_DESTINATARIO,
PES.ID_PESSOA AS ID_CLIENTE,
PES.NM_PESSOA,
PES.NR_IDENTIFICACAO
FROM
CLIENTES_EDIS CE,
LMS_PD.PESSOA PES
WHERE
1 = 1
AND PES.NR_IDENTIFICACAO = LPAD(CE.CLIB_PESS_ID_MATRIZ, 14, '0')
AND CE.CLIB_PESS_ID_MATRIZ = P_ID;
R_CLIENTES C_CLIENTES%ROWTYPE;
CURSOR DOCS IS
SELECT
TMP.*
FROM
(
SELECT
ROW_NUMBER() OVER(ORDER BY DS.ID_FILIAL_ORIGEM, DS.ID_DOCTO_SERVICO) AS RN,
DS.ID_DOCTO_SERVICO,
R.ID_DEVEDOR,
CT.TP_FRETE,
DS.ID_FILIAL_ORIGEM,
PF.NR_IDENTIFICACAO AS CNPJ_FILIAL,
CT.BL_INDICADOR_EDI,
PES_REM.NR_IDENTIFICACAO AS CNPJ_REMETENTE,
PES_DES.NR_IDENTIFICACAO AS CNPJ_DESTINATARIO
FROM
(
SELECT
PES.ID_PESSOA
FROM
CLIENTES_EDIS_FILIAIS CEF
JOIN LMS_PD.PESSOA PES ON (PES.NR_IDENTIFICACAO = LPAD(CEF.CLIB_PESS_ID_FILIAL, 14, '0'))
WHERE
CEF.CLIB_PESS_ID_MATRIZ = P_ID
) TBL,
EDI_CARGA.TMP_NATURA_REGEN R,
LMS_PD.DOCTO_SERVICO DS,
LMS_PD.CONHECIMENTO CT,
LMS_PD.PESSOA PF,
LMS_PD.PESSOA PES_REM,
LMS_PD.PESSOA PES_DES
WHERE
1 = 1
AND R.ID_DEVEDOR = TBL.ID_PESSOA
AND DS.ID_DOCTO_SERVICO = R.ID_DOCTO_SERVICO
AND CT.ID_CONHECIMENTO = DS.ID_DOCTO_SERVICO
AND PF.ID_PESSOA = DS.ID_FILIAL_ORIGEM
AND PES_REM.ID_PESSOA = DS.ID_CLIENTE_REMETENTE
AND PES_DES.ID_PESSOA = DS.ID_CLIENTE_DESTINATARIO
AND R.DT_GERACAO IS NULL
) TMP
WHERE
1 = 1
ORDER BY
TMP.RN;
CURSOR C_EVENTOS(P_ID_DOCTO_SERVICO IN NUMBER) IS
SELECT
TMP.*,
CASE
WHEN TMP.ID_DOC_NF_REENTREGA IS NOT NULL THEN
(
SELECT
SUBSTR(MAX(TRIM(DC.DS_VALOR_CAMPO)),1,3)
FROM
LMS_PD.DADOS_COMPLEMENTO DC,
LMS_PD.INFORMACAO_DOCTO_CLIENTE IDC
WHERE
1 = 1
AND DC.ID_CONHECIMENTO = TMP.ID_DOC_NF_REENTREGA
AND IDC.ID_INFORMACAO_DOCTO_CLIENTE = DC.ID_INFORMACAO_DOCTO_CLIENTE
AND UPPER(IDC.DS_CAMPO) LIKE '%NATURA%'
AND UPPER(IDC.DS_CAMPO) LIKE '%CONTROLE%'
)
WHEN TMP.ID_DOC_NF_DEVOLUCAO IS NOT NULL THEN
(
SELECT
SUBSTR(MAX(TRIM(DC.DS_VALOR_CAMPO)),1,3)
FROM
LMS_PD.DADOS_COMPLEMENTO DC,
LMS_PD.INFORMACAO_DOCTO_CLIENTE IDC
WHERE
1 = 1
AND DC.ID_CONHECIMENTO = TMP.ID_DOC_NF_DEVOLUCAO
AND IDC.ID_INFORMACAO_DOCTO_CLIENTE = DC.ID_INFORMACAO_DOCTO_CLIENTE
AND UPPER(IDC.DS_CAMPO) LIKE '%NATURA%'
AND UPPER(IDC.DS_CAMPO) LIKE '%CONTROLE%'
)
END AS NR_CONTROLE_NF_ORIGEM
FROM
(
SELECT
EDS.*,
NFC.ID_NOTA_FISCAL_CONHECIMENTO,
NFC.NR_NOTA_FISCAL AS NU_NOTA_FISCAL,
(
SELECT
SUBSTR(MAX(TRIM(DC.DS_VALOR_CAMPO)),1,3)
FROM
LMS_PD.NF_DADOS_COMP NFD,
LMS_PD.DADOS_COMPLEMENTO DC,
LMS_PD.INFORMACAO_DOCTO_CLIENTE IDC
WHERE
1 = 1
AND NFD.ID_NOTA_FISCAL_CONHECIMENTO = NFC.ID_NOTA_FISCAL_CONHECIMENTO
AND DC.ID_DADOS_COMPLEMENTO = NFD.ID_DADOS_COMPLEMENTO
AND IDC.ID_INFORMACAO_DOCTO_CLIENTE = DC.ID_INFORMACAO_DOCTO_CLIENTE
AND UPPER(IDC.DS_CAMPO) LIKE '%NATURA%'
AND UPPER(IDC.DS_CAMPO) LIKE '%CONTROLE%'
) AS NR_CONTROLE,
(
SELECT
MAX(DSX.ID_DOCTO_SERVICO)
FROM
LMS_PD.NOTA_FISCAL_CONHECIMENTO NFX,
LMS_PD.DOCTO_SERVICO DSX
WHERE
1 = 1
AND NFX.NR_NOTA_FISCAL = NFC.NR_NOTA_FISCAL
AND NFX.ID_NOTA_FISCAL_CONHECIMENTO <> NFC.ID_NOTA_FISCAL_CONHECIMENTO
--
AND DSX.ID_DOCTO_SERVICO = NFX.ID_CONHECIMENTO
AND DSX.ID_CLIENTE_REMETENTE = EDS.ID_CLIENTE_REMETENTE
AND DSX.DH_EMISSAO < EDS.DH_EMISSAO
) AS ID_DOC_NF_REENTREGA,
(
SELECT
MAX(DSX.ID_DOCTO_SERVICO)
FROM
LMS_PD.NOTA_FISCAL_CONHECIMENTO NFX,
LMS_PD.DOCTO_SERVICO DSX
WHERE
1 = 1
AND NFX.NR_NOTA_FISCAL = NFC.NR_NOTA_FISCAL
AND NFX.ID_NOTA_FISCAL_CONHECIMENTO <> NFC.ID_NOTA_FISCAL_CONHECIMENTO
--
AND DSX.ID_DOCTO_SERVICO = NFX.ID_CONHECIMENTO
AND DSX.ID_CLIENTE_REMETENTE = EDS.ID_CLIENTE_DESTINATARIO
AND DSX.DH_EMISSAO < EDS.DH_EMISSAO
) AS ID_DOC_NF_DEVOLUCAO
FROM
(
SELECT
EDS.*,
ETCD.CD_OCORRENCIA_CLIENTE AS CD_OCORRENCIA,
TO_CHAR(EDS.DH_EVENTO,'DDMMYYYYHH24MI') AS DT_OCORRENCIA,
F_RETIRA_CARACTER_ESPECIAL(ETCD.DS_OCORRENCIA) AS DS_OCORRENCIA
FROM
(
SELECT
DS.ID_DOCTO_SERVICO,
DS.DH_EMISSAO,
DS.ID_CLIENTE_REMETENTE,
DS.ID_CLIENTE_DESTINATARIO,
DS.ID_FILIAL_DESTINO,
EDS.ID_EVENTO_DOCUMENTO_SERVICO,
EDS.ID_FILIAL AS ID_FILIAL_EVENTO,
EDS.ID_EVENTO,
EDS.ID_OCORRENCIA_ENTREGA,
EDS.ID_OCORRENCIA_PENDENCIA,
EDS.DH_EVENTO
FROM
LMS_PD.DOCTO_SERVICO DS,
LMS_PD.EVENTO_DOCUMENTO_SERVICO EDS
WHERE
1 = 1
AND EDS.ID_DOCTO_SERVICO = DS.ID_DOCTO_SERVICO
AND EDS.BL_EVENTO_CANCELADO = 'N'
AND DS.ID_DOCTO_SERVICO = P_ID_DOCTO_SERVICO
) EDS,
EDI_PD.EDI_TABELA_OCOREN_DET ETCD
WHERE
1 = 1
AND ETCD.ID_EDI_TABELA_OCOREN = 1
AND (
(ETCD.ID_LMS = EDS.ID_OCORRENCIA_ENTREGA AND ETCD.TP_OCORRENCIA = 1)
OR
(ETCD.ID_LMS = EDS.ID_OCORRENCIA_PENDENCIA AND ETCD.TP_OCORRENCIA = 2)
OR
(ETCD.ID_LMS = EDS.ID_EVENTO AND ETCD.TP_OCORRENCIA = 3 AND ETCD.ID_LMS <> 601)
OR
(ETCD.ID_LMS = EDS.ID_EVENTO AND ETCD.TP_OCORRENCIA = 3 AND ETCD.ID_LMS = 601 AND EDS.ID_FILIAL_EVENTO = EDS.ID_FILIAL_DESTINO)
)
) EDS,
LMS_PD.NOTA_FISCAL_CONHECIMENTO NFC
WHERE
1 = 1
AND NFC.ID_CONHECIMENTO = EDS.ID_DOCTO_SERVICO
) TMP
WHERE
1 = 1
ORDER BY
TMP.DH_EVENTO,
TMP.ID_EVENTO_DOCUMENTO_SERVICO;
V_ARQUIVO UTL_FILE.FILE_TYPE;
V_NM_ARQUIVO VARCHAR2 (256);
V_SEQUENCIA_ARQ NUMBER(10) := 0;
V_LINHA VARCHAR2 (1024);
V_EXISTE BOOLEAN;
V_FILE_LEN NUMBER(20);
V_FILE_BLO NUMBER(20);
V_ID_FILIAL NUMBER (10) := -1;
V_TMP_CONTROLE VARCHAR(3);
V_EMISSOR_NF NUMBER(14);
V_CNT_DOCS NUMBER(5) := 0;
V_QUEBRA NUMBER(5) := 3000;
BEGIN
OPEN C_CLIENTES;
LOOP
FETCH C_CLIENTES INTO R_CLIENTES;
EXIT WHEN C_CLIENTES%NOTFOUND;
FOR R_DOCS IN DOCS LOOP
IF (V_ID_FILIAL <> R_DOCS.ID_FILIAL_ORIGEM) OR
(V_CNT_DOCS >= V_QUEBRA)
THEN
V_ID_FILIAL := R_DOCS.ID_FILIAL_ORIGEM;
V_CNT_DOCS := 0;
IF UTL_FILE.IS_OPEN (V_ARQUIVO) THEN
UTL_FILE.FCLOSE (V_ARQUIVO);
COMMIT;
END IF;
V_EXISTE := TRUE;
LOOP
V_SEQUENCIA_ARQ := V_SEQUENCIA_ARQ + 1;
V_NM_ARQUIVO := P_NOME_ARQUIVO || TO_CHAR(SYSDATE, P_FORMATO_ARQUIVO) || P_COMPLEMENTO_ARQUIVO || '.' || P_EXTENSAO_ARQUIVO;
UTL_FILE.FGETATTR(P_CAMINHO_ARQUIVO, V_NM_ARQUIVO, V_EXISTE, V_FILE_LEN, V_FILE_BLO);
IF NOT V_EXISTE THEN
V_ARQUIVO := UTL_FILE.FOPEN(P_CAMINHO_ARQUIVO, V_NM_ARQUIVO, 'w');
END IF;
EXIT WHEN UTL_FILE.IS_OPEN(V_ARQUIVO);
END LOOP;
V_LINHA := '341'
|| R_DOCS.CNPJ_FILIAL
|| RPAD(R_CLIENTES.ID_REMETENTE, 35, ' ');
V_LINHA := RPAD (V_LINHA, 120, ' ');
UTL_FILE.PUT_LINE (V_ARQUIVO, V_LINHA||CHR(13));
END IF;
FOR R IN C_EVENTOS(R_DOCS.ID_DOCTO_SERVICO) LOOP
UPDATE
EDI_CARGA.TMP_NATURA_REGEN X
SET
X.CNT_EVENTO = NVL(X.CNT_EVENTO,0) + 1
WHERE
1 = 1
AND X.ID_DOCTO_SERVICO = R_DOCS.ID_DOCTO_SERVICO;
IF R_DOCS.TP_FRETE = 'C' THEN
V_EMISSOR_NF := R_DOCS.CNPJ_REMETENTE;
ELSIF R_DOCS.TP_FRETE = 'F' THEN
V_EMISSOR_NF := R_DOCS.CNPJ_DESTINATARIO;
END IF;
V_TMP_CONTROLE := LPAD(TRIM(NVL(R.NR_CONTROLE_NF_ORIGEM, R.NR_CONTROLE)),3,'0');
IF (V_TMP_CONTROLE IS NULL) OR
(V_TMP_CONTROLE = '000') OR
(V_TMP_CONTROLE = '001')
THEN
IF V_EMISSOR_NF = 71673990003940 THEN
V_TMP_CONTROLE := '012';
ELSIF V_EMISSOR_NF = 71673990003605 THEN
V_TMP_CONTROLE := '002';
ELSIF V_EMISSOR_NF = 71673990003788 THEN
V_TMP_CONTROLE := '002';
ELSE
V_TMP_CONTROLE := ' ';
P_GERA_LOG('Erro ao definir número de controle Natura - ID_DOCTO_SERVICO:'||TO_CHAR(R.ID_DOCTO_SERVICO));
END IF;
END IF;
V_LINHA := '342'
|| LPAD(V_EMISSOR_NF, 14, '0')
|| V_TMP_CONTROLE
|| LPAD(R.NU_NOTA_FISCAL, 9, '0')
|| LPAD(TRIM(R.CD_OCORRENCIA), 2, '0')
|| R.DT_OCORRENCIA
|| ' '
|| RPAD(R.DS_OCORRENCIA, 70, ' ');
IF P_ID = 71673990000177 THEN
V_LINHA := RPAD (V_LINHA, 220, ' ');
ELSE
V_LINHA := RPAD (V_LINHA, 215, ' ');
END IF;
UTL_FILE.PUT_LINE (V_ARQUIVO, V_LINHA||CHR(13));
END LOOP;
UPDATE
EDI_CARGA.TMP_NATURA_REGEN X
SET
X.DT_GERACAO = SYSDATE,
X.NM_ARQUIVO = V_NM_ARQUIVO
WHERE
1 = 1
AND X.CNT_EVENTO > 0
AND X.ID_DOCTO_SERVICO = R_DOCS.ID_DOCTO_SERVICO;
V_CNT_DOCS := V_CNT_DOCS+1;
END LOOP;
IF UTL_FILE.IS_OPEN (V_ARQUIVO) THEN
UTL_FILE.FCLOSE (V_ARQUIVO);
COMMIT;
END IF;
END LOOP;
CLOSE C_CLIENTES;
COMMIT;
END P_GERA_OCOREN_NATURA;
BEGIN
P_GERA_OCOREN_NATURA (P_ID => 71673990002544,
P_CAMINHO_ARQUIVO => 'ARQ_UTL_FILE_GM',
P_NOME_ARQUIVO => 'SAPOCO970',
P_FORMATO_ARQUIVO => 'YYMMDDHH24MISS',
P_COMPLEMENTO_ARQUIVO => NULL,
P_EXTENSAO_ARQUIVO => 'TXT'
);
SLEEP(5);
P_GERA_OCOREN_NATURA (P_ID => 71673990003605,
P_CAMINHO_ARQUIVO => 'ARQ_UTL_FILE_GM',
P_NOME_ARQUIVO => 'SAPOCO970',
P_FORMATO_ARQUIVO => 'YYMMDDHH24MISS',
P_COMPLEMENTO_ARQUIVO => NULL,
P_EXTENSAO_ARQUIVO => 'TXT'
);
SLEEP(5);
P_GERA_OCOREN_NATURA (P_ID => 71673990003788,
P_CAMINHO_ARQUIVO => 'ARQ_UTL_FILE_GM',
P_NOME_ARQUIVO => 'SAPOCO970',
P_FORMATO_ARQUIVO => 'YYMMDDHH24MISS',
P_COMPLEMENTO_ARQUIVO => NULL,
P_EXTENSAO_ARQUIVO => 'TXT'
);
SLEEP(5);
P_GERA_OCOREN_NATURA (P_ID => 71673990003869,
P_CAMINHO_ARQUIVO => 'ARQ_UTL_FILE_GM',
P_NOME_ARQUIVO => 'SAPOCO970',
P_FORMATO_ARQUIVO => 'YYMMDDHH24MISS',
P_COMPLEMENTO_ARQUIVO => NULL,
P_EXTENSAO_ARQUIVO => 'TXT'
);
SLEEP(5);
P_GERA_OCOREN_NATURA (P_ID => 71673990003940,
P_CAMINHO_ARQUIVO => 'ARQ_UTL_FILE_GM',
P_NOME_ARQUIVO => 'SAPOCO970',
P_FORMATO_ARQUIVO => 'YYMMDDHH24MISS',
P_COMPLEMENTO_ARQUIVO => NULL,
P_EXTENSAO_ARQUIVO => 'TXT'
);
END
que é executado assim:
try (Connection con = DriverManager.getConnection("...."); Statement stmt = con.createStatement();) {
ScriptRunner sr = new ScriptRunner(con);
Reader reader = new BufferedReader(new FileReader(..."XXX.sql".....));
sr.setAutoCommit(true);
sr.setStopOnError(true);
sr.runScript(reader);
System.out.println("Arquivos gerados em:... ");
} catch (Exception e) {
System.err.println("Erro ao regerar ocorren: " + e.getMessage());
}
E tenho esse erro reportado:
Error executing: DECLARE
PROCEDURE P_GERA_LOG(P_TEXTO IN VARCHAR2)
IS
BEGIN
DBMS_OUTPUT.PUT_LINE(TO_CHAR(SYSDATE, ‘DD/MM/YY HH24:MI:SS’)||’ - '||P_TEXTO)
. Cause: java.sql.SQLException: ORA-06550: linha 6, coluna 0:
PLS-00103: Encountered the symbol “end-of-file” when expecting one of the following:
:= . ( % ;
Erro ao regerar ocorren: Error executing: DECLARE
PROCEDURE P_GERA_LOG(P_TEXTO IN VARCHAR2)
IS
BEGIN
DBMS_OUTPUT.PUT_LINE(TO_CHAR(SYSDATE, ‘DD/MM/YY HH24:MI:SS’)||’ - '||P_TEXTO)
. Cause: java.sql.SQLException: ORA-06550: linha 6, coluna 0:
PLS-00103: Encountered the symbol “end-of-file” when expecting one of the following:
:= . ( % ;