Oracle
 sql >> Base de données >  >> RDS >> Oracle

Requête à l'aide d'une instruction dans une colonne VARCHAR2

Ce type de SQL dynamique dans SQL peut être créé avec DBMS_XMLGEN.getXML . Bien que la requête semble un peu étrange, vous voudrez peut-être envisager une conception différente.

Tout d'abord, j'ai créé un exemple de table et de ligne à l'aide de votre DDL. Je ne sais pas exactement ce que vous essayez de faire avec les conditions, alors je les ai simplifiées en deux lignes avec des conditions plus simples. La première ligne correspond à la première condition et aucune ligne ne correspond à la deuxième condition.

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

Voici la grande requête, et elle ne renvoie que la première ligne, qui ne correspond qu'à la première condition.

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