Oracle SQL: Insert into y returning x
450176Aug 15 2005 — edited Aug 15 2005Trabajo 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;