2012-04-05 38 views
28

Tôi có thủ tục này:Gọi một thủ tục lưu trữ trong Oracle với IN và OUT thông số

CREATE OR REPLACE PROCEDURE PROC1(invoicenr IN NUMBER, amnt OUT NUMBER) 
AS BEGIN 
SELECT AMOUNT INTO amnt FROM INVOICE WHERE INVOICE_NR = invoicenr; 
END; 

Vì vậy, khi tôi chạy nó như thế này nó sẽ trả về hoàn toàn không có gì:

DECLARE 
    amount NUMBER; 
BEGIN 
    PROC1(1000001, amount); 
    dbms_output.put_line(amount); 
END; 

BTW tôi sử dụng DreamCoder cho Oracle. Có vấn đề gì với thủ tục hay với cách tôi gọi nó? Có một mục trong bảng INVOICE có INVOICE_NR bằng 1000001.

+2

Nếu bạn chạy "bắt đầu dbms_output.put_line ('kiểm tra đầu ra') kết thúc;" bạn có thấy đầu ra không? Thủ tục này và cách gọi nó là hoàn toàn chính xác. – arturro

+0

Tôi chạy theo cách này nhưng tôi không thấy đầu ra. Có thể là DreamCoder không hiển thị đầu ra của put_line()? – RegedUser00x

+0

Không, tôi đã thử với 'BEGIN dbms_output.put_line (' hi '); END; 'và nó cũng không hiển thị bất cứ điều gì. – RegedUser00x

Trả lời

1

Chuyển đến Công cụ Menu -> Đầu ra SQL, Chạy câu lệnh PL/SQL, đầu ra sẽ hiển thị trên bảng SQL Output.

34

Nếu bạn đặt đầu ra máy chủ ở chế độ BẬT trước khi toàn bộ mã, nó hoạt động, nếu không hàm put_line() sẽ không hoạt động. Thử nó!

Mã này là,

set serveroutput on; 
CREATE OR REPLACE PROCEDURE PROC1(invoicenr IN NUMBER, amnt OUT NUMBER) 
AS BEGIN 
SELECT AMOUNT INTO amnt FROM INVOICE WHERE INVOICE_NR = invoicenr; 
END; 

Và sau đó gọi hàm vì nó là:

DECLARE 
amount NUMBER; 
BEGIN 
PROC1(1000001, amount); 
dbms_output.put_line(amount); 
END; 
2

tôi đã có cùng một problem.I sử dụng một kích hoạt, và trong trigger mà tôi gọi một thủ tục Khi tôi cố gắng in kết quả trong cơ thể kích hoạt, không có gì trên màn hình, nhưng sau đó tôi đã giải quyết vấn đề này làm 2 biến địa phương trong hàm, tính toán những gì tôi cần với chúng và cuối cùng, sao chép các biến đó các biến thủ tục OUT của bạn. Tôi hy vọng, nó sẽ hữu ích, succes!

Các vấn đề liên quan