Отображать строки в refcursor без PRINT? - PullRequest
1 голос
/ 02 июля 2019

У меня есть хранимая процедура, которая выглядит следующим образом:

CREATE OR REPLACE PROCEDURE GET_USERS(cursor_ OUT SYS_REFCURSOR)
AS

BEGIN

OPEN cursor_ FOR
      SELECT * FROM SYS.dba_users; 
END;

Я проверяю это так:

var mycursor refcursor;
exec GET_USERS ( :mycursor );
print mycursor;

Проблема в том, что PRINT отображает ее в Script Outputвкладка вместо Query Result (с сеткой).Мне легче читать из таблицы.

Вопрос 1. Как проверить хранимую процедуру, чтобы результат отображался в сетке Query Result с сеткой?

Вопрос 2. Что такоеразница между F5 и зеленой стрелкой при выполнении регулярного оператора SELECT?Когда я выделяю SELECT * FROM SYS.dba_users; и нажимаю F5, я получаю результаты в Script Output.Если я нажимаю зеленую кнопку со стрелкой, результаты отображаются в Query Result.

1 Ответ

1 голос
/ 02 июля 2019

Как проверить хранимую процедуру, чтобы результат отображался в Результате запроса с сеткой

Вы не ... если вы не напишите свою процедуру в качестве ФУНКЦИИ иВы используете его в запросе SELECT.

Примерно так:

create or replace function ref_expensive_emps return sys_refcursor
as
 c sys_refcursor;
begin
 open c for select * from employees order by salary desc fetch first 10 rows only;
 return c;
end  ref_expensive_emps;
/

select ref_expensive_emps() from dual;

enter image description here

Или выполните этот SELECT FROM DUAL в качестве скрипта...

REF_EXPENSIVE_EMPS()
--------------------
CURSOR STATEMENT : 1

CURSOR STATEMENT : 1

EMPLOYEE_ID FIRST_NAME           LAST_NAME                 EMAIL                     PHONE_NUMBER         HIRE_DATE           JOB_ID         SALARY COMMISSION_PCT MANAGER_ID DEPARTMENT_ID COLUMN1                                                                                                                         
----------- -------------------- ------------------------- ------------------------- -------------------- ------------------- ---------- ---------- -------------- ---------- ------------- --------------------------------------------------------------------------------------------------------------------------------
        100 Suppo0rt             King                      Suppo0rt                  515.123.4567         21-AUG-18  07.09.58 AD_PRES      49243.75                                      90                                                                                                                                 
        101 Neena                Kochhar                   NKOCHHAR                  515.123.5368         21-SEP-89  00.00.00 AD_VP        34888.29                       100            90                                                                                                                                 
        102 Lex                  De Haan                   LDEHAAN                   515.123.4569         13-JAN-93  00.00.00 AD_VP        34888.29                       100            90                                                                                                                                 
        145 John                 Russell                   JRUSSEL                   011.44.1344.429268   01-OCT-96  00.00.00 SA_MAN       28735.94             .4        100            80                                                                                                                                 
        146 Karen                Partners                  KPARTNER                  011.44.1344.467268   05-JAN-97  00.00.00 SA_MAN       27710.55             .3        100            80                                                                                                                                 
        201 Michael              Hartstein                 MHARTSTE                  515.123.5555         17-FEB-96  00.00.00 MK_MAN       26685.16                       100            20                                                                                                                                 
        108 Nancy                Greenberg                 NGREENBE                  515.124.4569         17-AUG-94  00.00.00 FI_MGR       24634.38                       101           100                                                                                                                                 
        205 Shelley              Higgins                   SHIGGINS                  515.123.8080         07-JUN-94  00.00.00 AC_MGR       24634.38                       101           110                                                                                                                                 
        147 Alberto              Errazuriz                 AERRAZUR                  011.44.1344.429278   10-MAR-97  00.00.00 SA_MAN       24634.38             .3        100            80                                                                                                                                 
        168 Lisa                 Ozer                      LOZER                     011.44.1343.929268   11-MAR-97  00.00.00 SA_REP       23608.99            .25        148            80                                                                                                                                 

10 rows selected. 

Вопрос 2. В чем разница между клавишей F5 и зеленой стрелкой при выполнении регулярного оператора SELECT?

Обычный оператор выбора: Мы выполняемзапрос, сделайте одну выборку, оставьте набор данных открытым и распечатайте результаты в сетке.Когда вы прокручиваете сетку, мы делаем больше выборок по мере необходимости.Если вы исчерпаете набор результатов или закроете сетку, то работа с БД завершена.

F5 / Выполнить как скрипт: мы запускаем все, что находится в редакторе, или подсвечивается через наш механизм скриптов (имитирует SQL* Плюс), и он печатается на панели вывода скрипта.Все строки извлечены.

Если вы выполняете SP с помощью редактора кода, вы можете видеть ваши Refcursors в сетках, но не в той же самой сетке, что и SQL Worksheet.

enter image description here

Да, с рекурсором, вы можете открыть / прочитать его только один раз ...

...