Gau*_*oni 4 sql oracle plsql oracle11gr2
有没有办法使用绑定变量动态地将列名和表名传递给查询?这可以通过使用简单的连接运算符来完成||,但我想要一种不同的方法来实现这一点.
编辑
OPEN abc_cur FOR 'Select :column_name
from :table_name'
USING column_name,table_name;
Run Code Online (Sandbox Code Playgroud)
在这个例子中,我传递column_name的empno,ename,并table_name作为emp
但这种方法对我不起作用.除了传统的连接方法之外,是否有可能采用不同的方法?
Jus*_*ave 16
表和列名称不能作为绑定变量传递,否.绑定变量的重点是Oracle可以为语句生成一次查询计划,然后使用不同的绑定变量值多次执行它.如果优化程序不知道正在访问哪个表或者正在选择和筛选哪些列,则它无法生成查询计划.
如果您的关注与SQL注入攻击有关,并且假设动态SQL实际上是必要的(大多数情况下,需要求助于动态SQL意味着数据模型存在问题),您可以使用该DBMS_ASSERT包来验证表名称和列名不包含嵌入式SQL.
你不能。更改查询中的表名或列名会更改该查询的语义 -即它变成一个不同的查询。
绑定变量都是关于将不同的值传递给同一查询。优化器可以重用具有不同值的查询,而不必重新解析和优化查询。