PL / SQL Использование переменных в выражении Explicit Cursor - PullRequest
0 голосов
/ 04 февраля 2010

Я объявляю явный курсор, однако мне нужно по-разному упорядочить sql в зависимости от взаимодействия с пользователем. Столбец для упорядочения передается в процедуру в качестве параметра, однако мне трудно включить его в sql для курсора (насколько я могу судить, он интерпретирует имя переменной как имя столбца и таким образом, заказывая ничего.

Есть ли способ использовать локально объявленную переменную в явном выражении курсора?

Вот основной скелет того, что я пытаюсь сделать до сих пор:

v_order_by varchar2(100) := <function that grabs URL param>
c_cursor is
select...
.
.
.
order by v_order_by;

Любая помощь очень ценится. Все примеры использования явных курсоров, которые я нашел до сих пор, совершенно бесполезны.

1 Ответ

2 голосов
/ 04 февраля 2010

Если возможные значения v_order_by являются статическими, вы можете сделать это:

order by case v_order_by
            when 'EMPNO' then empno
            when 'DEPTNO then deptno
            end

В противном случае вам нужно будет использовать динамический SQL и курсор-указатель:

declare
   v_refcursor sys_refcursor;
   ...
begin
   open v_refcursor for   
     'select...
     order by ' || v_order_by;

Если вы это сделаете, обязательно изучите, как использовать переменные связывания, а не литералы в вашем динамическом SQL-предложении where.

...