Mirip dengan pendekatan @ Glenn, tetapi Anda dapat mendeklarasikan variabel bind di SQL*Plus dan menggunakannya dalam kueri SQL biasa. Deklarasikan terlebih dahulu dengan var[iable]
perintah:
variable comment_id number;
Kemudian atur dengan exec[ute]
perintah, yang pada dasarnya adalah blok anonim:
execute :comment_id := 3052753;
Kemudian jalankan kueri asli Anda dengan :comment_id
referensi, dan tidak ada BEGIN
atau 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);
Saya tidak berpikir ada banyak perbedaan fungsional antara dua pendekatan di luar preferensi pribadi, dan keduanya juga berfungsi di SQL Developer (ketika dijalankan sebagai skrip). Saya merasa ini lebih mudah ketika menjalankan SQL yang disalin dari file Pro*C yang sudah menggunakan :
bind form, murni karena Anda tidak perlu mengubah kode sama sekali.
Kebetulan, Anda dapat menulis:
where r.revision_id = ( select content_item.get_latest_revision(:comment_id) from dual)
tanpa tambahan select
, sebagai:
where r.revision_id = content_item.get_latest_revision(:comment_id)