Parameters PL/SQL游标使用参数作为列名

Parameters PL/SQL游标使用参数作为列名,parameters,plsql,cursor,Parameters,Plsql,Cursor,我正在使用PL/SQL。我正在向我的程序发送一些参数。其中一个参数应该是列名。最初它是一个varchar2,但我想在游标中使用它来引用列名。这怎么可能 这就是我的代码的样子: PROCEDURE proc_name( x IN VARCHAR2, y IN VARCHAR2 ) IS cursor csr IS SELECT * FROM table SORT BY x y BEGIN for y i

我正在使用PL/SQL。我正在向我的程序发送一些参数。其中一个参数应该是列名。最初它是一个varchar2,但我想在游标中使用它来引用列名。这怎么可能

这就是我的代码的样子:

    PROCEDURE proc_name( x IN VARCHAR2, y IN VARCHAR2 ) IS

      cursor csr IS 
       SELECT * 
       FROM table
       SORT BY x y


     BEGIN 
      for y in csr loop 
        ------
      end loop; 

     END proc_name;
在过去的几天里,我一直在努力研究这个问题,但运气不佳。我研究了动态SQL,这是正确的方向吗?似乎对我不起作用

提前感谢您提供的任何帮助

尝试以下方法:

PROCEDURE proc_name( x IN VARCHAR2, y IN VARCHAR2 ) IS

  rc sys_refcursor;

  r_table table%rowtype;

 BEGIN 
  open rc for
   'SELECT * 
    FROM table
    ORDER BY ' || x || ' ' || y;
  loop
    fetch rc into r_table;
    exit when rc%notfound;
    ------
  end loop; 
  close rc;

 END proc_name;

是的,动态SQL是答案,但您正处于危险的SQL注入领域。想象一下,如果有人调用您的程序,如proc_name“select salary from emp where ename=My Manager”@TonyAndrews-对谁来说是危险的?每个人都应该知道他们的经理挣多少钱@托尼·安德鲁斯,你能给我举个例子吗?我试过的每个人都不适合我。你真的想从X中选择*还是从mytable中选择X?您的问题是列,但您的示例在FROM子句中使用了一个表。@TonyAndrews我更新了上面的代码,以便您可以确切地看到我正在尝试做什么。尝试按给定的排序列按给定的方向对表进行排序。因此,x是列名,y是DESC或ASC.rable,表示表。我将你的技术应用到我的程序中,效果很好!非常感谢你。它不仅可以工作,而且我现在对动态sql的理解也更好了。再次感谢你。