Oracle RETURN CURSOR 我要如何接回呢?? |
缺席
|
elvis114
一般會員 發表:37 回覆:53 積分:18 註冊:2003-06-17 發送簡訊給我 |
我要如何從 Oracle RETURN CURSOR 接回值呢??
Oracle PROCEDURE 如下: PROCEDURE select_department (
R_cursor OUT RET_Curor.RET_type_cursor,
oRETVAL OUT NUMBER
) IS
vRETVAL NUMBER(1):=0;
BEGIN
OPEN R_cursor FOR
select DEPT_NAME from department
where DELETE_FLAG = DEL_FLAG
order by DEPT_CODE;
vRETVAL := 0;
oRETVAL := vRETVAL;
RETURN;
EXCEPTION
when others then
vRETVAL := -1;
oRETVAL := vRETVAL;
RETURN;
raise;
END;
---------------------------
Delphi6 如下:
HR_Oracle.ADOSProc.Close;
HR_Oracle.ADOSProc.Parameters.Clear;
HR_Oracle.ADOSProc.ProcedureName := 'PKG_StatisticsSOFTWARE.select_department';
HR_Oracle.ADOSProc.Parameters.CreateParameter('oRetval',ftInteger,pdOutput,10,0); try
HR_Oracle.ADOSProc.ExecProc;
HR_Oracle.ADOSProc.Open;
for i:= 0 to HR_Oracle.ADOSProc.RecordCount-1 do begin
tmpst := '';
for j := 0 to HR_Oracle.ADOSProc.Fields.Count-1 do
tmpst := tmpst + HR_Oracle.ADOSProc.Fields[j].AsString + '--';
//memo1.Lines.Add(tmpst);
HR_Oracle.ADOSProc.Next;
end;
except On E:Exception do
begin
showmessage(E.Message);
Memo1.Text := E.Message ;
RunError;;
end;
end;
-----------------------
Error Message 如下:
ORA-06550: 第 1 行, 第 7 個欄位:
PLS-00306: 呼叫 'SELECT_DEPARTMENT' 時參數類型的數目錯誤
ORA-06550: 第 1 行, 第 7 個欄位:
PL/SQL: Statement ignored =======================
謝謝各位大德不吝賜教!!
小弟感激不進
=======================
------
願 南無藥師琉璃光如來 保佑您 |
Mickey
版主 發表:77 回覆:1882 積分:1390 註冊:2002-12-11 發送簡訊給我 |
|
elvis114
一般會員 發表:37 回覆:53 積分:18 註冊:2003-06-17 發送簡訊給我 |
嘿嘿我就知道會叫我看:
--------------------------------------------------------
elvis114 你好: 參考這篇看看:
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=48618
--------------------------------------------------------
這一篇我已經看過了,所以現在我依照他們討論的結果做測試!!
但是TADOStoredProc真的是他們講的這樣嗎??< >
有沒有人真的比較了解而又有實際用過,可否給我明確一點的訊息!!
謝謝< > =======================
謝謝各位大德不吝賜教!!
小弟感激不進
=======================
------
願 南無藥師琉璃光如來 保佑您 |
change.jian
版主 發表:29 回覆:620 積分:439 註冊:2003-06-02 發送簡訊給我 |
引言: 有沒有人真的比較了解而又有實際用過,可否給我明確一點的訊息!! 謝謝 >>< face="Verdana, Arial, Helvetica"> 這個....小弟我就是自己有用過,提供給您我的經驗: 1.依照您的Error Message,我猜應該是您的DB端有問題.在http://delphi.ktop.com.tw/topic.php?TOPIC_ID=48618的討論裡,是以package來做的.換言之,store procedure參數中的cursor是另外定義的.而依您的錯誤訊息來看,顯然是"RET_Curor.RET_type_cursor"這個物件沒有宣告,您要不要檢查一下,您是否有另外宣告了這個物件. 2.該篇討論中,最後zabico的結論"ConnectionString裡面要用 Microsoft OLE DB Provider for Oracle ,另外一個不能用"其實並不能算完全正確.兩個driver應該都可以用,只是要注意版本的限制及一些Oracle比較偏門的SQL指令,兩個Driver不見得執行起來會有相同的結果,必需測試過才準. 3.以Oracle回傳cursor,不管是用BDE或是ADO,其實都可以執行.只是我在TADOStoredProc的Online help裡找到的ftCursor,是宣告在ADODB裡,所以我一開始才認為只有ADO才能這樣做(加上我之前做的,就是用ADO連Oracle的). |
elvis114
一般會員 發表:37 回覆:53 積分:18 註冊:2003-06-17 發送簡訊給我 |
Dear change.jian :
參考完討論的內容後我的程式更改如下:
Oracle 如下: PACKAGE PKG_StatisticsSOFTWARE IS TYPE RET_type_cursor IS REF CURSOR; PROCEDURE select_department (
R_cursor OUT RET_type_cursor,
oRETVAL OUT NUMBER
);
-----------------------------------------------------------------
PACKAGE BODY PKG_StatisticsSOFTWARE IS PROCEDURE select_department (
R_cursor OUT RET_type_cursor,
oRETVAL OUT NUMBER
) IS
vRETVAL NUMBER(1):=0;
BEGIN
OPEN R_cursor FOR
select DEPT_NAME from department
where DELETE_FLAG = DEL_FLAG
order by DEPT_CODE;
vRETVAL := 0;
oRETVAL := vRETVAL;
RETURN;
EXCEPTION
when others then
vRETVAL := -1;
oRETVAL := vRETVAL;
RETURN;
raise;
END;
---------------------------------------------------
Delphi6 如下: HR_Oracle.ADOSProc.Close; HR_Oracle.ADOSProc.ProcedureName := 'PKG_StatisticsSOFTWARE.select_department';
HR_Oracle.ADOSProc.Parameters.Clear;
HR_Oracle.ADOSProc.Parameters.CreateParameter('R_cursor',ftInterface ,pdOutput,0,null);
HR_Oracle.ADOSProc.Parameters.CreateParameter('oRETVAL' ,ftInteger,pdOutput,1,0); try
HR_Oracle.ADOSProc.Open ; for i:= 0 to HR_Oracle.ADOSProc.RecordCount-1 do begin
tmpst := '';
for j := 0 to HR_Oracle.ADOSProc.Fields.Count-1 do
tmpst := tmpst HR_Oracle.ADOSProc.Fields[j].AsString '--';
memo1.Lines.Add(tmpst);
HR_Oracle.ADOSProc.Next;
end;
except On E:Exception do
begin
showmessage(E.Message '無法正常連線,請查明原狀況!!');
Memo1.Text := E.Message ;
Exit;
//RunError;;
end;
end;
-----------------------------------------------
Oracle Error 出現如下: ORA-01036: 變數名稱?號碼無效
<>
>
>
謝謝< > =======================
謝謝各位大德不吝賜教!!
小弟感激不進< >
=======================
------
願 南無藥師琉璃光如來 保佑您 |
change.jian
版主 發表:29 回覆:620 積分:439 註冊:2003-06-02 發送簡訊給我 |
|
elvis114
一般會員 發表:37 回覆:53 積分:18 註冊:2003-06-17 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |