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

複数の行が返されるSQLPlusでバインド変数を使用していますか?

    @Glennのアプローチに似ていますが、SQL * Plusでバインド変数を宣言し、それをプレーンSQLクエリで使用できます。まず、 var[iable]<で宣言します。 / code> コマンド:

    variable comment_id number;
    

    次に、 exec[ute]<で設定します。 / code> 本質的に匿名のブロックであるコマンド:

    execute :comment_id := 3052753;
    

    次に、:comment_idを使用して元のクエリを実行します 参照、および BEGINなし またはEND

    select e.label as doc_name,
                           e.url,
                           i.item_id,
                           'multi' as form_type
                    from cr_items i, cr_extlinks e
                    where i.parent_id = :comment_id
                    and e.extlink_id = i.item_id
                   UNION
                    select null as doc_name,
                           utl_raw.cast_to_varchar2(DBMS_LOB.SUBSTR(r.content, 2000, 1))  as url,
                           r.item_id,
                           'single' as form_type
                    from cr_revisions r
                    where r.revision_id = ( select content_item.get_latest_revision(:comment_id) from dual);
    

    個人的な好みを超えて、2つのアプローチの間に機能的な違いはあまりないと思います。どちらも、SQL Developerでも機能します(スクリプトとして実行する場合)。すでにを使用しているPro* CファイルからコピーされたSQLを実行すると、これが簡単になります。 純粋にコードを変更する必要がないため、フォームをバインドします。

    ちなみに、あなたは書くことができます:

    where r.revision_id = ( select content_item.get_latest_revision(:comment_id) from dual)
    

    余分なselectなし 、as:

    where r.revision_id = content_item.get_latest_revision(:comment_id)
    


    1. PostgreSQL:序数ランク(行インデックス?)を効率的に取得する

    2. 供給と需要の課題のマッチング

    3. テーブルからN行ごとにLINQからSQLへ

    4. MySQLで2つの自動インクリメント列を作成するにはどうすればよいですか?