2008-11-19 11 views

cevap

11

Paket düzeyinde bir değişken oluşturursunuz. Bunu yaparsanız

CREATE OR REPLACE PACKAGE my_package 
AS 
    FUNCTION get_a RETURN NUMBER; 
END my_package; 
/

CREATE OR REPLACE PACKAGE BODY my_package 
AS 
    a NUMBER(20); 

    FUNCTION get_a 
    RETURN NUMBER 
    IS 
    BEGIN 
     RETURN a; 
    END get_a; 
END my_package; 
/

sen kadar okumak (ve doğru olarak işlemek) ORA-04068 hataları olmalıdır: Bu minimal bir örnektir. Her bir veritabanı oturumu, a için kendi değerine sahip olacaktır. Sen ile bu deneyebilirsiniz:

SELECT my_package.get_a FROM DUAL; 
11

Seans içinde birden birimler arasında paylaşılan veri depolamak için bir 'kullanıcı tarafından oluşturulan içerik kullanabilirsiniz.

İlk olarak bir bağlam oluşturmak:

CREATE CONTEXT SYS_CONTEXT ('userenv', 'current_schema')|| '_ctx' USING PKG_COMMON 

İkinci, sizin bağlam idare edecek bir paket oluşturmak:

CREATE OR REPLACE PACKAGE PKG_COMMON 
IS 
    common_ctx_name CONSTANT VARCHAR2 (60) 
       := SYS_CONTEXT ('userenv', 'current_schema') 
        || '_ctx'; 

    FUNCTION fcn_get_context_name RETURN VARCHAR2; 
    PROCEDURE prc_set_context_value (var_name VARCHAR2, var_value NUMBER); 
END; 

CREATE OR REPLACE PACKAGE BODY PKG_COMMON 
IS 
    FUNCTION fcn_get_context_name 
     RETURN VARCHAR2 
    IS 
    BEGIN 
     RETURN common_ctx_name; 
    END; 

    PROCEDURE prc_set_context_value (var_name VARCHAR2, var_value NUMBER) 
    IS 
    BEGIN 
     DBMS_SESSION.set_context (common_ctx_name, var_name, var_value); 
    END; 
END; 

prc_set_context_value daha gelişmiş olabilir, bu sadece bir örnek. Oluşturulan içerik ve paket ile bunları kullanmaya başlayabilirsiniz. prosedür çağrısı

begin 
    PKG_COMMON.prc_set_context_value('MyVariable', 9000) 
end; 

kullanarak bir bağlam değişkeni ayarlayın ve her yerde kullanabilirsiniz - her prosedür, paket, fonksiyon veya olay bir görünüm. Ben bağlamı oluşturduğunuzda

CREATE VIEW V_TEST AS 
    SELECT ID, LOGIN, NAME 
    FROM USERS 
    WHERE ROLE_ID = SYS_CONTEXT(PKG_COMMON.FCN_GET_CONTEXT_NAME, 'MyVariable') 

fazla bilgi için http://www.psoug.org/reference/sys_context.html

+0

bkz diyor: ORA-28265: NameSpace izin verilmez 'sys_' ile başlayan. Değişkeni değiştirmeye çalıştım. Ama değer yerine değişken ismi belirler –

İlgili konular