有没有办法将 select 语句包含在WHERE
子句 包含在表中的语句?例如下表:
CREATE TABLE test_tab(
date_column DATE,
frequency NUMBER,
test_statement VARCHAR2(255)
)
/
If
MOD(SYSDATE - DATE, frequency) = 0
包含在列内test_statement
,有没有办法选择确实如此的行?这test_statement
整个表中的值会有所不同且不相同。我能够在 PL/SQL 中执行此操作,但希望在不使用 PL/SQL 的情况下执行此操作。
SQL 中的这种动态 SQL 可以使用以下命令创建DBMS_XMLGEN.getXML
。尽管查询看起来有点奇怪,所以您可能需要考虑不同的设计。
首先,我使用您的 DDL 创建了一个示例表和行。我不确定您到底想对这些条件做什么,所以我将它们简化为条件更简单的两行。第一行与第一个条件匹配,没有一行与第二个条件匹配。
--Create sample table and row that matches the condition.
CREATE TABLE test_tab(
date_column DATE,
frequency NUMBER,
test_statement VARCHAR2(255)
)
/
insert into test_tab values(sysdate, 1, 'frequency = 1');
insert into test_tab values(sysdate, 2, '1=2');
commit;
这是一个大型查询,它仅返回第一行,该行仅与第一个条件匹配。
--Find rows where ROWID is in a list of ROWIDs that match the condition.
select *
from test_tab
where rowid in
(
--Convert XMLType to relational data.
select the_rowid
from
(
--Convert CLOB to XMLType.
select xmltype(xml_results) xml_results
from
(
--Create a single XML file with the ROWIDs that match the condition.
select dbms_xmlgen.getxml('
select rowid
from test_tab where '||test_statement) xml_results
from test_tab
)
where xml_results is not null
)
cross join
xmltable
(
'/ROWSET/ROW'
passing xml_results
columns
the_rowid varchar2(128) path 'ROWID'
)
);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)