Вызов хранимой процедуры оракула без параметров ADODB - PullRequest
0 голосов
/ 30 мая 2018

Я не нашел нигде о том, как вызвать хранимую процедуру Oracle, используя ADODB из Excel, где хранимая процедура не имеет входных параметров.

Поддельный пример для иллюстрации отсутствия входных параметров:

CREATE OR REPLACE PROCEDURE Get_Data
(OUTPUT OUT SYS_REFCURSOR) IS

******************************************************************************/
BEGIN

OPEN OUTPUT FOR 

SELECT DISTINCT
       B.ITEM_ID
       B.ITEM_DESC
    FROM ITEM_FILE B
WHERE ITEM_ID IS NOT NULL
 ORDER BY B.ITEM_ID
; 

END Get_Data;
/

О, и хранимая процедура требуется, потому что мы не хотим предоставлять пользователям доступ к SQL для создания любого SQL, который они хотят.

Возможно ли это вообще?И если да, то какой код потребуется для его вызова?

Спасибо, Дэн

1 Ответ

0 голосов
/ 31 мая 2018

Преобразуйте вашу процедуру в функцию:

CREATE OR REPLACE FUNCTION Get_Data RETURN SYS_REFCURSOR IS
res SYS_REFCURSOR;

BEGIN

OPEN OUTPUT FOR 
SELECT DISTINCT
       B.ITEM_ID
       B.ITEM_DESC
    FROM ITEM_FILE B
WHERE ITEM_ID IS NOT NULL
ORDER BY B.ITEM_ID;  
RETURN res;

END Get_Data;
/

Вызов в VBA будет выглядеть следующим образом:

cmd.CommandText = "{CALL Get_Data()}"
cmd.Properties("PLSQLRSet") = True
Set Rst1 = cmd.Execute 
cmd.Properties("PLSQLRSet") = False

Обратите внимание, по умолчанию параметры OUT используются следующим образом:

cmd.Parameters.Append cmd.CreateParameter("OUTPUT", adVarChar, adParamOutput, 100)

Однако для параметров RefCursor вы не должны объявлять их с помощью cmd.Parameters.Append.

Взгляните на Поставщик для Руководства разработчика OLE DB , он содержит несколько примеров.Глава Хранимые процедуры и функции Возвращение наборов строк должно быть наиболее актуальным для вас.

...