只对部门号为20的记录进行行触发器操作 删除数据的时候,提示你已经删除的数据信息empno 更新数据的时候,提示你已经更新的数据信息empno 插入数据的时候,提示你插入的数据信息empno
时间: 2024-03-16 14:47:26 浏览: 13
好的,针对您的需求,可以使用以下代码实现:
```mysql
CREATE TRIGGER `trigger_emp_info`
BEFORE DELETE OR UPDATE OR INSERT ON `emp`
FOR EACH ROW
BEGIN
IF (NEW.deptno = 20) THEN
IF (DELETING) THEN
SELECT CONCAT('您已经删除了数据信息 empno:', OLD.empno) AS '提示信息';
ELSEIF (UPDATING) THEN
SELECT CONCAT('您已经更新了数据信息 empno:', NEW.empno) AS '提示信息';
ELSEIF (INSERTING) THEN
SELECT CONCAT('您已经插入了数据信息 empno:', NEW.empno) AS '提示信息';
END IF;
END IF;
END;
```
该触发器会在每次对 `emp` 表进行删除、更新或插入操作时触发。在每次触发时,它会根据操作类型判断并输出相应的提示信息,具体的提示信息包括了操作的数据信息,如删除的数据的 `empno` 等。同时,该触发器只会对部门号为20的记录进行操作。
相关问题
oracle触发器实现不能对emp表中empno列的值进行编辑
可以使用Oracle触发器的BEFORE INSERT和BEFORE UPDATE事件来限制对emp表中empno列的编辑。具体实现方法如下:
1. 创建一个BEFORE INSERT和BEFORE UPDATE触发器:
```
CREATE OR REPLACE TRIGGER emp_no_trigger
BEFORE INSERT OR UPDATE ON emp
FOR EACH ROW
BEGIN
IF :NEW.empno <> :OLD.empno THEN
RAISE_APPLICATION_ERROR(-20001, 'You are not allowed to edit empno column');
END IF;
END;
```
2. 在触发器中,使用IF语句判断新的empno值和旧的empno值是否相同。如果不相同,则抛出一个应用程序错误,提示用户不能编辑empno列的值。
3. 将触发器绑定到emp表上,这样就可以在插入或更新emp表中的数据时执行触发器。
```
ALTER TABLE emp ENABLE ALL TRIGGERS;
```
这样,当用户尝试编辑emp表中的empno列时,触发器将阻止该操作并提示用户不能编辑empno列的值。
在scott模式下创建emp_logs表,字段名分别为empno,empname,deptno,deltime,均为非空约束,且插入数据时采用Oracle的Current_TimeStamp函数可以获取当前的日期和时间,且创建触发器TrigEmpLogs完成以下功能,当从emp删除一条记录后,把被删除的员工编号、员工姓名、部门编号、删除时间记录在emp_logs表中
好的,您的问题是如何在Scott模式下创建emp_logs表,并创建触发器TrigEmpLogs实现相应的功能。下面是相应的SQL语句:
```
-- 创建emp_logs表
CREATE TABLE emp_logs (
empno NUMBER NOT NULL,
empname VARCHAR2(50) NOT NULL,
deptno NUMBER NOT NULL,
deltime TIMESTAMP NOT NULL,
CONSTRAINT emp_logs_pk PRIMARY KEY (empno, deltime)
);
-- 创建触发器TrigEmpLogs
CREATE OR REPLACE TRIGGER TrigEmpLogs
AFTER DELETE ON emp
FOR EACH ROW
BEGIN
INSERT INTO emp_logs (empno, empname, deptno, deltime)
VALUES (:OLD.empno, :OLD.ename, :OLD.deptno, CURRENT_TIMESTAMP);
END;
/
```
这个SQL语句会在Scott模式下创建一个名为emp_logs的表,该表包含empno、empname、deptno和deltime四个字段,这四个字段都有非空约束。然后创建一个名为TrigEmpLogs的触发器,当从emp表中删除一条记录时,会将该记录的empno、empname、deptno和删除时间记录在emp_logs表中。需要注意的是,这个触发器只会在每次删除一条记录时触发,而不是在一次删除多条记录时触发。