2011-03-29 45 views
10

Tôi đã có thể tạo một thủ tục lưu sẵn cho một cơ sở dữ liệu Oracle, nhưng bây giờ tôi không thể tìm ra cách để chạy nó. Tôi đang sử dụng Squirre SQL và điều này đã làm việc để tạo thủ tục:Gọi thủ tục lưu sẵn của Oracle trong Squirrel SQL

CREATE OR REPLACE PROCEDURE MyProc(label IN varchar2, results OUT sys_refcursor) AS 
BEGIN 
OPEN results FOR 
    SELECT Label, Count, Timestamp 
     FROM table1 
      LEFT JOIN table2 ON table1.Name=table2.Name 
    WHERE table1.Label=label 
    ORDER BY Timestamp; 
END; 
/

Tôi muốn có thể nhận và hiển thị tập hợp kết quả. Tôi đã thử sử dụng call MyProc('param'), nhưng điều này không hoạt động (sai số lỗi đối số). Tôi đã tìm kiếm rộng rãi trên trang web này và những trang khác nhưng không có gì hữu ích. Hãy giúp tôi!

+0

@ câu trả lời dovka của vẻ là người duy nhất trả lời câu hỏi. Kayeight không hỏi cách gọi thủ tục từ Squirrel. Tiêu đề hiện tại của câu hỏi, "Gọi một thủ tục lưu trữ Oracle trong Squirrel SQL", là gây hiểu nhầm. – Lambart

Trả lời

0
var v_result sys_refcursor 

exec MyProc ('test label',:v_result) 
+0

Tôi không có SQL * Plus, tôi đang sử dụng Squirrel SQL, vì vậy điều này không hoạt động. : ( – Kayeight

+0

Cú pháp này là Oracle cụ thể. Bạn đã cài đặt plugin Oracle trong SQL Squirrel chưa? Http://www.squirrelsql.org/index.php?page=plugins –

+0

Nó nói rằng plugin được cài đặt, nhưng tôi nhận được một ORA-00900 : lỗi báo cáo SQL không hợp lệ ... – Kayeight

3

Cú pháp duy nhất mà tôi được làm việc trong Squirrel SQL là PL khối/SQL:

declare 
v_label varchar2:='SOMELABEL'; 
TYPE ref_cursor IS REF CURSOR; 
v_cur_results ref_cursor; 
begin 
MyProc (v_label, v_cur_results) 
end; 
/
2

Giống như this article giải thích, sử dụng "gọi là" thay vì "thực hiện" nên giải quyết vấn đề.

+0

Đọc câu hỏi một lần nữa - người hỏi đã biết về 'cuộc gọi' – Lambart

+0

Liên kết tới bài viết đã chết –

16

Các công trình sau đây để chạy một thủ tục lưu trữ:

begin 
    procedurename; 
end; 
/

Vâng, dấu gạch chéo ở cuối là cần thiết!

begin...end; tuyên bố một khối PL/SQL (Oracle-specific). Dấu gạch chéo là lệnh để chạy khối.

/(slash)

Thực hiện những câu lệnh SQL thời gian gần đây thực hiện hầu hết hoặc khối PL/SQL mà được lưu trữ trong bộ đệm SQL.

[...]

Oracle Database Online Documentation, 10g Release 2 (10.2)/SQL*Plus® User's Guide and Reference

+0

Làm thế nào Trả lời câu hỏi này @ thủ tục lưu trữ của @ Kayeight có hai tham số: một trong, và một ra.Vì vậy, làm thế nào để gọi một thủ tục được lưu trữ với một tham số 'out', thông qua Squirrel SQL? Nếu cú ​​pháp 'begin procedurename; end; /' cao hơn 'call procedurename;', hãy giải thích tại sao – Lambart

+0

hoàn hảo .......... – deFreitas

+0

_ .. là cần thiết .._ như là 2 chứ không phải 3 dấu chấm phẩy! – nsandersen

0

Tôi đã đấu tranh với điều này trong một thời gian dài nhưng đã quản lý để làm cho nó hoạt như thế này:

{call DBMS_SESSION.SET_CONTEXT (namespace => 'clientcontext', attribute => 'foo', value  => 'bar')} 
Các vấn đề liên quan