gpt4 book ai didi

database - 在 VARCHAR2 列中使用语句进行查询

转载 作者:搜寻专家 更新时间:2023-10-30 20:07:30 24 4
gpt4 key购买 nike

有没有办法让 select 语句在 WHERE 子句中包含表中包含的语句?例如下表:

CREATE TABLE test_tab(
date_column DATE,
frequency NUMBER,
test_statement VARCHAR2(255)
)
/

如果

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'
)
);

关于database - 在 VARCHAR2 列中使用语句进行查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57174679/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com