不能在sql查询APEX ORACLE中使用绑定变量作为表名

时间:2018-05-17 20:04:31

标签: sql oracle plsql oracle-apex

SELECT * FROM :TABLENAME 

是我的查询,Apex不让我跑,因为应用程序不知道表名。如何使用变量作为表名动态查询。

2 个答案:

答案 0 :(得分:3)

以下是:

  • 使用虚拟 SELECT语句创建经典报告,例如select * from dual
  • 在该页面上创建一个文本项,我们称之为P22_TABLE_NAME
  • 设置"提交时按下"财产到"是"
  • 编辑报告的来源并将类型设置为 PL / SQL函数体返回SQL查询
  • 功能正文应为return 'select * from ' || :P22_TABLE_NAME;
  • 设置"使用通用列名称"属性为"是",因为您使用了不同的表名,而且所有这些(最有可能)都有不同的列
  • 运行页面;当您将不同的表名放入P22_TABLE_NAME项并按Enter键时,报告内容应更改

答案 1 :(得分:0)

您应该知道表单可能需要查询的表。如果您有一个名为TABLE_NAME的应用程序项,您可以将结果合并在一起并选择正确的表格,如下所示:

select col1, col2, col3 from tablex where :TABLE_NAME = 'TABLEX'
union all
select col1, col2, col3 from tabley where :TABLE_NAME = 'TABLEY'
union all
select col1, col2, col3 from tablez where :TABLE_NAME = 'TABLEZ'

这种方法的好处是将检查查询的语法是否正确,以及表格是否具有正确的列;此解决方案不受SQL注入攻击。

缺点是如果添加了新表,则必须修改查询。但是如果你像这样在飞行中创建表格,那么你应该考虑修改你的策略。