2010-06-09 24 views
5

Tôi có một khối pl/sql ẩn danh với một quy trình được khai báo bên trong nó cũng như một con trỏ. Nếu tôi khai báo thủ tục trước khi con trỏ thất bại. Có yêu cầu con trỏ được khai báo trước khi làm thủ tục không?Thứ tự khai báo trong khối pl/sql ẩn danh

Có các quy tắc nào khác cho thứ tự khai báo trong khối pl/sql?

này hoạt động:

DECLARE 
cursor cur is select 1 from dual; 
procedure foo as begin null; end foo; 
BEGIN 
null; 
END; 

này thất bại với lỗi PLS-00103: Encountered the symbol "CURSOR" when expecting one of the following: begin function package pragma procedure form

DECLARE 
procedure foo as begin null; end foo; 
cursor cur is select 1 from dual; 
BEGIN 
null; 
END; 

Trả lời

12

Cursors, các biến, hằng và các loại cần phải được khai báo trước khi gói/chức năng.

Cái này sẽ không quá:

DECLARE 
procedure foo as begin null; end foo; 
x VARCHAR2(10); 
BEGIN 
null; 
END; 
+2

Các tài liệu tham khảo tài liệu hướng dẫn là tại đây http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28370/block.htm#i32791 Nó không phải là rất rõ ràng, nhưng "tuyên bố mục" (ví dụ như biến) nằm trong danh sách 1 và phải đến trước "định nghĩa thủ tục/chức năng" ich có trong danh sách 2. –

+0

@Gary: Tuyệt vời, cảm ơn! –

0

Nếu bạn muốn khai báo một con trỏ có sẵn cho các thủ tục con là tốt, chỉ cần thêm một khối ẩn danh:

DECLARE 
cursor cur is select 1 from dual; 
BEGIN 
DECLARE 
    procedure foo as begin null; end foo; 
BEGIN 
    null; 
END; 
END; 
Các vấn đề liên quan