Thursday, May 19, 2005
Dúvida - Merge
Irei quebrar a sequência sobre statspack que estou escrevendo para responder uma dúvida que chegou. Relembrando, as dúvidas têm prioridade sobre os artigos.
Autor: Alexandre Taleb
A dúvida.
Recebi ainda do autor os arquivos texto para o teste e o CTL (control do sql loader).
Ele está na versão 9ir2, portanto a opção MERGE está disponível.
Vamos ao exemplo:
Agora, simulando sua carga de dados inicial. Não é necessário truncar a tabela como voce havia mencionado, o seu ctl já está fazendo isso para voce, veja logo abaixo que está explícito o TRUNCATE.
Se alguém estiver interessado em reproduzir o exemplo, aqui estão os arquivos de dados (dw.txt) e o control (dw.ctl)
Uma vez carregada a tabela, vou criar uma procedure para o MERGE da tabela legado com a tabela transiente.
Tabela vazia.
Agora completa com a tabela temporária. Próximo passo, simular sua carga diária. Vamos fazer isso em 2 etapas. A primeira, carregando o registro BR 100 ... com uma descrição e o segundo, trazendo o mesmo registro (PK) porém com a alteração da descrição -- como voce colocou na dúvida.
A simulação acontece assim, criei 3 arquivos .TXT o dw0 original, dw1 com o registro novo, dw2 com o registro a ser atualizado.
Feito, o último registro, como pode ser notado, foi atualizado corretamente.
Mais uma dica, ao invés de usar o sql loader, use o recurso da external table. Com o ctl, fica ainda mais fácil de gerar a DDL de criação da tabela basta voce pedir ao sqlldr com o parâmetro external_table=generate_only. Com isso, quando seu processo quando colocar o novo dw.txt a tabela temporária já estará pronta para o merge sem a necessidade de voce executar o loader.
Autor: Alexandre Taleb
A dúvida.
"
Eu criei uma tabela duas tabelas, uma temporária (CASE_STG_REQ_TEMP) e outra definitiva (CASE_STG_REQ_DEF) :
CREATE TABLE CASE_STG_REQ_TEMP
(
COUNTRYCODE VARCHAR2(3),
ATEN_NU_PTO NUMBER(10),
SEGM_CD NUMBER(3),
FASE_NU_SEQ NUMBER(3),
RESO_NU_SEQ NUMBER(3),
RESO_TE_REQ VARCHAR2(20),
RESO_TE_ATEN VARCHAR2(30)
)
CREATE TABLE CASE_STG_REQ_DEF
(
COUNTRYCODE VARCHAR2(3),
ATEN_NU_PTO NUMBER(10),
SEGM_CD NUMBER(3),
FASE_NU_SEQ NUMBER(3),
RESO_NU_SEQ NUMBER(3),
RESO_TE_REQ VARCHAR2(20),
RESO_TE_ATEN VARCHAR2(30), CONSTRAINT CASE_STG_REQ_TEMP PRIMARY KEY(ATEN_NU_PTO, FASE_NU_SEQ, RESO_NU_SEQ)
)
A TEMP recebe dados de um arquivo TXT e antes de ser carregada pelo SQLLOADER é executado o comando truncate para esvazia-la.
Depois de carregada deve haver um script para inserir os dados da tabela TEMP para a tabela definitiva., porém a tabela TEMP pode receber dados atualizados de registros que já estão na tabela definitiva, por exemplo o sistema fonte atualizou a descrição da requisição. (RESO_TE_REQ / Descrição da Requisição)
Tabela temporária (Nova carga)
COUNTRYCODE, ATEN_NU_PTO, SEGM_CD, FASE_NU_SEQ, RESO_NU_SEQ, RESO_TE_REQ, RESO_TE_ATEN
BR, 35, 1, 1, 1, VERIFICAR NOME VS, si
Tabela definitiva (Carga antiga)
COUNTRYCODE, ATEN_NU_PTO, SEGM_CD, FASE_NU_SEQ, RESO_NU_SEQ, RESO_TE_REQ, RESO_TE_ATEN
BR, 35, 1, 1, 1, VERIFICAR Ne VS, si
Veja que os registros chave são idênticos e o oracle não vai inserir esse registro sendo assim a descrição da requisição ficará VERIFICAR Ne VS ao invés de corrigida como VERIFICAR NOME VS.
A idéia seria verificar esse registro na tabela temporária e se a definitiva já tem esse registro, excluir da definitiva e depois inserir o novo registro da temp para a definitiva, ou seja uma atualização do registro na definitiva já que a temporária será apagada a cada nova carga.
"
Recebi ainda do autor os arquivos texto para o teste e o CTL (control do sql loader).
Ele está na versão 9ir2, portanto a opção MERGE está disponível.
Vamos ao exemplo:
ops$marcio@ORA10G> CREATE TABLE CASE_STG_REQ_TEMP
2 (
3 COUNTRYCODE VARCHAR2(3),
4 ATEN_NU_PTO NUMBER(10),
5 SEGM_CD NUMBER(3),
6 FASE_NU_SEQ NUMBER(3),
7 RESO_NU_SEQ NUMBER(3),
8 RESO_TE_REQ VARCHAR2(20),
9 RESO_TE_ATEN VARCHAR2(30)
10 )
11 /
Table created.
ops$marcio@ORA10G>
ops$marcio@ORA10G> CREATE TABLE CASE_STG_REQ_DEF
2 (
3 COUNTRYCODE VARCHAR2(3),
4 ATEN_NU_PTO NUMBER(10),
5 SEGM_CD NUMBER(3),
6 FASE_NU_SEQ NUMBER(3),
7 RESO_NU_SEQ NUMBER(3),
8 RESO_TE_REQ VARCHAR2(20),
9 RESO_TE_ATEN VARCHAR2(30), CONSTRAINT CASE_STG_REQ_TEMP PRIMARY KEY(ATEN_NU_PTO, FASE_NU_SEQ, RESO_NU_SEQ)
10 )
11 /
Table created.
Agora, simulando sua carga de dados inicial. Não é necessário truncar a tabela como voce havia mencionado, o seu ctl já está fazendo isso para voce, veja logo abaixo que está explícito o TRUNCATE.
Se alguém estiver interessado em reproduzir o exemplo, aqui estão os arquivos de dados (dw.txt) e o control (dw.ctl)
--- dw.ctl
LOAD DATA
INFILE "C:\scripts\blog\question\DW.txt"
TRUNCATE
INTO TABLE CASE_STG_REQ_TEMP
(
countrycode Position (1:3) CHAR,
aten_nu_pto Position (4:13) INTEGER EXTERNAL,
segm_cd Position (14:16) INTEGER EXTERNAL,
fase_nu_seq Position (17:19) INTEGER EXTERNAL,
reso_nu_seq Position (20:22) integer external,
reso_te_req Position (23:42) CHAR,
reso_te_aten Position (43:149)CHAR
)
---
--- dw.txt
CO 35 1 1 1 VERIFICAR NOMBRE VS si
CO 38 1 1 1 VERIFICAR NOMBRE VS si
CO 42 1 1 1 AUTORIZACION CARDS Ssi
CO 47 1 1 1 NUMERO DE CTA A DEBI4.8743e13
CO 48 1 1 1 AUTORIZACION CARDS Ssi
CO 53 1 1 1 AUTORIZACION CARDS Ssi
CO 54 1 1 1 AUTORIZACION CARDS Ssi
CO 57 1 1 1 AUTORIZACION CARDS Ssi
CO 74 1 1 1 AUTORIZACION CARDS Sok
CO 86 1 1 1 AUTORIZACION CARDS Sok
CO 90 1 1 1 AUTORIZACION CARDS Sok
CO 95 1 1 1 VERIFICAR NOMBRE VS 1
CO 113 1 1 1 AUTORIZACION CARDS Sok
CO 122 1 1 1 AUTORIZACION CARDS Sok
CO 124 1 1 1 VERIFICAR NOMBRE VS ok
CO 125 1 1 1 AUTORIZACION CARDS Sok
CO 126 1 1 1 VERIFICAR NOMBRE VS ok
CO 128 1 1 1 AUTORIZACION CARDS Sok
CO 186 1 1 1 AUTORIZACION CARDS Sok
CO 204 1 1 1 AUTORIZACION CARDS Sok
CO 206 1 1 1 AUTORIZACION CARDS Sok
CO 228 1 1 1 VERIFICAR NOMBRE VS ok
CO 237 1 1 1 AUTORIZACION CARDS Sok
CO 239 1 1 1 AUTORIZACION CARDS Sok
CO 247 1 1 1 AUTORIZACION CARDS Sok
CO 326 1 1 1 TEST_REQUISITO_RAUL ewfewfwer
CO 327 1 1 1 Antiguedad 31 - 60 DIAS
---
ops$marcio@ORA10G> host sqlldr userid=/ control=dw.ctl data=dw.txt
SQL*Loader: Release 10.1.0.2.0 - Production on Thu May 19 02:50:21 2005
Copyright (c) 1982, 2004, Oracle. All rights reserved.
Commit point reached - logical record count 28
ops$marcio@ORA10G>
ops$marcio@ORA10G> select * from case_stg_req_temp;
COU ATEN_NU_PTO SEGM_CD FASE_NU_SEQ RESO_NU_SEQ RESO_TE_REQ RESO_TE_ATEN
--- ------------- ------------- ------------- ------------- -------------------- ------------------------------
CO 35 1 1 1 VERIFICAR NOMBRE VS si
CO 38 1 1 1 VERIFICAR NOMBRE VS si
CO 42 1 1 1 AUTORIZACION CARDS S si
CO 47 1 1 1 NUMERO DE CTA A DEBI 4.8743e13
CO 48 1 1 1 AUTORIZACION CARDS S si
CO 53 1 1 1 AUTORIZACION CARDS S si
CO 54 1 1 1 AUTORIZACION CARDS S si
CO 57 1 1 1 AUTORIZACION CARDS S si
CO 74 1 1 1 AUTORIZACION CARDS S ok
CO 86 1 1 1 AUTORIZACION CARDS S ok
CO 90 1 1 1 AUTORIZACION CARDS S ok
CO 95 1 1 1 VERIFICAR NOMBRE VS 1
CO 113 1 1 1 AUTORIZACION CARDS S ok
CO 122 1 1 1 AUTORIZACION CARDS S ok
CO 124 1 1 1 VERIFICAR NOMBRE VS ok
CO 125 1 1 1 AUTORIZACION CARDS S ok
CO 126 1 1 1 VERIFICAR NOMBRE VS ok
CO 128 1 1 1 AUTORIZACION CARDS S ok
CO 186 1 1 1 AUTORIZACION CARDS S ok
CO 204 1 1 1 AUTORIZACION CARDS S ok
CO 206 1 1 1 AUTORIZACION CARDS S ok
CO 228 1 1 1 VERIFICAR NOMBRE VS ok
CO 237 1 1 1 AUTORIZACION CARDS S ok
CO 239 1 1 1 AUTORIZACION CARDS S ok
CO 247 1 1 1 AUTORIZACION CARDS S ok
CO 326 1 1 1 TEST_REQUISITO_RAUL ewfewfwer
CO 327 1 1 1 Antiguedad 31 - 60 DIAS
27 rows selected.
Uma vez carregada a tabela, vou criar uma procedure para o MERGE da tabela legado com a tabela transiente.
ops$marcio@ORA10G> create or replace procedure do_merge
2 as
3 begin
4 merge into case_stg_req_def def
5 using case_stg_req_temp tmp
6 on ( def.aten_nu_pto = tmp.aten_nu_pto
7 and def.FASE_NU_SEQ = tmp.FASE_NU_SEQ
8 and def.RESO_NU_SEQ = tmp.RESO_NU_SEQ )
9 when matched then
10 update set def.countrycode = tmp.countrycode
11 , def.segm_cd = tmp.segm_cd
12 , def.reso_te_req = tmp.reso_te_req
13 , def.reso_te_aten= tmp.reso_te_aten
14 when not matched then
15 insert (def.COUNTRYCODE, def.ATEN_NU_PTO, def.SEGM_CD, def.FASE_NU_SEQ,
16 def.RESO_NU_SEQ, def.RESO_TE_REQ, def.RESO_TE_ATEN)
17 values (tmp.COUNTRYCODE, tmp.ATEN_NU_PTO, tmp.SEGM_CD, tmp.FASE_NU_SEQ,
18 tmp.RESO_NU_SEQ, tmp.RESO_TE_REQ, tmp.RESO_TE_ATEN);
19 end;
20 /
Procedure created.
ops$marcio@ORA10G> show error
No errors.
ops$marcio@ORA10G>
ops$marcio@ORA10G> select * from case_stg_req_def;
no rows selected
Tabela vazia.
ops$marcio@ORA10G> exec do_merge;
PL/SQL procedure successfully completed.
ops$marcio@ORA10G> select * from case_stg_req_def;
COU ATEN_NU_PTO SEGM_CD FASE_NU_SEQ RESO_NU_SEQ RESO_TE_REQ RESO_TE_ATEN
--- ------------- ------------- ------------- ------------- -------------------- ------------------------------
CO 90 1 1 1 AUTORIZACION CARDS S ok
CO 327 1 1 1 Antiguedad 31 - 60 DIAS
CO 247 1 1 1 AUTORIZACION CARDS S ok
CO 54 1 1 1 AUTORIZACION CARDS S si
CO 74 1 1 1 AUTORIZACION CARDS S ok
CO 48 1 1 1 AUTORIZACION CARDS S si
CO 204 1 1 1 AUTORIZACION CARDS S ok
CO 53 1 1 1 AUTORIZACION CARDS S si
CO 42 1 1 1 AUTORIZACION CARDS S si
CO 126 1 1 1 VERIFICAR NOMBRE VS ok
CO 35 1 1 1 VERIFICAR NOMBRE VS si
CO 326 1 1 1 TEST_REQUISITO_RAUL ewfewfwer
CO 239 1 1 1 AUTORIZACION CARDS S ok
CO 57 1 1 1 AUTORIZACION CARDS S si
CO 228 1 1 1 VERIFICAR NOMBRE VS ok
CO 206 1 1 1 AUTORIZACION CARDS S ok
CO 122 1 1 1 AUTORIZACION CARDS S ok
CO 186 1 1 1 AUTORIZACION CARDS S ok
CO 38 1 1 1 VERIFICAR NOMBRE VS si
CO 86 1 1 1 AUTORIZACION CARDS S ok
CO 124 1 1 1 VERIFICAR NOMBRE VS ok
CO 47 1 1 1 NUMERO DE CTA A DEBI 4.8743e13
CO 113 1 1 1 AUTORIZACION CARDS S ok
CO 128 1 1 1 AUTORIZACION CARDS S ok
CO 125 1 1 1 AUTORIZACION CARDS S ok
CO 95 1 1 1 VERIFICAR NOMBRE VS 1
CO 237 1 1 1 AUTORIZACION CARDS S ok
27 rows selected.
Agora completa com a tabela temporária. Próximo passo, simular sua carga diária. Vamos fazer isso em 2 etapas. A primeira, carregando o registro BR 100 ... com uma descrição e o segundo, trazendo o mesmo registro (PK) porém com a alteração da descrição -- como voce colocou na dúvida.
A simulação acontece assim, criei 3 arquivos .TXT o dw0 original, dw1 com o registro novo, dw2 com o registro a ser atualizado.
ops$marcio@ORA10G> host copy dw1.txt dw.txt
1 file(s) copied.
ops$marcio@ORA10G> host sqlldr userid=/ control=dw.ctl data=dw.txt
SQL*Loader: Release 10.1.0.2.0 - Production on Thu May 19 02:50:27 2005
Copyright (c) 1982, 2004, Oracle. All rights reserved.
Commit point reached - logical record count 1
ops$marcio@ORA10G> select * from case_stg_req_temp;
COU ATEN_NU_PTO SEGM_CD FASE_NU_SEQ RESO_NU_SEQ RESO_TE_REQ RESO_TE_ATEN
--- ------------- ------------- ------------- ------------- -------------------- ------------------------------
BR 100 1 1 1 VERIFICAR NOMBRE VS si
1 row selected.
ops$marcio@ORA10G> exec do_merge
PL/SQL procedure successfully completed.
ops$marcio@ORA10G> select * from case_stg_req_def;
COU ATEN_NU_PTO SEGM_CD FASE_NU_SEQ RESO_NU_SEQ RESO_TE_REQ RESO_TE_ATEN
--- ------------- ------------- ------------- ------------- -------------------- ------------------------------
CO 90 1 1 1 AUTORIZACION CARDS S ok
CO 327 1 1 1 Antiguedad 31 - 60 DIAS
CO 247 1 1 1 AUTORIZACION CARDS S ok
CO 54 1 1 1 AUTORIZACION CARDS S si
CO 74 1 1 1 AUTORIZACION CARDS S ok
CO 48 1 1 1 AUTORIZACION CARDS S si
CO 204 1 1 1 AUTORIZACION CARDS S ok
CO 53 1 1 1 AUTORIZACION CARDS S si
CO 42 1 1 1 AUTORIZACION CARDS S si
CO 126 1 1 1 VERIFICAR NOMBRE VS ok
CO 35 1 1 1 VERIFICAR NOMBRE VS si
CO 326 1 1 1 TEST_REQUISITO_RAUL ewfewfwer
CO 239 1 1 1 AUTORIZACION CARDS S ok
CO 57 1 1 1 AUTORIZACION CARDS S si
CO 228 1 1 1 VERIFICAR NOMBRE VS ok
CO 206 1 1 1 AUTORIZACION CARDS S ok
CO 122 1 1 1 AUTORIZACION CARDS S ok
CO 186 1 1 1 AUTORIZACION CARDS S ok
CO 38 1 1 1 VERIFICAR NOMBRE VS si
CO 86 1 1 1 AUTORIZACION CARDS S ok
CO 124 1 1 1 VERIFICAR NOMBRE VS ok
CO 47 1 1 1 NUMERO DE CTA A DEBI 4.8743e13
CO 113 1 1 1 AUTORIZACION CARDS S ok
CO 128 1 1 1 AUTORIZACION CARDS S ok
CO 125 1 1 1 AUTORIZACION CARDS S ok
CO 95 1 1 1 VERIFICAR NOMBRE VS 1
CO 237 1 1 1 AUTORIZACION CARDS S ok
BR 100 1 1 1 VERIFICAR NOMBRE VS si
28 rows selected.
ops$marcio@ORA10G>
ops$marcio@ORA10G> host copy dw2.txt dw.txt
1 file(s) copied.
ops$marcio@ORA10G> host sqlldr userid=/ control=dw.ctl data=dw.txt
SQL*Loader: Release 10.1.0.2.0 - Production on Thu May 19 02:50:32 2005
Copyright (c) 1982, 2004, Oracle. All rights reserved.
Commit point reached - logical record count 1
ops$marcio@ORA10G> select * from case_stg_req_temp;
COU ATEN_NU_PTO SEGM_CD FASE_NU_SEQ RESO_NU_SEQ RESO_TE_REQ RESO_TE_ATEN
--- ------------- ------------- ------------- ------------- -------------------- ------------------------------
BR 100 1 1 1 VERIFICAR NE VS si
1 row selected.
ops$marcio@ORA10G> exec do_merge
PL/SQL procedure successfully completed.
ops$marcio@ORA10G> select * from case_stg_req_def;
COU ATEN_NU_PTO SEGM_CD FASE_NU_SEQ RESO_NU_SEQ RESO_TE_REQ RESO_TE_ATEN
--- ------------- ------------- ------------- ------------- -------------------- ------------------------------
CO 90 1 1 1 AUTORIZACION CARDS S ok
CO 327 1 1 1 Antiguedad 31 - 60 DIAS
CO 247 1 1 1 AUTORIZACION CARDS S ok
CO 54 1 1 1 AUTORIZACION CARDS S si
CO 74 1 1 1 AUTORIZACION CARDS S ok
CO 48 1 1 1 AUTORIZACION CARDS S si
CO 204 1 1 1 AUTORIZACION CARDS S ok
CO 53 1 1 1 AUTORIZACION CARDS S si
CO 42 1 1 1 AUTORIZACION CARDS S si
CO 126 1 1 1 VERIFICAR NOMBRE VS ok
CO 35 1 1 1 VERIFICAR NOMBRE VS si
CO 326 1 1 1 TEST_REQUISITO_RAUL ewfewfwer
CO 239 1 1 1 AUTORIZACION CARDS S ok
CO 57 1 1 1 AUTORIZACION CARDS S si
CO 228 1 1 1 VERIFICAR NOMBRE VS ok
CO 206 1 1 1 AUTORIZACION CARDS S ok
CO 122 1 1 1 AUTORIZACION CARDS S ok
CO 186 1 1 1 AUTORIZACION CARDS S ok
CO 38 1 1 1 VERIFICAR NOMBRE VS si
CO 86 1 1 1 AUTORIZACION CARDS S ok
CO 124 1 1 1 VERIFICAR NOMBRE VS ok
CO 47 1 1 1 NUMERO DE CTA A DEBI 4.8743e13
CO 113 1 1 1 AUTORIZACION CARDS S ok
CO 128 1 1 1 AUTORIZACION CARDS S ok
CO 125 1 1 1 AUTORIZACION CARDS S ok
CO 95 1 1 1 VERIFICAR NOMBRE VS 1
CO 237 1 1 1 AUTORIZACION CARDS S ok
BR 100 1 1 1 VERIFICAR NE VS si
28 rows selected.
Feito, o último registro, como pode ser notado, foi atualizado corretamente.
Mais uma dica, ao invés de usar o sql loader, use o recurso da external table. Com o ctl, fica ainda mais fácil de gerar a DDL de criação da tabela basta voce pedir ao sqlldr com o parâmetro external_table=generate_only. Com isso, quando seu processo quando colocar o novo dw.txt a tabela temporária já estará pronta para o merge sem a necessidade de voce executar o loader.
ops$marcio@ORA10G> host sqlldr userid=/ control=dw.ctl external_table=generate_only
SQL*Loader: Release 10.1.0.2.0 - Production on Thu May 19 02:51:32 2005
Copyright (c) 1982, 2004, Oracle. All rights reserved.
ops$marcio@ORA10G> host type dw.log
SQL*Loader: Release 10.1.0.2.0 - Production on Thu May 19 02:51:32 2005
Copyright (c) 1982, 2004, Oracle. All rights reserved.
Control File: dw.ctl
Data File: C:\scripts\blog\question\DW.txt
Bad File: DW.bad
Discard File: none specified
(Allow all discards)
Number to load: ALL
Number to skip: 0
Errors allowed: 50
Continuation: none specified
Path used: External Table
Table CASE_STG_REQ_TEMP, loaded from every logical record.
Insert option in effect for this table: TRUNCATE
Column Name Position Len Term Encl Datatype
------------------------------ ---------- ----- ---- ---- ---------------------
COUNTRYCODE 1:3 3 CHARACTER
ATEN_NU_PTO 4:13 10 CHARACTER
SEGM_CD 14:16 3 CHARACTER
FASE_NU_SEQ 17:19 3 CHARACTER
RESO_NU_SEQ 20:22 3 CHARACTER
RESO_TE_REQ 23:42 20 CHARACTER
RESO_TE_ATEN 43:149 107 CHARACTER
CREATE DIRECTORY statements needed for files
------------------------------------------------------------------------
CREATE DIRECTORY SYS_SQLLDR_XT_TMPDIR_00000 AS 'c:\scripts\blog\question'
CREATE DIRECTORY SYS_SQLLDR_XT_TMPDIR_00000 AS 'C:\scripts\blog\question\'
CREATE TABLE statement for external table:
------------------------------------------------------------------------
CREATE TABLE "SYS_SQLLDR_X_EXT_CASE_STG_REQ_"
(
"COUNTRYCODE" VARCHAR2(3),
"ATEN_NU_PTO" NUMBER(10),
"SEGM_CD" NUMBER(3),
"FASE_NU_SEQ" NUMBER(3),
"RESO_NU_SEQ" NUMBER(3),
"RESO_TE_REQ" VARCHAR2(20),
"RESO_TE_ATEN" VARCHAR2(30)
)
ORGANIZATION external
(
TYPE oracle_loader
DEFAULT DIRECTORY SYS_SQLLDR_XT_TMPDIR_00000
ACCESS PARAMETERS
(
RECORDS DELIMITED BY NEWLINE CHARACTERSET WE8MSWIN1252
BADFILE 'SYS_SQLLDR_XT_TMPDIR_00000':'DW.bad'
LOGFILE 'dw.log_xt'
READSIZE 1048576
FIELDS LDRTRIM
REJECT ROWS WITH ALL NULL FIELDS
(
"COUNTRYCODE" (1:3) CHAR(3),
"ATEN_NU_PTO" (4:13) INTEGER EXTERNAL(10),
"SEGM_CD" (14:16) INTEGER EXTERNAL(3),
"FASE_NU_SEQ" (17:19) INTEGER EXTERNAL(3),
"RESO_NU_SEQ" (20:22) INTEGER EXTERNAL(3),
"RESO_TE_REQ" (23:42) CHAR(20),
"RESO_TE_ATEN" (43:149) CHAR(107)
)
)
location
(
'DW.txt'
)
)REJECT LIMIT UNLIMITED
INSERT statements used to load internal tables:
------------------------------------------------------------------------
INSERT /*+ append */ INTO CASE_STG_REQ_TEMP
(
COUNTRYCODE,
ATEN_NU_PTO,
SEGM_CD,
FASE_NU_SEQ,
RESO_NU_SEQ,
RESO_TE_REQ,
RESO_TE_ATEN
)
SELECT
"COUNTRYCODE",
"ATEN_NU_PTO",
"SEGM_CD",
"FASE_NU_SEQ",
"RESO_NU_SEQ",
"RESO_TE_REQ",
"RESO_TE_ATEN"
FROM "SYS_SQLLDR_X_EXT_CASE_STG_REQ_"
statements to cleanup objects created by previous statements:
------------------------------------------------------------------------
DROP TABLE "SYS_SQLLDR_X_EXT_CASE_STG_REQ_"
DROP DIRECTORY SYS_SQLLDR_XT_TMPDIR_00000
DROP DIRECTORY SYS_SQLLDR_XT_TMPDIR_00000
Run began on Thu May 19 02:51:32 2005
Run ended on Thu May 19 02:51:37 2005
Elapsed time was: 00:00:05.06
CPU time was: 00:00:00.05
ops$marcio@ORA10G>
Comments:
<< Home
Prezado Anakin Marcio Portes Skywalker: Percebi que ao sanar a minha dúvida, és um grande mestre na ferramenta. Ao me basear na sua solução, meu gerente de projetos na Argentina me perguntou:
"Puedes explicarme lo que és el commando merge ? Porque yo no conosco"....
Aí eu tive que explicar...
Abraços e segura que vou mandar outras dúvidas, Muito obrigado pela ajuda e cuidado com o lado negro da força!
Alexandre Taleb
Post a Comment
"Puedes explicarme lo que és el commando merge ? Porque yo no conosco"....
Aí eu tive que explicar...
Abraços e segura que vou mandar outras dúvidas, Muito obrigado pela ajuda e cuidado com o lado negro da força!
Alexandre Taleb
<< Home