2008-11-13 24 views
15

Oracle'da PL/SQL prosedürü kendi ismini biliyor mu?PL/SQL prosedürünün ismini bulun

Anlatayım:

CREATE OR REPLACE procedure some_procedure is 
    v_procedure_name varchar2(32); 
begin 
    v_procedure_name := %%something%%; 
end; 

%%something%% sonra yürütür, değişken v_procedure_name 'SOME_PROCEDURE' içermelidir. Bu yordamın object_id içeriyorsa, Tamam, bu yüzden ben all_objects içinde adı arayabilir.

cevap

26

Dene:

v_procedure_name := $$PLSQL_UNIT; 

size olan hangi satır numarası öğrenmek istiyorsanız $$ PLSQL_LINE da var. Eğer önceden 10g ise

+5

Yalnızca tek başına işlemler ve işlevler için yordam adını döndürür, paketlenmiş bir yordamdan çağrılırsa, paket adını döndürür. – pablo

+1

Gerçekten. Biraz rahatsız edici. – cagcowboy

3

, paketler halinde Prosedürler/fonksiyonları aşırı (ve iç içe) olabilir dbms_utility.format_call_stack dışına (ayrıştırma) bunu 'kazmak', böylece paket adı/satır numarası normalde iyidir adından daha fazla.

2

10g ve 11g'de "owa_util.get_procedure" işlevini kullanıyorum. Normalde bunu paketler içinde de kullanırım, çünkü paketin bir parçası olarak bir iç prosedürün veya fonksiyonun ismini de döndürür, yani (paket_adı). (Prosedür adı). Bir istisnanın meydana geldiğini tanımlamak için genel bir EXCEPTION şablonu sağlamak için bunu kullanıyorum.

CREATE OR REPLACE procedure some_procedure is 
    v_procedure_name varchar2(32); 
begin 
    v_procedure_name := owa_util.get_procedure; 
end; 

CREATE OR REPLACE PACKAGE some_package 
AS 
    FUNCTION v_function_name 
    RETURN DATE; 
END; 
/
CREATE OR REPLACE PACKAGE BODY some_package 
AS 
    FUNCTION v_function_name 
    RETURN DATE 
    IS 
    BEGIN 
     RETURN SYSDATE; 
    EXCEPTION 
     WHEN OTHERS THEN 
      DBMS_OUTPUT.PUT_LINE('ERROR IN '||owa_util.get_procedure); 
      DBMS_OUTPUT.PUT_LINE(SQLERRM); 
    END; 
END; 
/
+0

Bu, denediğimde boş döndü. – dcp