Podobný přístupu @Glenn, ale můžete deklarovat proměnnou vazby v SQL*Plus a použít ji v prostém dotazu SQL. Nejprve jej deklarujte pomocí var[iable]
příkaz:
variable comment_id number;
Poté jej nastavte pomocí exec[ute]
příkaz, což je v podstatě anonymní blok:
execute :comment_id := 3052753;
Poté spusťte svůj původní dotaz s :comment_id
odkazy a žádné BEGIN
nebo 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);
Nemyslím si, že mezi těmito dvěma přístupy existuje velký funkční rozdíl nad rámec osobních preferencí a oba také fungují v SQL Developer (při spuštění jako skript). Považuji to za jednodušší, když spouštím SQL zkopírovaný ze souboru Pro*C, který již používá :
bind form, čistě proto, že nemusíte kód vůbec upravovat.
Mimochodem, můžete napsat:
where r.revision_id = ( select content_item.get_latest_revision(:comment_id) from dual)
bez extra select
, jako:
where r.revision_id = content_item.get_latest_revision(:comment_id)