ali643
سه شنبه 25 تیر 1392, 16:19 عصر
سلام دوستان
یک جدول دارم که مشخصات یه دانشجو رو میگیره من می خوام که یک تریگر رو جدول بنویسم که بعد از insert اعمال بشه و یک کاربر جدید در پایگاه داده ایجاد بشه
کد تریگر من به این صورت هست که برای ساختن کاربر جدید یک procedures ساختم و در تریگر اونو صدا زدم
CREATE OR REPLACE PROCEDURE "ALIAS"."PROC_CREATESTUDENT_USER" (user_id in VARCHAR2,pwd in VARCHAR2) AS
BEGIN
EXECUTE IMMEDIATE 'CREATE USER '||dbms_assert.enquote_name(user_id,FALSE)||' IDENTIFIED BY ' ||dbms_assert.enquote_name(pwd,FALSE)||' ACCOUNT UNLOCK';
EXECUTE IMMEDIATE 'GRANT CONNECT TO '||dbms_assert.enquote_name(user_id,FALSE);
EXECUTE IMMEDIATE 'GRANT ROLE_STUDENT TO '||dbms_assert.enquote_name(user_id,FALSE);
end;
/
کد تریگر هم به این صورته
CREATE OR REPLACE TRIGGER "ALIAS"."T_CREATE_USERNAMEFORSTUDENT" AFTER
INSERT ON "ALIAS"."STUDENT" REFERENCING OLD AS OLD NEW AS NEW FOR EACH ROW begin
PROC_CREATESTUDENT_USER(:new.sid,:new.sid);
end;
/
ALTER TRIGGER "ALIAS"."T_CREATE_USERNAMEFORSTUDENT" ENABLE;
کد جدول
CREATE TABLE "ALIAS"."STUDENT" ( "SID" NUMBER, "NAME" VARCHAR2(25), "FAMILY" VARCHAR2(25), "TEL" VARCHAR2(15), "ADDRESS" VARCHAR2(250), "DEPID" NUMBER, CONSTRAINT "F_DEPID" FOREIGN KEY ("DEPID") REFERENCES "ALIAS"."DEPARTMENT" ("DEPID") VALIDATE , PRIMARY KEY ("SID") VALIDATE ) TABLESPACE "SYSTEM" PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 STORAGE ( INITIAL 64K FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT) LOGGING NOCOMPRESS
مقدار sid شماره دانشجویی در جدول هستش که کاربری می خواهیم بسازیم که نام کاربریش و رمزعبورش برابر شماره دانشجویی باشه.
الان مشکل من ایم هست که کاری که باید بکنه رو نمی کنه و همش پیغام خطا می ده.
به نظرتون مشکل از کجاست؟
با تشکر.
یک جدول دارم که مشخصات یه دانشجو رو میگیره من می خوام که یک تریگر رو جدول بنویسم که بعد از insert اعمال بشه و یک کاربر جدید در پایگاه داده ایجاد بشه
کد تریگر من به این صورت هست که برای ساختن کاربر جدید یک procedures ساختم و در تریگر اونو صدا زدم
CREATE OR REPLACE PROCEDURE "ALIAS"."PROC_CREATESTUDENT_USER" (user_id in VARCHAR2,pwd in VARCHAR2) AS
BEGIN
EXECUTE IMMEDIATE 'CREATE USER '||dbms_assert.enquote_name(user_id,FALSE)||' IDENTIFIED BY ' ||dbms_assert.enquote_name(pwd,FALSE)||' ACCOUNT UNLOCK';
EXECUTE IMMEDIATE 'GRANT CONNECT TO '||dbms_assert.enquote_name(user_id,FALSE);
EXECUTE IMMEDIATE 'GRANT ROLE_STUDENT TO '||dbms_assert.enquote_name(user_id,FALSE);
end;
/
کد تریگر هم به این صورته
CREATE OR REPLACE TRIGGER "ALIAS"."T_CREATE_USERNAMEFORSTUDENT" AFTER
INSERT ON "ALIAS"."STUDENT" REFERENCING OLD AS OLD NEW AS NEW FOR EACH ROW begin
PROC_CREATESTUDENT_USER(:new.sid,:new.sid);
end;
/
ALTER TRIGGER "ALIAS"."T_CREATE_USERNAMEFORSTUDENT" ENABLE;
کد جدول
CREATE TABLE "ALIAS"."STUDENT" ( "SID" NUMBER, "NAME" VARCHAR2(25), "FAMILY" VARCHAR2(25), "TEL" VARCHAR2(15), "ADDRESS" VARCHAR2(250), "DEPID" NUMBER, CONSTRAINT "F_DEPID" FOREIGN KEY ("DEPID") REFERENCES "ALIAS"."DEPARTMENT" ("DEPID") VALIDATE , PRIMARY KEY ("SID") VALIDATE ) TABLESPACE "SYSTEM" PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 STORAGE ( INITIAL 64K FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT) LOGGING NOCOMPRESS
مقدار sid شماره دانشجویی در جدول هستش که کاربری می خواهیم بسازیم که نام کاربریش و رمزعبورش برابر شماره دانشجویی باشه.
الان مشکل من ایم هست که کاری که باید بکنه رو نمی کنه و همش پیغام خطا می ده.
به نظرتون مشکل از کجاست؟
با تشکر.