oracle触发器实现在emp表中添加YT列,年收入为(sal+comm)*12,创建触发器实现当调整sal或comm列的值后,自动更新YT列的值。的代码
时间: 2024-02-27 07:56:39 浏览: 24
下面是实现在emp表中添加YT列,并且创建触发器实现当调整sal或comm列的值后,自动更新YT列的值的Oracle触发器代码:
```sql
-- 添加YT列
ALTER TABLE emp ADD (YT NUMBER);
-- 创建触发器
CREATE OR REPLACE TRIGGER emp_trigger
AFTER INSERT OR UPDATE OF SAL, COMM ON emp
FOR EACH ROW
BEGIN
:NEW.YT := (:NEW.SAL + NVL(:NEW.COMM, 0)) * 12;
END;
/
```
该触发器在每次向emp表中插入或更新SAL、COMM列的值时,会自动更新YT列的值为(SAL+COMM)*12。注意,这里使用了NVL函数,是为了防止当COMM列的值为NULL时出现计算错误。
相关问题
创建表emp,并插入 EMPNO、ENAME、JOB、MGR、HIREDATE、SAL、COMM 和 DEPTNO这些列
好的,以下是创建表emp并插入数据的SQL语句:
```
CREATE TABLE emp (
EMPNO NUMBER(4) PRIMARY KEY,
ENAME VARCHAR2(10),
JOB VARCHAR2(9),
MGR NUMBER(4),
HIREDATE DATE,
SAL NUMBER(7,2),
COMM NUMBER(7,2),
DEPTNO NUMBER(2)
);
INSERT INTO emp VALUES (7369, 'SMITH', 'CLERK', 7902, TO_DATE('1980-12-17', 'YYYY-MM-DD'), 800, NULL, 20);
INSERT INTO emp VALUES (7499, 'ALLEN', 'SALESMAN', 7698, TO_DATE('1981-02-20', 'YYYY-MM-DD'), 1600, 300, 30);
INSERT INTO emp VALUES (7521, 'WARD', 'SALESMAN', 7698, TO_DATE('1981-02-22', 'YYYY-MM-DD'), 1250, 500, 30);
INSERT INTO emp VALUES (7566, 'JONES', 'MANAGER', 7839, TO_DATE('1981-04-02', 'YYYY-MM-DD'), 2975, NULL, 20);
INSERT INTO emp VALUES (7654, 'MARTIN', 'SALESMAN', 7698, TO_DATE('1981-09-28', 'YYYY-MM-DD'), 1250, 1400, 30);
INSERT INTO emp VALUES (7698, 'BLAKE', 'MANAGER', 7839, TO_DATE('1981-05-01', 'YYYY-MM-DD'), 2850, NULL, 30);
INSERT INTO emp VALUES (7782, 'CLARK', 'MANAGER', 7839, TO_DATE('1981-06-09', 'YYYY-MM-DD'), 2450, NULL, 10);
INSERT INTO emp VALUES (7788, 'SCOTT', 'ANALYST', 7566, TO_DATE('1982-12-09', 'YYYY-MM-DD'), 3000, NULL, 20);
INSERT INTO emp VALUES (7839, 'KING', 'PRESIDENT', NULL, TO_DATE('1981-11-17', 'YYYY-MM-DD'), 5000, NULL, 10);
INSERT INTO emp VALUES (7844, 'TURNER', 'SALESMAN', 7698, TO_DATE('1981-09-08', 'YYYY-MM-DD'), 1500, 0, 30);
INSERT INTO emp VALUES (7876, 'ADAMS', 'CLERK', 7788, TO_DATE('1983-01-12', 'YYYY-MM-DD'), 1100, NULL, 20);
INSERT INTO emp VALUES (7900, 'JAMES', 'CLERK', 7698, TO_DATE('1981-12-03', 'YYYY-MM-DD'), 950, NULL, 30);
INSERT INTO emp VALUES (7902, 'FORD', 'ANALYST', 7566, TO_DATE('1981-12-03', 'YYYY-MM-DD'), 3000, NULL, 20);
INSERT INTO emp VALUES (7934, 'MILLER', 'CLERK', 7782, TO_DATE('1982-01-23', 'YYYY-MM-DD'), 1300, NULL, 10);
```
这个SQL语句会先创建一个名为emp的表,包含EMPNO、ENAME、JOB、MGR、HIREDATE、SAL、COMM和DEPTNO这些列,并将EMPNO列设为主键。然后,通过INSERT INTO语句向表中插入了一些数据。
在mysql中创建oracle中的emp表
在 MySQL 中创建类似 Oracle 中的 emp 表,可以按照以下步骤进行:
1. 创建 emp 表。在 MySQL 中,可以使用以下 SQL 语句创建 emp 表:
```sql
CREATE TABLE emp (
empno INT(4) NOT NULL,
ename VARCHAR(10),
job VARCHAR(9),
mgr INT(4),
hiredate DATE,
sal FLOAT(7, 2),
comm FLOAT(7, 2),
deptno INT(2)
);
```
这个 SQL 语句将创建一个名为 emp 的表,包含与 Oracle 中的 emp 表相同的字段。
2. 添加主键约束。在 Oracle 中,emp 表的主键是 empno 字段,因此我们需要在 MySQL 中为 empno 字段添加主键约束。可以使用以下 SQL 语句添加主键约束:
```sql
ALTER TABLE emp ADD PRIMARY KEY (empno);
```
3. 添加外键约束。在 Oracle 中,emp 表的 mgr 字段是一个外键,参考了 emp 表的主键。因此我们需要在 MySQL 中为 mgr 字段添加外键约束。可以使用以下 SQL 语句添加外键约束:
```sql
ALTER TABLE emp ADD CONSTRAINT fk_emp_mgr FOREIGN KEY (mgr) REFERENCES emp(empno);
```
这个 SQL 语句将为 emp 表的 mgr 字段添加一个名为 fk_emp_mgr 的外键约束,参考了 emp 表的 empno 字段。
现在,我们已经在 MySQL 中创建了一个类似 Oracle 中的 emp 表,其中包含了与 Oracle 中相同的字段和约束。你可以根据具体需求插入数据,进行操作。