Câu trả lời đã sửa đổi
Nếu bạn không gọi mã này từ một chương trình khác, một tùy chọn là bỏ qua PL / SQL và thực hiện nó hoàn toàn trong SQL bằng cách sử dụng các biến liên kết:
var myname varchar2(20);
exec :myname := 'Tom';
SELECT *
FROM Customers
WHERE Name = :myname;
Trong nhiều công cụ (chẳng hạn như Toad và SQL Developer), bỏ qua var
và exec
các câu lệnh sẽ khiến chương trình nhắc bạn về giá trị.
Câu trả lời ban đầu
Một sự khác biệt lớn giữa T-SQL và PL / SQL là Oracle không cho phép bạn hoàn toàn trả về kết quả của một truy vấn. Kết quả luôn phải được trả về một cách rõ ràng theo một cách nào đó. Cách đơn giản nhất là sử dụng DBMS_OUTPUT
(gần tương đương với print
) để xuất biến:
DECLARE
myname varchar2(20);
BEGIN
myname := 'Tom';
dbms_output.print_line(myname);
END;
Tuy nhiên, điều này không thực sự hữu ích nếu bạn đang cố gắng trả về một tập hợp kết quả. Trong trường hợp đó, bạn sẽ muốn trả về một bộ sưu tập hoặc một con trỏ chuột. Tuy nhiên, việc sử dụng một trong hai giải pháp đó sẽ yêu cầu gói mã của bạn trong một hàm hoặc thủ tục và chạy hàm / thủ tục từ thứ có khả năng tiêu thụ kết quả. Một hàm hoạt động theo cách này có thể trông giống như sau:
CREATE FUNCTION my_function (myname in varchar2)
my_refcursor out sys_refcursor
BEGIN
open my_refcursor for
SELECT *
FROM Customers
WHERE Name = myname;
return my_refcursor;
END my_function;