【发布时间】:2015-02-03 21:10:44
【问题描述】:
对于 Oracle 11g 和 RDMBS 来说还是很新的(一般而言)
我想添加一个触发器,它会在将行插入到表中时创建一个用户。
我遇到了默认错误,说我不能在触发器的主体中放置 create 语句 (PLS-00103)。我尝试了线在体内的不同位置,并在触发器中完全隔离了线,但错误总是发生在“CREATE”位置。有谁知道这是否是对触发器/存储过程的限制?如果是这样,这种限制的解决方法是什么?
我可以想象有一个触发器会创建一些东西对数据库来说是非常危险的,但我没有足够的经验来确定。
编辑添加此类触发器的原因:
之所以要添加这样的触发器是因为
首先,我要初始化一个员工表。
其次,在表中没有员工的情况下,每个添加的员工将 (1) 创建一个用户名并传递给他们使用,以及 (2) 为他们提供一个员工角色的权限
编辑添加的代码
CREATE VIEW EMPLOYEES_VIEW AS
SELECT * FROM EMPLOYEES_TABLE;
CREATE TRIGGER NEW_EMPLOYEE_ROLE
INSTEAD OF INSERT
ON EMPLOYEES_VIEW
DECLARE INSERTED_EMPID CHAR;
BEGIN
INSERTED_EMPID:= :NEW.EMPID;
INSERT INTO EMPLOYEES_TABLE
(EMPID, NAME, TAXID, COUNTRY, HIREDATE, BIRTHDATE, SALARY, BONUS, DEPTID, ADDRESS, ADDRESS_CITY, ADDRESS_ZIP, ADDRESS_COUNTRY)
VALUES
(:NEW.EMPID, :NEW.NAME, :NEW.TAXID, :NEW.COUNTRY, :NEW.HIREDATE, :NEW.BIRTHDATE, :NEW.SALARY, :NEW.BONUS, :NEW.DEPTID, :NEW.ADDRESS, :NEW.ADDRESS_CITY, :NEW.ADDRESS_ZIP, :NEW.ADDRESS_COUNTRY);
CREATE USER INSERTED_EMPID IDENTIFIED BY INSERTED_EMPID;
GRANT EMPLOYEE_ROLE TO INSERTED_EMPID;
END;
/
谢谢
【问题讨论】:
-
您需要发布代码。但是我很困惑为什么要使用触发器来创建用户?在我看来这是一个奇怪的要求。
-
@IanCarpenter 我在上面进行了编辑。这是因为我希望创建一个员工表,其中每个添加的员工创建一个用户/通行证供员工登录,并为该登录提供特定的权限角色