Подобно на подхода на @Glenn, но можете да декларирате свързваща променлива в SQL*Plus и да я използвате в обикновена SQL заявка. Първо го декларирайте с var[iable]код>
команда:
variable comment_id number;
След това го задайте с exec[ute]код>
команда, която по същество е анонимен блок:
execute :comment_id := 3052753;
След това изпълнете оригиналната си заявка с :comment_id
препратки и без BEGIN
или КРАЙ
:
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);
Не мисля, че има голяма функционална разлика между двата подхода извън личните предпочитания и и двата работят и в SQL Developer (когато се изпълняват като скрипт). Намирам това за по-лесно, когато изпълнявам SQL, копиран от Pro*C файл, който вече използва :
форма за обвързване, просто защото изобщо не трябва да променяте кода.
Между другото можете да напишете:
where r.revision_id = ( select content_item.get_latest_revision(:comment_id) from dual)
без допълнителния избор
, като:
where r.revision_id = content_item.get_latest_revision(:comment_id)