Similar al enfoque de @ Glenn, pero puede declarar una variable de vinculación en SQL * Plus y usarla en una consulta SQL simple. Primero declárelo con el var[iable]
comando:
variable comment_id number;
Luego configúrelo con exec[ute]
comando, que es esencialmente un bloque anónimo:
execute :comment_id := 3052753;
Luego ejecute su consulta original con :comment_id
referencias y sin 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);
No creo que haya mucha diferencia funcional entre los dos enfoques más allá de las preferencias personales, y ambos también funcionan en SQL Developer (cuando se ejecutan como un script). Encuentro esto más fácil cuando ejecuto SQL copiado de un archivo Pro*C que ya usa el :
formulario de vinculación, simplemente porque no tiene que modificar el código en absoluto.
Por cierto, puedes escribir:
where r.revision_id = ( select content_item.get_latest_revision(:comment_id) from dual)
sin el extra select
, como:
where r.revision_id = content_item.get_latest_revision(:comment_id)