بسم الله و الحمد لله و الصلاة و السلام على رسول الله.
مثال على قيم بيئة المستخدم هو المتغير :
:APP_USER
v('APP_USER')
في ابكس يمكن استرجاع قيم بيئة المستخدم من خلال SYS_CONTEXT على مستوى قاعدة البيانات.
مثال:
غالبا نضيف اربع أعمدة لاي جدول و التي هي باللون الأخضر فيما يلي:
CREATE TABLE EMP (
ID NUMBER (5),
EMP_NAME VARCHAR2 (64),
CREATED_BY VARCHAR2 (32),
UPDATED_BY VARCHAR2 (32),
CREATED DATE ,
UPDATED DATE
UPDATED DATE
)
غالبا ما نقوم تاستخدام القادح التالي لادخال القيم إلى الأعمدة الأربعة:
CREATE OR REPLACE TRIGGER EMP_ADT_TRG BEFORE
INSERT OR UPDATE ON EMP FOR EACH ROW
BEGIN
IF INSERTING THEN
:NEW.CREATED_BY := NVL( V('APP_USER'),USER );
:NEW.CREATED := SYSDATE;
END IF;
IF UPDATING THEN
:NEW.UPDATED_BY := NVL( V('APP_USER'),USER );
:NEW.UPDATED := SYSDATE;
END IF;
END;
النقطة الأولى: في الكود السابق هي استخدام NVL و الدي يستهلك موارد أكنر من COALESCE و عليه الكود يجب أن يكون:
:NEW.UPDATED_BY := COALESCE( v('APP_USER'),USER );
النقطة الثانية: في الكود السابق هي استخدام
v('APP_USER')
و التي لا يمكن استخدامها كقيمة افتراضية للعمود في الجدول.
يجب استخدامها فقط في المكان المناسب. زر هذا الرابط للمزيد من التفاصيل. و عليه الكود السابق يجب أن يكون:
CREATE TABLE EMP (
ID NUMBER (5),
EMP_NAME VARCHAR2 (64),
CREATED_BY VARCHAR2 (32)
default COALESCE(SYS_CONTEXT('APEX$SESSION', 'app_user'), USER),
UPDATED_BY VARCHAR2 (32),
ID NUMBER (5),
EMP_NAME VARCHAR2 (64),
CREATED_BY VARCHAR2 (32)
default COALESCE(SYS_CONTEXT('APEX$SESSION', 'app_user'), USER),
UPDATED_BY VARCHAR2 (32),
CREATED DATE
default sysdate ,
UPDATED DATE
default sysdate ,
UPDATED DATE
)
CREATE OR REPLACE TRIGGER EMP_ADT_TRG BEFORE
BEGIN
:NEW.UPDATED_BY := COALESCE(SYS_CONTEXT('APEX$SESSION', 'app_user'), USER);
:NEW.UPDATED := SYSDATE;
END;