Skip to Main Content

SQL & PL/SQL

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

Oracle SQL: Insert into y returning x

450176Aug 15 2005 — edited Aug 15 2005
Trabajo con Delphi6, componentes ODACnet 4.50.3.24 y Oracle 9i y tengo el siguiente problema:

En una tabla he creado un campo llamado N_NUM_ORDEN, que se actualiza con el valor de una “secuencia” que se “dispara” al insertar un registro.

Mi pregunta, es como puedo pasar el valor de 'RETURNING' cuando hago “insert into..” a una variable, para poder mostrar en pantalla el número asignado.


Los códigos de la secuencia y del disparador son:

CREATE SEQUENCE "DESARROLLO"."TA_LIQ_NUM_ORDEN" INCREMENT BY 1
START WITH 5000 MAXVALUE 99999 MINVALUE 1 NOCYCLE
NOCACHE ORDER;

CREATE OR REPLACE TRIGGER "DESARROLLO"."TA_LIQ_GENERAR_NUM_ORDEN"
BEFORE INSERT OR UPDATE OF "NUM_ORDEN" ON "REGISTRO"
FOR EACH ROW
begin
if :new.num_orden is null then
select TA_LIQ_NUM_ORDEN.NextVal
into :new.num_orden
from Dual;
end if;
end;

Procedure TfLiq.grabaSQLliq;
begin
fdm.OraSQL_liq.SQL.clear;
fdm.OraSQL_liq.SQL.Text:=
'INSERT INTO Desarrollo.registro'+#13+
'(C_NUM_OFICINA, N_NUM_YEAR, N_NUM_ORDEN)'+#13+
' VALUES '+#13+
'(:C_NUM_OFICINA, :N_NUM_YEAR, :N_NUM_ORDEN,'+#13+
'RETURNING'+#13+
' N_NUM_ORDEN'+#13+
'INTO'+#13+
' :N_NUM_ORDEN'; // <= como pasar este dato a una variable

fdm.OraSQL_liq.ParamByName('C_NUM_OFICINA').AsString := num_oficina.text;
fdm.OraSQL_liq.ParamByName('N_NUM_YEAR').AsString := Num_year.text;
fdm.OraSQL_liq.ParamByName('N_NUM_ORDEN').AsString := Num_Orden.Text;

fdm.OraSQL_liq.prepared;
fdm.OraSQL_liq.execute;

End;
Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on Sep 12 2005
Added on Aug 15 2005
2 comments
559 views