Простая хранимая процедура Oracle - PullRequest
3 голосов
/ 15 октября 2019

У меня есть этот запрос SQL:

select title
from DEPARTMENT;

Я пытался написать хранимую процедуру:

create PROCEDURE select_some
(whats VARCHAR2 ,c_select_some OUT SYS_REFCURSOR) 
AS 
BEGIN 
OPEN c_select_some FOR
SELECT whats
FROM department;
END select_some;
/

Но где я выполняю ее с параметром "title", я получил 8 строк с«название» вместо фактического содержания. Что не так?

Исполнение:

var whats varchar2(20)
variable whats = 'Title'
variable mycursor refcursor;

exec select_some (:whats, mycursor);

1 Ответ

5 голосов
/ 15 октября 2019

Для этого вам нужно использовать динамический SQL.

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

create or replace procedure select_from_department(
  col_name in varchar2,
  c_res      out sys_refcursor
) 
is
  l_sql varchar2(300);
begin
  l_sql := 'select ' || dbms_assert.simple_sql_name(col_name) || ' from departments';
  open c_res for l_sql ;
end;

DEMO

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...