0

Я работаю над системой, где Oracle 11g является базой данных. У меня очень ограниченные разрешения на базу данных, и поэтому я могу только вызвать процедуры, которые находятся в пакетах.Oracle 11g - sys_refcursor

Gerally, эти процедуры возвращают их результирующий набор через параметр OUT типа sys_refcursor.

Я могу назвать их точными на C# и получить данные из курсора через тип C# OracleDataset.

Вот мой вопрос. Я хочу, чтобы иметь возможность запускать эти процедуры и просматривать результаты через SQL Developer. Я могу выполнить процедуру в порядке, но просмотр содержимого параметра sys_refcursor OUT поражает меня.

Я сделал несколько попыток, и люди говорят о создании типа и других решений. У меня просто нет разрешений на прохождение.

Итак, как я могу увидеть набор результатов, содержащийся в sys_refcursor? Так что у меня есть процедура с этой подписью ....

procedure an_oracle_Proc(p_ref   IN varchar2, 
         p_result_set OUT sys_refcursor); 

Я называю это так ....

DECLARE 
    l_ref VARCHAR2(10); 
    l_result_set sys_refcursor; 
BEGIN 
    oracle_pkg.an_oracle_Proc(p_ref => l_ref, 
              p_result_set => l_result_set); 

    --How to select from l_result_set with limited permissions 
END  

Как я могу посмотреть на содержимое l_result_Set?

ответ

0

Думал, что у меня будет другой взгляд и нашла бы это - удивительно, что может сделать отступление от компьютера. ;) Мне просто нужно выбрать соответствующую переменную на левой панели.

http://www.thatjeffsmith.com/archive/2011/12/sql-developer-tip-viewing-refcursor-output/

Тем не менее - это было бы неплохо, чтобы написать свой собственный SQL, чтобы сделать это, а не с помощью окна выполнения.

+0

Вы имеете в виду [как это] (http://stackoverflow.com/a/8618084/266304)? Или вы хотите пересечь строки курсора в PL/SQL? –

+0

Печать не доступна в SQL Developer :( plus, I ofter фактически не знает, какие столбцы будут возвращены до тех пор, пока я его не запустил. Я знаю, что знаю, но это предмет разрешений. Кодирование в темноте – AntDC

+0

Печать абсолютно доступна в SQL Developer, и она печатается в окне вывода сценария. (Вернемся, по крайней мере, к версии 3, не уверен в версии 1.x, которая поставляется с БД, и ваш ответ относится только к более поздним версиям, на которые я верю). Этот ответ был конкретно посвящен разработчику SQL. В статье, на которую вы ссылались, даже упоминается об этом, но Джефф, похоже, предпочитает использовать окно вывода. –

1

Это повторяет ответ, который я связан с, прежде чем на самом деле, но конкретно для вашего кода:

VARIABLE result_set refcursor; 

DECLARE 
    l_ref VARCHAR2(10); 
BEGIN 
    l_ref := 'whatever'; 
    oracle_pkg.an_oracle_Proc(p_ref => l_ref, 
              p_result_set => :result_set); 
END; 
/

PRINT result_set 

... и запустить все это в виде сценария из SQL Worksheet. Содержимое курсора ref будет отображаться в окне вывода сценария.

+0

Thank вы, Алекс, за ваше время и терпение. Как я уже сказал - это было основополагающим – AntDC

0

Sys_refcursor форма анонимного блока немного сложна. Используйте sql-developer, изучите пакет или процедуру, щелкните правой кнопкой мыши и выполните процедуру/пакет.

Sql-developer откроет интерфейс ввода/вывода, в котором вы можете ввести значения. И вы можете видеть вывод на том же интерфейсе. Дайте мне знать, если вам нужно больше деталей. Я действительно отлаживал то же самое несколько недель назад.