Tương tự như cách tiếp cận của @ Glenn, nhưng bạn có thể khai báo một biến liên kết trong SQL * Plus và sử dụng nó trong một truy vấn SQL thuần túy. Trước tiên, hãy khai báo nó với var[iable]
lệnh:
variable comment_id number;
Sau đó, đặt nó bằng exec[ute]
, về cơ bản là một khối ẩn danh:
execute :comment_id := 3052753;
Sau đó, chạy truy vấn ban đầu của bạn với :comment_id
tham chiếu và không có BEGIN
hoặc 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);
Tôi không nghĩ rằng có nhiều sự khác biệt về chức năng giữa hai cách tiếp cận ngoài sở thích cá nhân và cả hai đều hoạt động trong SQL Developer (khi chạy dưới dạng tập lệnh). Tôi thấy điều này dễ dàng hơn khi chạy SQL được sao chép từ tệp Pro * C đã sử dụng :
biểu mẫu ràng buộc, hoàn toàn vì bạn không phải sửa đổi mã.
Tình cờ, bạn có thể viết:
where r.revision_id = ( select content_item.get_latest_revision(:comment_id) from dual)
mà không có select
bổ sung , như:
where r.revision_id = content_item.get_latest_revision(:comment_id)