【发布时间】:2010-10-22 18:44:45
【问题描述】:
是否有 PL/SQL 函数或通用技术来引用非限定标识符(例如,mytable)以用于动态构造的 SQL 查询?部分或完全限定标识符 (a.b@c) 怎么样?
考虑这个人为的例子:
CREATE PROCEDURE by_the_numbers(COL_NAME VARCHAR, INTVAL INTEGER) IS
...
BEGIN
-- COL_NAME is interpolated into SQL string
-- INTVAL gets bound to :1
stmt := 'SELECT * FROM tbl WHERE ' || COL_NAME || ' = :1';
...
END
...我们不希望在 COL_NAME 中允许幼稚 SQL 注入(例如,值 '1=1 或 1')。
【问题讨论】:
-
有你想要做什么的例子吗?
-
@OMG Ponies,这个例子说明了吗?基本上我想要一个相当于 perl DBI 的
quote_identifier() -
我的经验是不能使用 BIND 变量作为列名,因为它是 CHAR/VARCHAR 会自动用单引号括起来以防止 SQL 注入。
-
@OMG,对。标识符必须是插值(或多或少),所以我想在这样做之前引用它...
标签: oracle plsql dynamic-sql