2009-12-18 24 views
7

Sau nhiều tìm kiếm của Google và SO, tôi không thể tìm thấy câu trả lời cuối cùng cho câu hỏi đơn giản này:Cú pháp để định nghĩa quy trình Oracle trong một thủ tục lưu sẵn khác là gì?

Làm cách nào để xác định quy trình trong một thủ tục khác?

Tôi biết rằng có các khối lồng nhau và thủ tục lồng nhau, nhưng tôi chưa thấy cú pháp chính xác cho những gì tôi muốn. ví dụ:

create or replace 
PROCEDURE TOP_PROCEDURE 
(...) 
IS 
-- nested procedure here? 
BEGIN 
    NULL; 
END; 
+1

Câu trả lời của Tony là tại chỗ, nhưng tôi phải hỏi tại sao bạn muốn làm điều này. Tôi đã nhìn thấy các thủ tục lồng nhau được sử dụng, nhưng tôi chưa bao giờ thấy chúng được sử dụng tốt. Đó là, bạn hầu như luôn luôn được tốt hơn off đặt thủ tục trong một gói (nếu nó không có trong một gói) và tạo ra các phương pháp riêng trong gói cho các thủ tục lồng nhau. Nếu không, sẽ khá khó hiểu khi làm theo mã và dẫn đến thực hành khá kém về cơ bản có tất cả các biến cục bộ của TOP_PROCEDURE là các biến toàn cầu trong ngữ cảnh của các thủ tục lồng nhau. –

+1

Tôi sử dụng các thủ tục lồng nhau khá thường xuyên - thường cho các hàm nhỏ rất cụ thể cho thủ tục cha mẹ của chúng (nghĩa là chúng không có bất kỳ ý nghĩa gì để gọi), nếu không tôi sẽ lặp lại cùng một mã nhiều hơn một lần trong thủ tục cha mẹ. –

+0

Điểm của bạn chắc chắn là hợp lệ của Justin, nhưng thật ra tôi chỉ sử dụng nó theo cách Jeffrey chỉ định. Nó cũng thực sự là một câu hỏi ra khỏi tò mò là tốt. Đó là một cách nhanh chóng để cấu trúc lại mã của tôi. – daveslab

Trả lời

15
create or replace 
PROCEDURE TOP_PROCEDURE 
(...) 
IS 
    variable NUMBER; 
    PROCEDURE nested_procedure (...) 
    IS 
    BEGIN 
    NULL; 
    END; 
    PROCEDURE another_nested_procedure (...) 
    IS 
    BEGIN 
    NULL; 
    END; 
BEGIN 
    NULL; 
END; 

thủ tục địa phương phải được khai báo sau bất cứ điều gì khác (ví dụ biến).

+0

Câu trả lời đơn giản và nhanh chóng. Tuyệt vời. – daveslab

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