2009-06-04 69 views
9

我正在使用Oracle數據庫處理ASP.NET項目。我們使用TOAD來添加/管理存儲過程 - 並且通常我喜歡TOAD和Oracle。我發現令人沮喪的一件事是找到一種測試Oracle存儲過程的簡單方法,比如SQL Server的「exec [SP_NAME] Param1,Param2,ParamN」語法。測試Oracle存儲過程的最簡單方法

我們所有的存儲過程都輸出參考遊標。這裏是一個存儲過程的例子:

 
CREATE OR REPLACE PROCEDURE APP_DB1.GET_JOB 
(
    p_JOB_ID IN JOB.JOB_ID%type, 
    outCursor OUT MYGEN.sqlcur 
) 
IS 
BEGIN 
    OPEN outCursor FOR 
    SELECT * 
    FROM JOB 
    WHERE JOB_ID = p_JOB_ID; 
END GET_JOB; 
/

有什麼建議嗎?

回答

13

你只需要一個腳本調用你的存儲過程,並且有一個綁定變量用於引用遊標輸出,以便在編輯器的TOAD網格中顯示它窗口。

DECLARE 
type result_set is ref cursor; 
BEGIN 
APP_DB1.GET_JOB(1, :result_set); 
END; 

然後,當您運行此蟾蜍會提示你「綁定」:result_set,只需選擇從類型列表裁判光標,然後結果將在網格中顯示。訣竅是將自己視爲調用存儲過程的「客戶端」,並且需要自己的引用光標來存儲結果。

+0

雖然我希望能夠看到一條線,這是我見過的最簡單的方法。謝謝。 – Josh 2009-06-05 09:42:25

1

如果你只是在尋找一種方式來調用SP,則Oracle的方式是:

begin 
    sp_name(....); 
end; 

我不使用蟾蜍,但你應該能夠把它放到SQL窗口並執行它。

+0

我更新了問題,以便您可以看到我們使用ref遊標進行輸出。因此,我們不能使用上面的示例。 – Josh 2009-06-04 19:57:17

1

在sqplus您可以使用語法

SQL> VAR RC REFCURSOR

SQL> EXEC APP_DB1.GET_JOB(你要查詢的作業ID:RC)

SQL>打印RC

這應該做到這一點。第一行定義了一個綁定變量。你也可以爲作業ID定義一個變量,或者直接鍵入它。

+0

我需要網格中的結果集,比如SQL Server,所以我正在尋找一種在TOAD中做的方法。 – Josh 2009-06-04 22:27:59

0

TOAD通過Russel的示例腳本將結果顯示在網格中。以腳本運行。

variable P_CUR refcursor; 
exec PACK.GETEXECUTION ('9f363e49-88c1-4295-b61e-60812d620d7e', '6', :P_CUR); 
print P_CUR; 

謝謝!