sql >> Databáze >  >> RDS >> Oracle

Dotaz pomocí příkazu ve sloupci VARCHAR2

Tento druh dynamického SQL v SQL lze vytvořit pomocí DBMS_XMLGEN.getXML . I když dotaz vypadá trochu zvláštně, možná budete chtít zvážit jiný design.

Nejprve jsem vytvořil ukázkovou tabulku a řádek pomocí vašeho DDL. Nejsem si jistý, co přesně se snažíte dělat s podmínkami, takže jsem je zjednodušil do dvou řad s jednoduššími podmínkami. První řádek odpovídá první podmínce a žádný řádek neodpovídá druhé podmínce.

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

Zde je velký dotaz a vrací pouze první řádek, který odpovídá pouze první podmínce.

--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. Ruby mysql2 více příkazů v jednom dotazu

  2. Simulujte funkci zpoždění v MySQL

  3. Extrakce dat MySQL ze 3 tabulek - spojení a max

  4. Více PIVOTS? Je třeba počítat po hodině za měsíc