Ähnlich dem Ansatz von @Glenn, aber Sie können eine Bindungsvariable in SQL*Plus deklarieren und in einer einfachen SQL-Abfrage verwenden. Deklarieren Sie es zuerst mit dem var[iable]
Befehl:
variable comment_id number;
Setzen Sie es dann mit dem exec[ute]
Befehl, der im Wesentlichen ein anonymer Block ist:
execute :comment_id := 3052753;
Führen Sie dann Ihre ursprüngliche Abfrage mit :comment_id
aus Referenzen und kein BEGIN
oder 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);
Ich glaube nicht, dass es über die persönlichen Vorlieben hinaus einen großen funktionalen Unterschied zwischen den beiden Ansätzen gibt, und beide funktionieren auch in SQL Developer (wenn sie als Skript ausgeführt werden). Ich finde das einfacher, wenn ich SQL aus einer Pro*C-Datei kopiert ausführe, die bereits den :
verwendet Bindungsformular, nur weil Sie den Code überhaupt nicht ändern müssen.
Übrigens können Sie schreiben:
where r.revision_id = ( select content_item.get_latest_revision(:comment_id) from dual)
ohne das zusätzliche select
, als:
where r.revision_id = content_item.get_latest_revision(:comment_id)