2016-06-08 112 views
0

我有一個PL/SQL的功能如下:爲每個刀片重置變量值

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; 

現在使用此功能正在嘗試將值插入表:

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; 

第一插入取從函數返回的值。我希望爲第二次插入刷新值。我期待第二次插入將轉到該函數並返回另一個值。但現在正在這裏發生。採用相同的值並且查詢失敗且具有唯一約束索引。

回答

0

我會嘗試select test(),... instead of select var1

+1

它工作。謝謝 :) – bin