PL / SQL在Explicit Cursor语句中使用变量

时间:2010-02-04 15:58:43

标签: plsql cursor

我正在声明一个显式游标,但是,我需要根据用户交互的不同来对sql进行排序。要排序的列作为参数传递给过程,但是,我很难将它合并到光标的sql中(尽管我可以告诉它,它正在将变量名称解释为列的名称和因此无所事事。

有没有办法在显式游标语句中使用本地声明的变量?

这是我到目前为止尝试的基本框架:

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

非常感谢任何帮助。到目前为止,我发现使用显式游标的所有例子都是无益的。

1 个答案:

答案 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子句中使用绑定变量而不是文字。