2009-06-04 1 views
9

Tôi đang làm việc trên một dự án ASP.NET với một cơ sở dữ liệu Oracle. Chúng tôi đang sử dụng TOAD để thêm/quản lý các thủ tục được lưu trữ - và nói chung tôi thích TOAD và Oracle. Một điều tôi thấy thất vọng là tìm một cách đơn giản để kiểm tra một Oracle Stored Proc, chẳng hạn như cú pháp "exec [SP_NAME] Param1, Param2, ParamN" của SQL Server.Phương pháp dễ nhất để kiểm tra thủ tục lưu trữ Oracle

Tất cả các thủ tục được lưu trữ của chúng tôi xuất ra Ref Cursors. Dưới đây là ví dụ về một Proc được lưu trữ:

 
CREATE OR REPLACE PROCEDURE APP_DB1.GET_JOB 
(
    p_JOB_ID IN JOB.JOB_ID%type, 
    outCursor OUT MYGEN.sqlcur 
) 
IS 
BEGIN 
    OPEN outCursor FOR 
    SELECT * 
    FROM JOB 
    WHERE JOB_ID = p_JOB_ID; 
END GET_JOB; 
/

Bất kỳ đề xuất nào?

Trả lời

13

Bạn chỉ cần một tập lệnh gọi thủ tục lưu sẵn của bạn và có một biến liên kết cho đầu ra con trỏ ref để hiển thị nó trong lưới của TOAD trong Trình chỉnh sửa cửa sổ.

DECLARE 
type result_set is ref cursor; 
BEGIN 
APP_DB1.GET_JOB(1, :result_set); 
END; 

Khi bạn chạy TOAD này sẽ nhắc bạn 'bind': result_set, chỉ cần chọn con trỏ từ danh sách các loại và sau đó kết quả sẽ hiển thị trong lưới. Bí quyết là nghĩ về bản thân như một 'khách hàng' gọi thủ tục lưu trữ của bạn và bạn cần con trỏ ref của riêng bạn để lưu trữ kết quả.

+0

Mặc dù tôi đã hy vọng cho một tuyên bố một dòng, phương pháp dễ nhất mà tôi đã nhìn thấy. Cảm ơn. – Josh

+0

Mẹo này thực sự đã giúp tôi. Cảm ơn! – NickSuperb

1

Nếu bạn chỉ tìm kiếm một cách để gọi SP, thì cách Oracle là:

begin 
    sp_name(....); 
end; 

tôi không sử dụng Toad, nhưng bạn sẽ có thể đưa điều này vào một cửa sổ SQL và thực hiện nó.

+0

Tôi đã cập nhật câu hỏi để bạn có thể thấy rằng chúng tôi sử dụng con trỏ ref cho đầu ra. Do đó, chúng tôi không thể sử dụng ví dụ của bạn ở trên. – Josh

1

Trong sqplus bạn có thể sử dụng cú pháp

SQL> var rc refcursor

SQL> exec APP_DB1.GET_JOB (id công việc mà bạn muốn truy vấn,: rc)

SQL> in rc

Điều đó sẽ thực hiện. Dòng đầu tiên định nghĩa một biến liên kết. Bạn cũng có thể xác định một biến cho id công việc, hoặc chỉ cần nhập nó vào.

+0

Tôi cần kết quả được đặt trong một mạng lưới, như SQL Server, vì vậy tôi đang tìm cách thực hiện trong TOAD. – Josh

0

TOAD hiển thị kết quả trong lưới chỉ tốt với tập lệnh mẫu từ Russel. Chạy dưới dạng tập lệnh.

variable P_CUR refcursor; 
exec PACK.GETEXECUTION ('9f363e49-88c1-4295-b61e-60812d620d7e', '6', :P_CUR); 
print P_CUR; 

Cảm ơn!