Semblable à l'approche de @ Glenn, mais vous pouvez déclarer une variable de liaison dans SQL*Plus et l'utiliser dans une requête SQL simple. Déclarez-le d'abord avec le var[iable]
commande :
variable comment_id number;
Ensuite, définissez-le avec le exec[ute]
commande, qui est essentiellement un bloc anonyme :
execute :comment_id := 3052753;
Exécutez ensuite votre requête d'origine avec le :comment_id
références, et pas de BEGIN
ou 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);
Je ne pense pas qu'il y ait beaucoup de différence fonctionnelle entre les deux approches au-delà de la préférence personnelle, et les deux fonctionnent également dans SQL Developer (lorsqu'elles sont exécutées en tant que script). Je trouve cela plus facile lors de l'exécution de SQL copié à partir d'un fichier Pro*C qui utilise déjà le :
formulaire de liaison, simplement parce que vous n'avez pas du tout besoin de modifier le code.
Accessoirement, vous pouvez écrire :
where r.revision_id = ( select content_item.get_latest_revision(:comment_id) from dual)
sans le supplément select
, comme :
where r.revision_id = content_item.get_latest_revision(:comment_id)