sql >> Database >  >> RDS >> Oracle

Query uitvoeren met een instructie in een VARCHAR2-kolom

Dit soort dynamische SQL in SQL kan worden gemaakt met DBMS_XMLGEN.getXML . Hoewel de vraag er een beetje vreemd uitziet, zou je een ander ontwerp kunnen overwegen.

Eerst heb ik een voorbeeldtabel en -rij gemaakt met behulp van uw DDL. Ik weet niet precies wat je probeert te doen met de voorwaarden, dus ik heb ze vereenvoudigd tot twee rijen met eenvoudigere voorwaarden. De eerste rij komt overeen met de eerste voorwaarde en geen van beide rijen komt overeen met de tweede voorwaarde.

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

Dit is de grote zoekopdracht, en deze retourneert alleen de eerste rij, die alleen overeenkomt met de eerste voorwaarde.

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


  1. Hernoem tabel met spaties mysql

  2. Wat zijn de beste opties voor gegevenstoegang die beschikbaar zijn voor Play Framework met Scala en PostgreSQL?

  3. Rijen verwijderen met MySQL LEFT JOIN

  4. twee kolommen Draaien in Oracle SQL