2012-01-11 57 views
0

我在本地運行Oracle 11gR2的一個實例進行測試。我用VC++連接到OLEDB。我使用CCommand,我可以選擇,更新,插入和從我的表中刪除。
我現在無法做的是執行存儲過程。無法通過OLEDB執行存儲過程

這是一個簡單的存儲過程,插入一行到我的表。我可以毫不費力地從SQL Plus運行它。但是,當我從我的代碼執行它時,它不起作用。我得到一個80040e14錯誤。

這是非常簡單的,但這裏是無論如何這條線。

hr = cmd.Open(session, "exec get_item_count"); 

任何想法?

回答

2

EXEC是SQL * Plus語法。它不在SQL * Plus之外(以及實現SQL * Plus提供的許多功能的各種PL/SQL GUI)無效。

您可能希望這樣的事情(使用ODBC語法)

hr = cmd.Open(session, "{call get_item_count}"); 

或本(使用Oracle語法)

hr = cmd.Open(session, "begin get_item_count; end;"); 

如果您使用Oracle語法相同的語法將在工作兩SQL * Plus和來自您的應用程序。 SQL * Plus不理解ODBC語法。但是,其他OLE DB提供程序將支持ODBC語法,因此ODBC語法可跨不同的數據庫引擎移植。

此外,如果您有一個檢索項目計數的PL/SQL對象,那應該是一個存儲函數而不是存儲過程。你說這個過程是在你的表中插入一行,這是一個過程應該做的事情,而函數不應該這樣做,但是對象的名字get_item_count似乎並不符合你所做的描述。

+0

非常感謝你,我瘋了。至於程序名稱,它確實按照我所說的做了,它的目的是在我嘗試做出東西時切換;但是爲了清楚起見,我忘記在這裏改變它的名字。 – Paradoxyde 2012-01-12 14:44:57