sql >> Databasteknik >  >> RDS >> Oracle

Fråga med ett uttalande i en VARCHAR2-kolumn

Den här typen av dynamisk SQL i SQL kan skapas med DBMS_XMLGEN.getXML . Även om frågan ser lite udda ut så du kanske vill överväga en annan design.

Först skapade jag en exempeltabell och rad med din DDL. Jag är inte säker på exakt vad du försöker göra med villkoren, så jag förenklade dem i två rader med enklare villkor. Den första raden matchar det första villkoret, och ingen av raden matchar det andra villkoret.

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

Här är den stora frågan, och den returnerar bara den första raden, som bara matchar det första villkoret.

--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. MySQL - Hur summerar man tider?

  2. Mysql AVG för att ignorera noll

  3. Importera stor csv-fil till mysql-databas med php

  4. SQL-fråga över flera rader