全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1059
推到 Plurk!
推到 Facebook!

Oracle的Function與Delphi的TStored Proc的問題

尚未結案
narcysion
一般會員


發表:54
回覆:18
積分:14
註冊:2003-03-14

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-11-04 18:09:33 IP:210.202.xxx.xxx 未訂閱
下面的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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-11-04 18:18:00 IP:218.32.xxx.xxx 未訂閱
narcysion 你好 :    試試用 TQuery, SQL : 'select FT_SE01MDY(...) from dual' 看看.    第二個問題, 答案是...可以.
narcysion
一般會員


發表:54
回覆:18
積分:14
註冊:2003-03-14

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-11-05 10:02:52 IP:61.222.xxx.xxx 未訂閱
請問: 'select FT_SE01MDY(...) from dual' ==>那裡面(...) 要打什麼。
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-11-05 11:29:43 IP:218.163.xxx.xxx 未訂閱
引言: 請問: 'select FT_SE01MDY(...) from dual' ==>那裡面(...) 要打什麼。 < face="Verdana, Arial, Helvetica"> (...) : 就是要傳入的參數, 如 (1,'A','B'...)
narcysion
一般會員


發表:54
回覆:18
積分:14
註冊:2003-03-14

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-11-05 16:57:21 IP:61.222.xxx.xxx 未訂閱
Mickey版主: 我按照你的方法試,Query1.Active=True會出現下面的錯誤訊息。 但我若將INSERT INTO 那段拿掉,就沒有問題了。我不能把SELECT跟INSERT寫在一起嗎?還是我哪裡有寫錯~
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-11-05 21:22:56 IP:218.32.xxx.xxx 未訂閱
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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-11-06 13:46:02 IP:210.243.xxx.xxx 未訂閱
Mickey版主您好: 您幫我改的那段procedure是可以執行的,再請教您一個問題,我在Delphi是使用TStoredProc元件,我要Add fields會出現"Error creating cursor handle",那我在PL/SQL傳回的值,要如何讀到前端的DELPHI呢?
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-11-06 22:01:31 IP:218.32.xxx.xxx 未訂閱
因為這個 Stored Procedure 並不是 Return Cursor, 所以 TStoredProcedure.Active := True; 就會有 Error. 要用 ExecProc , 如上篇所附之 Delphi 範例. 其中 TStoredProcedure.ParamByName('RESULT').ParamType := ptOutPut;
系統時間:2024-06-02 17:29:43
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!