2013-02-01 51 views
7

Tôi có một định nghĩa một thủ tục lưu trữ mới nhưng nhận được một lỗi khi gọi nó,Gọi một thủ tục lưu trữ trong Toad

CREATE OR REPLACE PROCEDURE SCOTT.getempsal(
     p_emp_id IN NUMBER, 
     p_emp_month IN CHAR, 
     p_emp_sal OUT INTEGER) 

AS 
BEGIN 
    SELECT EMP_SAL 
     INTO p_emp_sal 
     FROM EMPLOYEE_SAL 
    WHERE EMP_ID = p_emp_id 
    AND EMP_MONTH = p_emp_month; 

END getempsal; 

Và cố gắng gọi nó là:

getempsal(1,'JAN',OUT) --Invalid sql statement. 
+0

Toad là một giao diện công cụ client dựa ** **, không giống như SQL * Plus. Vì vậy, bạn có thể trực tiếp xem các thủ tục và thực hiện nó từ công cụ chính nó. –

Trả lời

14

thủ tục của bạn có chứa một out thông số, vì vậy bạn cần phải gọi nó theo khối như:

declare 
a number; 
begin 
    getempsal(1,'JAN',a); 
    dbms_output.put_line(a); 
end; 

Thủ tục đơn giản (hãy nói với một số paramete r) có thể được gọi với

exec proc(1); 

hoặc

begin 
proc(1); 
end; 
+2

Nếu thủ tục trả về con trỏ, chỉ cần khai báo nó và sau đó thực hiện như sau: : output: = cursor; Điều này sẽ in nội dung con trỏ trong lưới dữ liệu. –

+0

Một điều hữu ích nữa - bạn có thể lưu trữ tất cả các thủ tục với con trỏ đầu ra như sau: exec package_name.procedure_name ('param', 'param2',: 0) và bạn sẽ nhận được nội dung con trỏ trong DataGrid. –

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