Вы получаете результат, просто ничего с ним не делаете.Вы можете print
it:
variable mycursor refcursor;
exec oracle_get_top_n_tests ( :mycursor );
print mycursor
Вывод будет идти в окно вывода скрипта, а не в сетку.(Вам нужно сделать его функцией, или использовать функцию-обертку , чтобы получить выходные данные в сетке, и даже тогда есть дополнительный шаг для их просмотра.)
Простая функция-обертка:
create function oracle_get_top_n_tests_wrapper
RETURN SYS_REFCURSOR
AS
oracle_tests SYS_REFCURSOR;
BEGIN
oracle_get_top_n_tests (oracle_tests => oracle_tests);
return oracle_tests;
END oracle_get_top_n_tests_wrapper;
/
, затем вызовите это как:
select oracle_get_top_n_tests_wrapper from dual;
Если вы запустите это как скрипт, то результаты все равно будут идти в окно вывода скрипта;если вы запустите его как оператор, он будет добавлен в таблицу результатов, но в виде одной строки / столбца, который можно развернуть, чтобы увидеть фактическое содержимое.
Если вы не застряли сЗатем вы можете заменить это на функцию, которой тогда не понадобится обертка:
-- drop function oracle_get_top_n_tests_wrapper
-- drop procedure oracle_get_top_n_tests
create function oracle_get_top_n_tests
RETURN SYS_REFCURSOR
AS
oracle_tests SYS_REFCURSOR;
BEGIN
OPEN oracle_tests FOR
select * from sales.quiz_results;
return oracle_tests;
END oracle_get_top_n_tests;
/
, а затем вызвать ее напрямую:
select oracle_get_top_n_tests from dual;
с такими же примечаниями нарезультаты, примененные к оболочке.