【发布时间】:2012-05-04 13:17:10
【问题描述】:
我正在使用 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,这是正确的方向吗?似乎对我不起作用。
提前感谢您的帮助
【问题讨论】:
-
是的,动态 SQL 是答案,但您处于危险的 SQL 注入领域。想象一下,如果有人像
proc_name ('(select salary from emp where ename = ''My Manager'')'这样调用您的程序 -
@TonyAndrews - 对谁有危险?每个人都应该知道他们的经理的收入!
-
@Tony Andrews 你能给我举个例子吗?我尝试过的每个人都没有为我工作。
-
你真的想“从 X 中选择 *”还是“从 mytable 中选择 X”?您的问题是列,但您的示例在 FROM 子句中使用了一个表。
-
@TonyAndrews 我更新了上面的代码,这样你就可以确切地看到我想要做什么。尝试在给定方向上按给定排序列对表进行排序。所以 x 是列名,y 是 DESC 或 ASC。
标签: parameters plsql cursor