Thank you very much for your replies. It was very helpfull for me. 2012/6/8 ddf <orat...@msn.com>
> > > On Jun 6, 1:03 pm, charly <augustoada...@gmail.com> wrote: > > Hello friends, I am currently starting in the area of pl / sql. I wonder > > if anyone could give me a hand with a situation. I' am creating a > procedure > > that updates TARGET TABLE. In case it finds new records in the BASE > TABLE. > > If there is something new in the BASE TABLE, i have to insert the new > > records in the TARGET TABLE. > > > > To acomplish this I have done the following: > > > > PROCEDURE automatizacion_celdas > > ( > > ) > > > > IS > > > > -----VARIABLES DEL PROCEDIMIENTO----- > > > > v_id it_bi.cnf_cellsite_optima.id%type; > > v_nombre it_bi.cnf_cellsite_optima.nombre%type; > > v_latitude it_bi.cnf_cellsite_optima.latitude%type; > > v_longitud it_bi.cnf_cellsite_optima.longitude%type; > > v_opid it_bi.cnf_cellsite_optima.opid%type; > > v_opnombre it_bi.cnf_cellsite_optima.opnombre%type; > > v_tecnologia it_bi.cnf_tr_celdas_optima.tecnologia%type; > > v_provincia it_bi.cnf_tr_celdas_optima.cod_provincia%type; > > v_ciudad it_bi.cnf_tr_celdas_optima.cod_ciudad%type; > > v_descripcion it_bi.cnf_tr_celdas_optima.cell_description%type; > > v_count number; > > v_etapa it_brain.flw_proceso_log.etapa%TYPE; > > v_cod_etapa it_brain.flw_proceso_log.cod_etapa%TYPE; > > > > BEGIN > > > > po_cod_err := 'DWH-00000'; --.AUTOMATIZACION_CELDAS: Error > > al actualizar datos > > > > UPDATE celdas c > > Set > > nombre = (SELECT nombre From > > Tabla_base ct where ct.id = c.id AND ct.nombre <> c.nombre ), > > latitude = (SELECT latitude From > > Tabla_base ct where ct.id = c.id AND ct.latitude <> c.latitude ), > > longitude = (SELECT longitude From > > Tabla_base ct where ct.id = c.id AND ct.nombre <> c.nombre ), > > opid = (SELECT opid From Tabla_base > > ct where ct.id = c.id AND ct.nombre <> c.nombre ), > > opnombre = (SELECT opnombre From > > Tabla_base ct where ct.id = c.id AND ct.opid <> c.opid ), > > tecnologia = (SELECT tecnologia From > > Tabla_base ct where ct.id = c.id AND ct.tecnologia <> c.tecnologia ), > > cod_provincia = (SELECT cod_provincia > > From Tabla_base ct where ct.id = c.id AND ct.cod_provincia <> > > c.cod_provincia ), > > cod_ciudad = (SELECT cod_ciudad From > > Tabla_base ct where ct.id = c.id AND ct.cod_ciudad <> c.cod_ciudad ), > > cell_description = (SELECT cell_description > > From Tabla_base ct where ct.id = c.id AND ct.cell_description <> > > c.cell_description ); > > > > po_cod_err := 'DWH-00000'; --.AUTOMATIZACION_CELDAS: > > Error al iniciar iteración > > > > FOR x in (select id from it_bi.cnf_tr_celdas_optima) > > LOOP > > > > ---------- Inicializacion de Variables------------ > > > > v_id := 0; > > v_nombre := 0; > > v_latitude := 0; > > v_longitud := 0; > > v_opid := 0; > > v_opnombre := 0; > > v_tecnologia := 0; > > v_provincia := 0; > > v_ciudad := 0; > > v_descripcion := 0; > > v_count := 0; > > > > Begin > > > > -----------Busco nuevos registro en la tabla----------------- > > > > select id, nombre, latitude, longitude, opid, > > opnombre,'Cell '|| opid ||' - '||substr(nombre, 1,11)||' -'||' GSM ' > > into v_id, > > v_nombre,v_latitude,v_longitud,v_opid,v_opnombre, v_descripcion > > from Tabla_base o > > where not EXISTS (select 1 from celdas t where t.id = > x.id > > ); > > > > po_cod_err := 'DWH-00000'; --.AUTOMATIZACION_CELDAS: > > Error al insertar datos > > > > -----------inserto registros en caso de haber > > nuevos----------------- > > > > v_count := sql%rowcount; > > > > IF v_count >= 1 then > > insert into celdas > > (id, > > nombre, > > latitude, > > longitude, > > opid, > > opnombre, > > tecnologia, > > cod_provincia, > > cod_ciudad, > > cell_description, > > fch_inicio, > > fch_fin, > > estado_actual > > ) > > VALUES (v_id, > > v_nombre, > > v_latitude, > > v_longitud, > > v_opid, > > v_opnombre, > > 'GSM', > > null, > > null, > > v_descripcion, > > null, > > null, > > null > > ); > > > > commit; > > > > END IF; > > > > end; > > > > end loop; > > > > END; > > > > What I want is to find some function to tell me if the select bring > records > > (if there are records), and if it is >= 1 then to insert the records in > the > > TARGET TABLE. I'm using the sql%rowcount and does not do what I seek . I > > will appreciate if someone can give me a guide or suggest me something. > > > > Thank you very much! I'll wait for your answers. > > > > Greetings!! > > It appears you are trying to re-invent the wheel; look at the > following straight SQL example that does what you are asking: > > SQL> create table empm as select * from emp where deptno = 10; > > Table created. > > SQL> > SQL> merge into empm m > 2 using emp e > 3 on ( e.EMPNO = m.EMPNO ) > 4 when matched then > 5 update set job='janitor' where ename='KING' ; > > 1 row merged. > > SQL> > SQL> select * From empm; > > EMPNO ENAME JOB MGR HIREDATE SAL > COMM DEPTNO > ---------- ---------- --------- ---------- --------- ---------- > ---------- ---------- > 7782 CLARK MANAGER 7839 09-JUN-81 > 2450 10 > 7839 KING janitor 17-NOV-81 > 5000 10 > 7934 MILLER CLERK 7782 23-JAN-82 > 1300 10 > > SQL> > SQL> rollback; > > Rollback complete. > > SQL> > SQL> merge into empm m > 2 using emp e > 3 on ( e.EMPNO = m.EMPNO ) > 4 when matched then > 5 update set job='janitor' where ename='KING' > 6 when not matched then > 7 insert (m.empno, m.ename, m.job) > 8 values (e.empno, e.ename, e.job) > 9 where e.deptno=20; > > 6 rows merged. > > SQL> > SQL> select * From empm; > > EMPNO ENAME JOB MGR HIREDATE SAL > COMM DEPTNO > ---------- ---------- --------- ---------- --------- ---------- > ---------- ---------- > 7782 CLARK MANAGER 7839 09-JUN-81 > 2450 10 > 7839 KING janitor 17-NOV-81 > 5000 10 > 7934 MILLER CLERK 7782 23-JAN-82 > 1300 10 > 7788 SCOTT ANALYST > 7566 JONES MANAGER > 7902 FORD ANALYST > 7369 SMITH CLERK > 7876 ADAMS CLERK > > 8 rows selected. > > SQL> > SQL> rollback; > > Rollback complete. > > SQL> > SQL> merge into empm m > 2 using emp e > 3 on ( e.EMPNO = m.EMPNO ) > 4 when not matched then > 5 insert (m.empno, m.ename, m.job) > 6 values (e.empno, e.ename, e.job) > 7 where e.deptno=20 > 8 when matched then > 9 update set job='janitor' where ename='KING' ; > > 6 rows merged. > > SQL> > SQL> select * From empm; > > EMPNO ENAME JOB MGR HIREDATE SAL > COMM DEPTNO > ---------- ---------- --------- ---------- --------- ---------- > ---------- ---------- > 7782 CLARK MANAGER 7839 09-JUN-81 > 2450 10 > 7839 KING janitor 17-NOV-81 > 5000 10 > 7934 MILLER CLERK 7782 23-JAN-82 > 1300 10 > 7788 SCOTT ANALYST > 7566 JONES MANAGER > 7902 FORD ANALYST > 7369 SMITH CLERK > 7876 ADAMS CLERK > > 8 rows selected. > > SQL> > > As you can see you can write the merge to process matched or unmatched > records 'first'. > > > David Fitzjarrell > > -- > You received this message because you are subscribed to the Google > Groups "Oracle PL/SQL" group. > To post to this group, send email to Oracle-PLSQL@googlegroups.com > To unsubscribe from this group, send email to > oracle-plsql-unsubscr...@googlegroups.com > For more options, visit this group at > http://groups.google.com/group/Oracle-PLSQL?hl=en > -- You received this message because you are subscribed to the Google Groups "Oracle PL/SQL" group. To post to this group, send email to Oracle-PLSQL@googlegroups.com To unsubscribe from this group, send email to oracle-plsql-unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/Oracle-PLSQL?hl=en