2009-12-18 14 views
7

Birçok Google ve SO aramasından sonra, şu basit soruya kesin bir yanıt bulamıyorum:Başka bir saklı yordam içinde bir Oracle yordamı tanımlamak için sözdizimi nedir?

Kullanılacak başka bir prosedürün içinde nasıl bir prosedür tanımlayabilirim?

İç içe geçmiş bloklar ve iç içe geçmiş yordamların olduğunu biliyorum, ancak istediğim şeyin tam sözdizimini görmedim. yani

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

Tony'nin cevabı açık, ama neden bunu yapmak istediğinizi sormak zorundayım. İç içe geçmiş prosedürleri kullandım, ama onları hiç iyi kullanmadıklarını gördüm. Yani, prosedürü bir pakete koymadan (paketin içinde değilse) ve iç içe geçmiş prosedürler için paket içinde özel yöntemler oluşturmaktan neredeyse her zaman daha iyi olursunuz. Aksi takdirde, kodu takip etmek oldukça kafa karıştırıcı olur ve temel olarak tüm TOP_PROCEDURE'un yerel değişkenlerinin iç içe geçmiş prosedürler bağlamında global değişkenler olması nedeniyle oldukça zayıf bir uygulamaya yol açar. –

+1

Yuvalanmış prosedürleri oldukça sık kullanıyorum - genellikle ebeveyn prosedürlerine çok özel olan küçük işlevler için (yani başka bir şeyle kaleme alınmak için herhangi bir anlam ifade etmiyorlar), aksi takdirde aynı kodu tekrar ediyorum Ebeveyn prosedüründe bir kez. –

+0

Eğer noktanız kesinlikle geçerli Justin, ama gerçekte Jeffrey'nin belirttiği şekilde kullanıyorum. Aynı zamanda meraktan da gerçekten bir soru. Kodumu yeniden düzenlemenin hızlı bir yolu. – daveslab

cevap

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; 

Yerel prosedürler sonra başka bir şey (ör değişkenler) beyan edilmelidir.

+0

Basit ve hızlı cevap. Muhteşem. – daveslab

İlgili konular