1、创建一个测试表EXP,以及使用的序列seq_exp 。 Create table exp( sid number, sname varchar2(20)); Create sequence seq_exp; 2、创建生产主键的行级触发器exp_trigger,要求若插入则在插入前生成主键SID的值,若更新主键的值则阻止更新,并提示‘不允许更新主键值’。 3、插入数据测试触发器是否成功触发
时间: 2024-03-21 20:41:00 浏览: 126
seq_list.rar_seq_list_seqlist数据结构_seq线性表_顺序表的list类
好的,你的问题是如何创建一个测试表EXP,以及使用的序列seq_exp,并创建一个行级触发器exp_trigger来生成主键值并阻止更新主键值的操作。
以下是创建测试表EXP和序列seq_exp的SQL语句:
```
CREATE TABLE exp (
sid NUMBER,
sname VARCHAR2(20)
);
CREATE SEQUENCE seq_exp;
```
接下来,我们可以创建一个行级触发器exp_trigger来生成主键值并阻止更新主键值的操作。触发器的代码如下:
```
CREATE OR REPLACE TRIGGER exp_trigger
BEFORE INSERT OR UPDATE ON exp
FOR EACH ROW
BEGIN
IF INSERTING THEN
:NEW.sid := seq_exp.NEXTVAL;
ELSIF UPDATING AND :OLD.sid <> :NEW.sid THEN
RAISE_APPLICATION_ERROR(-20001, '不允许更新主键值');
END IF;
END;
```
这个触发器会在插入新数据时生成主键值,并在更新操作时阻止更新主键值,并提示“不允许更新主键值”的错误信息。
最后,我们可以插入一些数据来测试触发器是否成功触发。插入数据的SQL语句如下:
```
INSERT INTO exp(sname) VALUES('John');
INSERT INTO exp(sname) VALUES('Mary');
INSERT INTO exp(sid, sname) VALUES(1, 'Tom');
```
这些数据插入后,可以使用以下SQL语句来查询表中的数据:
```
SELECT * FROM exp;
```
结果应该是:
```
SID SNAME
--- -----
1 Tom
2 John
3 Mary
```
可以看到,触发器成功地生成了主键值,并阻止了更新主键值的操作。
阅读全文