有没有办法使用绑定变量将列名和表名动态传递给查询?这可以通过使用简单的串联运算符来完成||
,但我想要一种不同的方法来实现这一目标。
EDIT
OPEN abc_cur FOR 'Select :column_name
from :table_name'
USING column_name,table_name;
在这个例子中我通过column_name
as empno,ename
and table_name
as emp
但这种方法对我不起作用。除了传统的串联方法之外,是否可以采用不同的方法?
表名和列名不能作为绑定变量传递,不行。绑定变量的全部意义在于,Oracle 可以为语句生成一次查询计划,然后使用不同的绑定变量值多次执行它。如果优化器不知道正在访问哪个表或正在选择和过滤哪些列,则它无法生成查询计划。
如果您担心 SQL 注入攻击,并且假设动态 SQL 实际上是必要的(大多数时候,需要诉诸动态 SQL 意味着数据模型存在问题),您可以使用DBMS_ASSERT package http://www.oracle-base.com/articles/10g/dbms_assert_10gR2.php验证表名和列名不包含嵌入式 SQL。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)