Simile all'approccio di @Glenn, ma puoi dichiarare una variabile di collegamento in SQL*Plus e usarla in una semplice query SQL. Prima dichiaralo con var[iable]
comando:
variable comment_id number;
Quindi impostalo con exec[ute]
comando, che è essenzialmente un blocco anonimo:
execute :comment_id := 3052753;
Quindi esegui la query originale con :comment_id
riferimenti e nessun BEGIN
o 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);
Non credo che ci sia molta differenza funzionale tra i due approcci al di là delle preferenze personali, ed entrambi funzionano anche in SQL Developer (se eseguiti come script). Lo trovo più facile quando si esegue SQL copiato da un file Pro*C che utilizza già il :
modulo vincolante, semplicemente perché non devi modificare affatto il codice.
Per inciso, puoi scrivere:
where r.revision_id = ( select content_item.get_latest_revision(:comment_id) from dual)
senza l'extra select
, come:
where r.revision_id = content_item.get_latest_revision(:comment_id)