Вызов хранимой процедуры Oracle в Squirrel SQL - PullRequest
10 голосов
/ 29 марта 2011

Мне удалось создать хранимую процедуру для базы данных 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'), но это не работает (неправильное количество аргументов ошибка). Я много раз искал на этом сайте и на других сайтах, но ничего не помогло. Пожалуйста, помогите!

Ответы [ 5 ]

17 голосов
/ 26 июня 2013

Следующие действия выполняются для запуска хранимой процедуры:

begin
   procedurename;
end;
/

Да, косая черта в конце необходима!

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

/ (косая черта)

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

[...]

Онлайн-документация по базе данных Oracle, 10g, выпуск 2 (10.2) / Руководство пользователя и справочник по SQL * Plus®

4 голосов
/ 04 августа 2011

Единственный синтаксис, с которым я работаю в 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;
/
1 голос
/ 25 мая 2012

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

0 голосов
/ 20 апреля 2017

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

{call DBMS_SESSION.SET_CONTEXT  ( namespace => 'clientcontext', attribute => 'foo', value     => 'bar' )}
0 голосов
/ 29 марта 2011
var v_result sys_refcursor

exec MyProc ('test label',:v_result)
...