Liknar @Glenns tillvägagångssätt, men du kan deklarera en bindningsvariabel i SQL*Plus och använda den i en vanlig SQL-fråga. Deklarera det först med var[iable]
kommando:
variable comment_id number;
Ställ sedan in den med exec[ute] kommando, som i huvudsak är ett anonymt block:
execute :comment_id := 3052753;
Kör sedan din ursprungliga fråga med :comment_id
referenser och 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);
Jag tror inte att det är mycket funktionell skillnad mellan de två tillvägagångssätten utöver personliga preferenser, och båda fungerar också i SQL Developer (när de körs som ett skript). Jag tycker det är lättare när jag kör SQL kopierad från en Pro*C-fil som redan använder :
bind form, enbart för att du inte behöver ändra koden alls.
Du kan för övrigt skriva:
where r.revision_id = ( select content_item.get_latest_revision(:comment_id) from dual)
utan den extra select
, som:
where r.revision_id = content_item.get_latest_revision(:comment_id)