Как выполнить хранимую процедуру в SQL-разработчике - PullRequest
0 голосов
/ 10 октября 2018

Я пытаюсь выполнить хранимую процедуру в Oracle SQL Developer.Я успешно скомпилировал следующее, и оно связано с двумя отдельными таблицами, содержащими данные, которые связаны через внешний ключ.

create or replace procedure practice_run
(
    name out varchar2,
    emp_id out varchar2
)
AS
BEGIN
    SELECT emp_name, employeeID INTO name, emp_id FROM employee JOIN department ON employee.employeeID = department.employeeID WHERE department_name='research'; 
END practice_run;

Так что я хочу, чтобы этот сохраненный производитель выводил имя и фамилиюиз всех сотрудников, работающих в отделе 'исследования'

Я искал в Интернете это и нашел что-то похожее на приведенное ниже, но он не выдал никаких данных для меня.

DBMS_SQL.RETURN_RESULT(practice_run);

Ответы [ 2 ]

0 голосов
/ 10 октября 2018

Взгляните на DBMS_SQL.RETURN_RESULT ( Документы )

В T-SQL достаточно просто выполнять запросы.

Но в PL / SQL этобольше о взаимодействии с результатом запроса.Если вы хотите просто выполнить запрос и просто напечатать результаты, у вас будет исторически связанный параметр OUT типа SYS_REFCURSOR, и ваша программа его выберет.

В базе данных 12c теперь вы можете сказать, что внутриваш код, вы хотите вернуть результаты без изменения самого вызова процедуры - параметр OUT не требуется.

Вот пример.

create or replace procedure sql_return_results as
 v_cursor SYS_REFCURSOR;
begin
 open v_cursor for
   select *
   from employees
   fetch first 15 rows only;
   dbms_sql.return_result(v_cursor); --this is the KEY line
end sql_return_results;
/

Теперь я собираюсь выполнить этои посмотрим, что вернется.

enter image description here

0 голосов
/ 10 октября 2018

Процедура выполняется следующим образом

VAR ename VARCHAR2(100);
VAR emp_id VARCHAR2(100);

BEGIN
   practice_run (ename, emp_id);
END;

PRINT ename;
PRINT emp_id;

Вы можете использовать с DBMS_SQL.RETURN_RESULT, изменить процедуру, чтобы иметь SYS_REFCURSOR

CREATE TABLE emp
(
   emp_id   VARCHAR2 (12),
   ename    VARCHAR2 (12)
);


INSERT INTO emp (emp_id, ename)
     VALUES ('1234', 'James');

COMMIT;

CREATE OR REPLACE PROCEDURE practice_run (p_emp_id IN VARCHAR2)
AS
   c1   SYS_REFCURSOR;
BEGIN
   OPEN c1 FOR
      SELECT emp_id, ename
        FROM emp
       WHERE emp_id = p_emp_id;

   DBMS_SQL.return_result (c1);
END practice_run;

Выполнитьпроцедура по

BEGIN
   practice_run ('1234');
END;
...