Oracle的Function與Delphi的TStored Proc的問題 |
尚未結案
|
narcysion
一般會員 發表:54 回覆:18 積分:14 註冊:2003-03-14 發送簡訊給我 |
下面的Function在Oracle裡面編譯並沒有錯誤,但在Delphi裡面,我要將TStroedProc.Active:=True時卻會出現下面的錯誤,請問是哪裡出了問題。 create or replace Function FT_SE01Mdy
(v_Kind in integer,
v_User_ID in varchar2,
v_User_No in varchar2,
v_User_Name in varchar2,
v_EC_Mode in varchar2)
return varchar2 is
v_Rtn varchar2(100);
v_count integer;
begin
if v_Kind=0 then /*第一個IF*/
select count(*) into v_count from SE01 where User_ID = v_User_ID; if v_count=1 then /*第二個IF,若有執行這段,不要執行inset into*/
select ERR_MSG into v_Rtn from ERR where Err_Class = 'SE01' and Err_ID = 1001 and Err_Mode =v_EC_Mode;
return(v_Rtn); /*傳回值*/
end if;
insert into SE01 (User_ID,User_No,User_Name,EC_Mode,PWS)
values (v_User_ID,v_User_No,v_User_Name,v_EC_Mode,v_User_ID);
commit; select ERR_MSG into v_Rtn from ERR where Err_Class = 'SE01' and Err_ID = 1001 and Err_Mode =v_EC_Mode;
return(v_Rtn); /*傳回值*/
end if;
return(v_Rtn);
end FT_SE01Mdy; 還有請問,在我的Function裡,若有執行第二個if時,我接下來的程式碼,就不要執行要直接跳出,請問我寫的方法對不對。
|
Mickey
版主 發表:77 回覆:1882 積分:1390 註冊:2002-12-11 發送簡訊給我 |
|
narcysion
一般會員 發表:54 回覆:18 積分:14 註冊:2003-03-14 發送簡訊給我 |
|
Mickey
版主 發表:77 回覆:1882 積分:1390 註冊:2002-12-11 發送簡訊給我 |
|
narcysion
一般會員 發表:54 回覆:18 積分:14 註冊:2003-03-14 發送簡訊給我 |
|
Mickey
版主 發表:77 回覆:1882 積分:1390 註冊:2002-12-11 發送簡訊給我 |
narcysion 你好: 我以前用 Oracle 的 function, 從來沒有在 function 中, 去異動(Insert/Update/Delete)其他的資料, 所以從沒遇到 你所遭遇的問題, 你也幫我上了一課...感謝你. 至於你的問題, 恐怕需要回到用 Oracle Procedure, 搭配 前端 Delphi TStoredProcedure 元件, 將要回傳的結果, 用 "out" 參數, 加以改寫...抱歉...沒能一次找對方向. 如 :
create or replace procedure FT_SE01Mdy (v_Kind in integer, v_User_ID in varchar2, v_User_No in varchar2, v_User_Name in varchar2, v_EC_Mode in varchar2, result out varchar2) as v_Rtn varchar2(100); v_count integer; begin result := ''; if v_Kind=0 then /*第一個IF*/ select count(*) into v_count from SE01 where User_ID = v_User_ID; if v_count=1 then /*第二個IF,若有執行這段,不要執行inset into*/ select ERR_MSG into v_Rtn from ERR where Err_Class = 'SE01' and Err_ID = 1001 and Err_Mode =v_EC_Mode; result := v_Rtn; return; end if; insert into SE01 (User_ID,User_No,User_Name,EC_Mode,PWS) values (v_User_ID,v_User_No,v_User_Name,v_EC_Mode,v_User_ID); commit; select ERR_MSG into v_Rtn from ERR where Err_Class = 'SE01' and Err_ID = 1001 and Err_Mode =v_EC_Mode; result := v_Rtn; return; end if; end FT_SE01Mdy;因為此刻我沒有 Oracle 可試, 若有困難再 po. |
narcysion
一般會員 發表:54 回覆:18 積分:14 註冊:2003-03-14 發送簡訊給我 |
|
Mickey
版主 發表:77 回覆:1882 積分:1390 註冊:2002-12-11 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |