我正在声明一个显式游标,但是,我需要根据用户交互的不同来对sql进行排序。要排序的列作为参数传递给过程,但是,我很难将它合并到光标的sql中(尽管我可以告诉它,它正在将变量名称解释为列的名称和因此无所事事。
有没有办法在显式游标语句中使用本地声明的变量?
这是我到目前为止尝试的基本框架:
v_order_by varchar2(100) := <function that grabs URL param>
c_cursor is
select...
.
.
.
order by v_order_by;
非常感谢任何帮助。到目前为止,我发现使用显式游标的所有例子都是无益的。
答案 0 :(得分:2)
如果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子句中使用绑定变量而不是文字。