Подтвердить что ты не робот

Вызов хранимой процедуры Oracle в Squirrel SQL

Мне удалось создать хранимую процедуру для базы данных Oracle, но теперь я не могу понять, как ее запустить. Я использую SQuirrel SQL, и это сработало для создания процедуры:

CREATE OR REPLACE PROCEDURE MyProc(label IN varchar2, results OUT sys_refcursor) AS
BEGIN
OPEN results FOR
    SELECT Label, Count, Timestamp 
        FROM table1
            LEFT JOIN table2 ON table1.Name=table2.Name 
    WHERE table1.Label=label
    ORDER BY Timestamp;
END;
/

Я хочу получить и отобразить результирующий набор. Я пробовал использовать call MyProc('param'), но это не работает (ошибка ошибочного числа аргументов). Я много раз искал этот сайт и другие, но ничего не было полезно. Пожалуйста, помогите!

4b9b3361

Ответ 1

Ниже приведено описание работы хранимой процедуры:

begin
   procedurename;
end;
/

Да, требуется слэш в конце!

begin...end; объявляет блок PL/SQL (специфичный для Oracle). Слэш - это команда для запуска блока.

/(слэш)

Выполняет последнюю выполненную команду SQL или PL/SQL-блок, который хранится в буфере SQL.

[...]

Oracle Database Online Documentation, 10g Release 2 (10.2)/SQL * Plus® Руководство пользователя и справочная информация

Ответ 2

Единственный синтаксис, который я получаю в Squirrel SQL, - это блок PL/SQL:

declare
v_label  varchar2:='SOMELABEL';
TYPE ref_cursor IS REF CURSOR;
v_cur_results ref_cursor;
begin
MyProc (v_label, v_cur_results)
end;
/

Ответ 3

Как в этой статье объясняется, что использование "вызова" вместо "выполнить" должно решить проблему.

Ответ 4

var v_result sys_refcursor

exec MyProc ('test label',:v_result)

Ответ 5

Я долгое время боролся с этим, но мне удалось заставить его работать следующим образом:

{call DBMS_SESSION.SET_CONTEXT  ( namespace => 'clientcontext', attribute => 'foo', value     => 'bar' )}