PROBLEMA NO COMANDO MERGE

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
pbazzarella
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 3
Registrado em: Seg, 05 Mai 2008 9:21 am
Localização: Rio de Janeiro

Prezados Amigos,

Estou com o seguinte problema relativo ao comando MERGE. Se alguém souber a causa eu agradeço. Grande abraço,

Saída do DBMS_OUTPUT:

ERRO NO SUB-PROGRAMA.
ERRO ORACLE: ORA-00904: "F"."CD_MAT": invalid identifier
Criei duas tabelas e uma procedure que realiza o comando MERGE. A procedure foi compilada sem nenhum erro de compilação.

O que está causando este erro de execução (quando chamo o execute TESTE_MERGE)???

Tabelas:

Selecionar tudo

CREATE TABLE FATO_FUNC
(
 CD_MAT		NUMBER(5) NOT NULL
,NM_FUNC	VARCHAR2(12)
,NM_SOBRENOME	VARCHAR2(12)
,CD_DEPTO	CHAR(3) 
,NR_RAMAL	NUMBER(4)
,DT_ADM		DATE
,NR_CARGO	NUMBER(3)
,NR_GIT		NUMBER(2)
,IN_SEXO	VARCHAR2(1)	CHECK (IN_SEXO IN ('F', 'M'))
,DT_NASC	DATE
,VL_SAL		NUMBER(9,2)
,NM_FOTO        VARCHAR2(200)
)

CREATE TABLE TEMP_FUNC
(
 CD_MAT		NUMBER(5) NOT NULL
,NM_FUNC	VARCHAR2(12)
,NM_SOBRENOME	VARCHAR2(12)
,CD_DEPTO	CHAR(3) 
,NR_RAMAL	NUMBER(4)
,DT_ADM		DATE
,NR_CARGO	NUMBER(3)
,NR_GIT		NUMBER(2)
,IN_SEXO	VARCHAR2(1)	CHECK (IN_SEXO IN ('F', 'M'))
,DT_NASC	DATE
,VL_SAL		NUMBER(9,2)
,NM_FOTO        VARCHAR2(200)
,constraint pk_func1 PRIMARY KEY (CD_MAT)
)
PROCEDURE:

Selecionar tudo

CREATE OR REPLACE PROCEDURE TESTE_MERGE IS
-- Created on 23/10/2008 by PEDRO.SILVA 

-- Local variables here
VAR_TOT_REG_TOTAL       NUMBER;   
begin
  -- Test statements here

   VAR_TOT_REG_TOTAL := 0;
     
  MERGE INTO FATO_FUNC F
  USING (SELECT cd_mat, 
                nm_func, 
                nm_sobrenome, 
                cd_depto, 
                nr_ramal, 
                dt_adm, 
                nr_cargo, 
                nr_git, 
                in_sexo, 
                dt_nasc, 
                vl_sal, 
                nm_foto             
                FROM TEMP_FUNC ) T
           ON   (F.CD_MAT = T.CD_MAT)
  
  WHEN MATCHED THEN
  
    UPDATE
       SET        F.cd_mat          = T.cd_mat, 
                  F.nm_func         = T.nm_func, 
                  F.nm_sobrenome    = T.nm_sobrenome, 
                  F.cd_depto        = T.cd_depto, 
                  F.nr_ramal        = T.nr_ramal, 
                  F.dt_adm          = T.dt_adm, 
                  F.nr_cargo        = T.nr_cargo, 
                  F.nr_git          = T.nr_git, 
                  F.in_sexo         = T.in_sexo, 
                  F.dt_nasc         = T.dt_nasc, 
                  F.vl_sal          = T.vl_sal, 
                  F.nm_foto         = T.nm_foto
  WHEN NOT MATCHED THEN
    INSERT
      (         F.CD_MAT, 
                F.nm_func, 
                F.nm_sobrenome, 
                F.cd_depto, 
                F.nr_ramal, 
                F.dt_adm, 
                F.nr_cargo, 
                F.nr_git, 
                F.in_sexo, 
                F.dt_nasc, 
                F.vl_sal, 
                F.nm_foto)
    VALUES
      (         T.CD_MAT, 
                T.nm_func, 
                T.nm_sobrenome, 
                T.cd_depto, 
                T.nr_ramal, 
                T.dt_adm, 
                T.nr_cargo, 
                T.nr_git, 
                T.in_sexo, 
                T.dt_nasc, 
                T.vl_sal, 
                T.nm_foto);
  VAR_TOT_REG_TOTAL := SQL%ROWCOUNT;
  DBMS_OUTPUT.PUT_LINE('TOTAL DE REGISTROS: '||VAR_TOT_REG_TOTAL);
  -- DBMS_OUTPUT.PUT_LINE();
  
EXCEPTION
   WHEN OTHERS THEN

     	ROLLBACK;

        DBMS_OUTPUT.PUT_LINE('ERRO NA PROCEDURE TESTE_MERGE.');
        DBMS_OUTPUT.PUT_LINE('ERRO ORACLE: '|| SUBSTR(SQLERRM(SQLCODE), 1, 200));
     
        
END;  
pbazzarella
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 3
Registrado em: Seg, 05 Mai 2008 9:21 am
Localização: Rio de Janeiro

Os dados que inseri foram:

Selecionar tudo

insert into temp_func values
(10,'CRISTINA','HENDERSON','A00',3978,'01/01/2003',66,18,'F','14/08/1961',7275,'c:\winnt\Renda azul 16.bmp');
insert into temp_funcvalues
(20,'MIGUEL','TEIXEIRA','B01',3476,'01/10/2001',61,18,'M','02/02/1976',3925,'c:\winnt\Tapete.bmp');
insert into temp_funcvalues
(30,'SANDRA','KWAN','C01',4738,'05/04/2003',60,20,'F','11/05/1969',3425,'c:\winnt\Leques.bmp');
insert into temp_funcvalues
(50,'JOANA','GOMES','E01',6789,'17/08/1997',58,16,'M','15/09/1963',2917.5,'c:\winnt\Seda.bmp');

Selecionar tudo

insert into FATO_func values
(10,'CRIS','HENDERSON','A00',3978,'01/01/2003',66,18,'F','14/08/1961',7275,'c:\winnt\Renda azul 16.bmp');
insert into FATO_funcvalues
(20,'MIGUEL','TEIXEIRA','B01',3476,'01/10/2001',61,18,'M','02/02/1976',3925,'c:\winnt\Tapete.bmp');
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante