seria interessante utilizar o merge tbm.

dá uma olhada nesse link

http://www.psoug.org/reference/merge.html

O Merge é interessante pois ele faz Insert e Update ao mesmo tempo.

Ele insere os registros que não existem na tabel e atualiza caso já exista.

Não se engane com a versão do oracle desse tutorial.
Já usei o Merge até com oracle 8

Atenciosamente.

Oracle Merge Statements
Version 11.1
Note: Primarily of value when moving large amounts of data in data warehouse
situations.

Merge Statement Demo     MERGE <hint> INTO <table_name>
USING <table_view_or_query>
ON (<condition>)
WHEN MATCHED THEN <update_clause>
DELETE <where_clause>
WHEN NOT MATCHED THEN <insert_clause>
[LOG ERRORS <log_errors_clause> <reject limit <integer | unlimited>];
CREATE TABLE employee (
employee_id NUMBER(5),
first_name  VARCHAR2(20),
last_name   VARCHAR2(20),
dept_no     NUMBER(2),
salary      NUMBER(10));

INSERT INTO employee VALUES (1, 'Dan', 'Morgan', 10, 100000);
INSERT INTO employee VALUES (2, 'Helen', 'Lofstrom', 20, 100000);
INSERT INTO employee VALUES (3, 'Akiko', 'Toyota', 20, 50000);
INSERT INTO employee VALUES (4, 'Jackie', 'Stough', 20, 40000);
INSERT INTO employee VALUES (5, 'Richard', 'Foote', 20, 70000);
INSERT INTO employee VALUES (6, 'Joe', 'Johnson', 20, 30000);
INSERT INTO employee VALUES (7, 'Clark', 'Urling', 20, 90000);

CREATE TABLE bonuses (
employee_id NUMBER, bonus NUMBER DEFAULT 100);

INSERT INTO bonuses (employee_id) VALUES (1);
INSERT INTO bonuses (employee_id) VALUES (2);
INSERT INTO bonuses (employee_id) VALUES (4);
INSERT INTO bonuses (employee_id) VALUES (6);
INSERT INTO bonuses (employee_id) VALUES (7);
COMMIT;

SELECT * FROM employee;

SELECT * FROM bonuses;

MERGE INTO bonuses b
USING (
  SELECT employee_id, salary, dept_no
  FROM employee
  WHERE dept_no =20) e
ON (b.employee_id = e.employee_id)
WHEN MATCHED THEN
  UPDATE SET b.bonus = e.salary * 0.1
  DELETE WHERE (e.salary < 40000)
WHEN NOT MATCHED THEN
  INSERT (b.employee_id, b.bonus)
  VALUES (e.employee_id, e.salary * 0.05)
  WHERE (e.salary > 40000);

SELECT * FROM bonuses;

Evandro Giachetto
Oracle SQL Expert
Oracle Certified Associate
evan...@clickinterativa.com.br


Em 4 de março de 2010 09:03, Valtemir Araujo de Lima <valte...@govesa.com.br
> escreveu:

>
>
> UPDATE TABELA02 I
> SET I.CLASS_FISC = (SELECT MAX(M.NCM)
> FROM TABELA01 M
> WHERE M.COD_ESTRUTURADO = I.CDPRODUTO)
> WHERE I.NCM IS NULL
>
> o max é para garantir join com mais de uma linha sem erro.
>
> -----Mensagem original-----
> De: Evandro Giachetto 
> [mailto:evandrogiache...@gmail.com<evandrogiachetto%40gmail.com>
> ]
> Enviada em: 4 de março de 2010 08:50
> Para: oracle_br@yahoogrupos.com.br <oracle_br%40yahoogrupos.com.br>
> Assunto: Re: [oracle_br] dúvida update
>
>
> insert into tabela02(CLASS_FISC)
> select NCM from tabela01;
>
> Evandro Giachetto
> Oracle SQL Expert
> Oracle Certified Associate
> evan...@clickinterativa.com.br <evandro%40clickinterativa.com.br>
>
> Em 4 de março de 2010 08:25, Tiago da Silva
> <tiagodasil...@gmail.com <tiagodasilvap%40gmail.com>>escreveu:
>
> >
> >
> > Bom Dia a Todos!
> >
> > Estou Iniciando no grupo, estou com a seguinte duvida:
> >
> > Quero inserir os dados do campo M.NCM no campo I.CLASS_FISC. Estou como
> > dúvida de como fazer esse update.
> >
> > select M.COD_ESTRUTURADO
> >
> > I.CDPRODUTO
> >
> > M.NCM
> >
> > I.CLASS_FISC
> >
> > from TABELA01 M,
> >
> > TABELA02 I
> >
> > where M.COD_ESTRUTURADO = I.CDPRODUTO
> >
> > and M.NCM is not null
> >
> > and I.CLASS_FISC is null
> >
> > Aguardo Retorno!
> >
> > [As partes desta mensagem que não continham texto foram removidas]
> >
> >
> >
>
> [As partes desta mensagem que não continham texto foram removidas]
>
> ------------------------------------
>
> ----------------------------------------------------------
>
> ----------------------------------------------
> >Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de
> inteira
> responsabilidade de seus remetentes.
> Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/
> ----------------------------------------------------------
> ----------------------------------------------
> >Apostilas » Dicas e Exemplos » Função » Mundo Oracle » Package » Procedure
> » Scripts » Tutoriais - O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! VISITE:
> http://www.oraclebr.com.br/
> ----------------------------------------------------------
> -------------------------------------------- Links do Yahoo! Grupos
>
>  
>


[As partes desta mensagem que não continham texto foram removidas]



------------------------------------

--------------------------------------------------------------------------------------------------------------------------
>Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de inteira 
>responsabilidade de seus remetentes.
Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ 
--------------------------------------------------------------------------------------------------------------------------
>Apostilas » Dicas e Exemplos » Função » Mundo Oracle » Package » Procedure » 
>Scripts » Tutoriais - O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! VISITE: 
>http://www.oraclebr.com.br/  
------------------------------------------------------------------------------------------------------------------------
 Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
    http://br.groups.yahoo.com/group/oracle_br/

<*> Para sair deste grupo, envie um e-mail para:
    oracle_br-unsubscr...@yahoogrupos.com.br

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
    http://br.yahoo.com/info/utos.html


Responder a