sql >> データベース >  >> RDS >> Oracle

VARCHAR2列内のステートメントを使用してクエリを実行します

    SQLのこの種の動的SQLは、DBMS_XMLGEN.getXMLを使用して作成できます。 。クエリは少し奇妙に見えるので、別のデザインを検討することをお勧めします。

    まず、DDLを使用してサンプルのテーブルと行を作成しました。条件で何をしようとしているのか正確にはわからないので、条件を単純化して2行に簡略化しました。最初の行は最初の条件に一致し、どちらの行も2番目の条件に一致しません。

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

    これが大きなクエリで、最初の条件にのみ一致する最初の行のみが返されます。

    --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. Oracleマネージドドライバーはasync/awaitを適切に使用できますか?

    2. エラー番号:3780外部キー制約'%s'の参照列'%s'と参照列'%s'に互換性がありません

    3. postgresqlで削除された行を取り戻しました

    4. Pythonを使用してCSVデータをpostgreSQLに変換する