Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Abfrage mit einer Anweisung in einer VARCHAR2-Spalte

Diese Art von dynamischem SQL in SQL kann mit DBMS_XMLGEN.getXML erstellt werden . Obwohl die Abfrage etwas seltsam aussieht, sollten Sie vielleicht ein anderes Design in Betracht ziehen.

Zuerst habe ich eine Beispieltabelle und -zeile mit Ihrer DDL erstellt. Ich bin mir nicht sicher, was Sie genau mit den Bedingungen machen wollen, deshalb habe ich sie in zwei Zeilen mit einfacheren Bedingungen vereinfacht. Die erste Zeile entspricht der ersten Bedingung und keine Zeile entspricht der zweiten Bedingung.

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

Hier ist die große Abfrage, die nur die erste Zeile zurückgibt, die nur der ersten Bedingung entspricht.

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