Podobne do podejścia @Glenn, ale możesz zadeklarować zmienną bind w SQL*Plus i użyć jej w zwykłym zapytaniu SQL. Najpierw zadeklaruj to za pomocą var[iable]
polecenie:
variable comment_id number;
Następnie ustaw go za pomocą exec[ute]
polecenie, które jest zasadniczo anonimowym blokiem:
execute :comment_id := 3052753;
Następnie uruchom oryginalne zapytanie z :comment_id
referencje, a nie POCZĄTEK
lub 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);
Nie sądzę, że istnieje duża różnica funkcjonalna między tymi dwoma podejściami poza osobistymi preferencjami i oba działają również w SQL Developer (gdy są uruchamiane jako skrypt). Uważam, że jest to łatwiejsze, gdy uruchamiam SQL skopiowany z pliku Pro*C, który już używa :
formularz powiązania, ponieważ nie musisz w ogóle modyfikować kodu.
Nawiasem mówiąc, możesz napisać:
where r.revision_id = ( select content_item.get_latest_revision(:comment_id) from dual)
bez dodatkowego wyboru
, jako:
where r.revision_id = content_item.get_latest_revision(:comment_id)