@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)