第8章 函数和过程
8.4、过程(2019-06-15)
1、存储过程向两张表中添加数据
-- 第一张表是avator表 CREATE TABLE avatar( avatar_id NUMBER GENERATED AS IDENTITY CONSTRAINT avatar_kp PRIMARY KEY,--主键约束 avatar_name VARCHAR2(30) ); -- 第二张表是episode表 CREATE TABLE episode( episode_id NUMBER GENERATED AS IDENTITY CONSTRAINT episode_pk PRIMARY KEY, avatar_id NUMBER CONSTRAINT episode_nnl NOT NULL,--NOT NULL约束 episode_name VARCHAR2(30), CONSTRAINT episode_fkl FOREIGN KEY(avatar_id) REFERENCES avatar(avatar_id)--外键约束 ); --adding_contact过程显示了如何使用按值传递过程跨单个事务作用域管理多个DML语句: CREATE OR REPLACE PROCEDURE adding_avatar(pv_avatar_name VARCHAR2,pv_episode_name VARCHAR2) IS lv_avatar_id NUMBER; BEGIN SAVEPOINT all_or_none;--事务开始点 INSERT INTO avatar(avatar_name)VALUES(pv_avatar_name)RETURNING avatar_id INTO lv_avatar_id;--RETURNING INTO子句将标识列的值返回给局部变量 INSERT INTO episode(avatar_id,episode_name)VALUES(lv_avatar_id,pv_episode_name);--使用lv_avatar_id局部变量作为外键值 COMMIT;--提交 EXCEPTION--异常 WHEN OTHERS THEN ROLLBACK TO all_or_none;--回滚可能已经发生的事务 END; / --匿名块程序测试过程 BEGIN adding_avatar('Airbender','Episode 1'); END; /