2011-07-19 51 views
2

我試圖調用一個不接受輸入參數的Oracle存儲過程。但是,在運行程序的時候,我得到指出不帶參數調用Oracle存儲過程

PLS-00306: wrong number or types of arguments in call to 'MY_PROC' 

要調用PROC回錯誤,我剛進入以下文本TORA:

BEGIN 
SCHEMA.MY_PROC(); 
END; 

我也試過(雖然同樣的錯誤)

EXEC SCHEMA.MY_PROC(); 

我熟悉MSSQL,我能夠使用SQL服務器沒有問題,執行SP,但我無法弄清楚如何做同樣的甲骨文。我無法查看存儲過程的實際代碼,但是從我有限的文檔中看來,它看起來不接受任何輸入參數,返回值是引用遊標。我有一種感覺,我需要以某種方式傳遞一個參考光標,但是我在這方面嘗試過的一切都沒有奏效。

我只想查看SP的結果,就好像我做了SELECT語句,即在TOra界面的結果面板中填充數據網格的記錄。

感謝您的任何提示。

+2

你可以發佈你的程序的定義嗎? –

+1

即使您沒有源代碼,您也可以[描述](http://download.oracle.com/docs/cd/B19306_01/server.102/b14357/ch12019.htm#i2697562)查看過程預期參數,以及它們是什麼類型。我期望它看起來很像@Justin Cave的例子。這也適用於SQL * Plus和SQL Developer,對TOra也不瞭解。 –

回答

4

它聽起來像過程確實有一個OUT參數(在Oracle中,過程不會返回任何東西,但可以有OUT和IN OUT參數,函數返回一些東西)。所以你必須爲OUT參數傳遞一個變量。類似於

DECLARE 
    l_results SYS_REFCURSOR; 
BEGIN 
    schema.my_proc(l_results); 
END; 

應該成功調用該過程。但是,你希望你的GUI顯示那個遊標的結果。不幸的是,這會變得更復雜一些,因爲現在你正在討論一個GUI特定的問題。

我不使用TOra,所以我不知道TOra需要做什麼才能使光標顯示。在SQL * Plus(或SQL Developer中,Oracle的免費GUI),你可以不喜歡

create or replace procedure my_proc(p_rc OUT SYS_REFCURSOR) 
as 
begin 
    open p_rc 
    for select 1 col1 
     from dual; 
end; 
/

variable rc refcursor; 
exec my_proc(:rc); 
print rc; 

這將創建一個OUT參數是一個遊標,存儲過程聲明,可以通過在主機變量然後打印結果。