2016-06-08 11 views
0

Ich habe eine PL/SQL-Funktion wie folgt:einen variablen Wert für jeden Einsatz Zurücksetzen

create FUNCTION Test 
return number 
IS cnpParmId NUMBER; 
good VARCHAR(1) := 'F'; 
exist VARCHAR(1) := 'F'; 
begin 
good := 'F'; 
exist := 'F'; 
loop 
    select schema1.parm_id_seq.nextval into cnpParmId from dual; 
    begin 
     select 'T' into good from dual where cnpParmId not in (select PARM_ID from schema1.mytable1); 
     exception when NO_DATA_FOUND then good := 'F'; 
    end; 
    exit when good = 'T'; 
end loop; 
return cnpParmId; 
end; 

Jetzt mit dieser Funktion bin versucht, Werte in Tabellen einzufügen:

declare 
var1 number := Test; 

BEGIN 
INSERT INTO schema1.tbl 
(PARM_ID, PARM_NAM, PARM_VAL_TXT, PARM_USAGE_TYPE_CD, PARM_USAGE_VAL_TXT, CRTE_TS, CRTE_USER_ID, LST_UPDT_TS, LST_UPDT_USER_ID, SITE_CD) 
SELECT var1, 'VEL_INT_TYPE_MI', 'Minutes', 'RTS', NULL, SYSDATE, 'ilogdmgr', SYSDATE, 'ilogdmgr', NULL from dual; 

INSERT INTO schema1.tbl 
    (PARM_ID, PARM_NAM, PARM_VAL_TXT, PARM_USAGE_TYPE_CD, PARM_USAGE_VAL_TXT, 
    CRTE_TS, CRTE_USER_ID, LST_UPDT_TS, LST_UPDT_USER_ID, SITE_CD) 
    select var1, 'Hours', 48, 'RTS', NULL, SYSDATE, 'ilogdmgr', SYSDATE, 'ilogdmgr', NULL from dual; 

INSERT INTO schema1.tbl 
    (PARM_ID, PARM_NAM, PARM_VAL_TXT, PARM_USAGE_TYPE_CD, PARM_USAGE_VAL_TXT, 
    CRTE_TS, CRTE_USER_ID, LST_UPDT_TS, LST_UPDT_USER_ID, SITE_CD) 
    select var1, 'Days', 45, 'RTS', NULL, SYSDATE, 'ilogdmgr', SYSDATE, 'ilogdmgr', NULL from dual; 
end; 

Der erste Einsatz erfolgt der Wert, der von der Funktion zurückgegeben wird. Ich möchte, dass der Wert für die zweite Einfügung aktualisiert wird. Ich erwarte, dass die zweite Einfügung zur Funktion geht und einen anderen Wert zurückgibt. Aber das passiert jetzt hier. Derselbe Wert wird verwendet und die Abfrage schlägt mit dem eindeutigen Integritätsindex fehl.

Antwort

0

Ich werde versuchen select test(),... instead of select var1

+1

Es funktionierte. Vielen Dank :) – bin

Verwandte Themen