【发布时间】:2018-05-17 20:04:31
【问题描述】:
SELECT * FROM :TABLENAME
是我的查询,Apex 不允许我运行,因为应用程序不知道表名。如何使用变量作为表名动态查询。
【问题讨论】:
标签: sql oracle plsql oracle-apex
SELECT * FROM :TABLENAME
是我的查询,Apex 不允许我运行,因为应用程序不知道表名。如何使用变量作为表名动态查询。
【问题讨论】:
标签: sql oracle plsql oracle-apex
方法如下:
select * from dual
return 'select * from ' || :P22_TABLE_NAME;
【讨论】:
您应该知道表单可能需要查询哪些表。如果您有一个名为 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 注入攻击。
缺点是如果添加了新表,则必须修改查询。但是,如果您像这样动态创建表格,那么您无论如何都应该考虑修改您的策略。
【讨论】: