Svarende til @Glenns tilgang, men du kan erklære en bind-variabel i SQL*Plus og bruge den i en almindelig SQL-forespørgsel. Erklær det først med var[iable]
kommando:
variable comment_id number;
Indstil den derefter med exec[ute]
kommando, som i det væsentlige er en anonym blok:
execute :comment_id := 3052753;
Kør derefter din oprindelige forespørgsel med :comment_id
referencer og ingen BEGIN
eller 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);
Jeg tror ikke, der er meget funktionel forskel mellem de to tilgange ud over personlige præferencer, og begge fungerer også i SQL Developer (når de køres som et script). Jeg finder det nemmere, når jeg kører SQL kopieret fra en Pro*C-fil, som allerede bruger :
bind form, udelukkende fordi du ikke behøver at ændre koden overhovedet.
Du kan i øvrigt skrive:
where r.revision_id = ( select content_item.get_latest_revision(:comment_id) from dual)
uden den ekstra select
, som:
where r.revision_id = content_item.get_latest_revision(:comment_id)