现有一张老师学生表(tb_tea_cou),由于业务需要,需把老师学生表tb_tea_stu拆分成两张表(tb_tea、tb_cou),并把记录insert到这两张子表中(tb_tea、tb_cou为关联的两张表)。

表结构如下:
tb_tea_cou(
   id, //pk
   name, //任课老师
   zc, //职称
   course //课程
),

老师表:
tb_tea(
   tid, //pk
   tname, //任课老师
   zc //职称
),

课程表:
tb_cou(
   cid, //pk
   course, //课程
   tea_id //fk,tb_tea id
)

插入数据

INSERT INTO tb_tea_cou (ID, name, zc, course) VALUES (hibernate_seq.nextval, '张三', '教师', '语文');
INSERT INTO tb_tea_cou (ID, name, zc, course) VALUES (hibernate_seq.nextval, '李四', '教师', '数学');
INSERT INTO tb_tea_cou (ID, name, zc, course) VALUES (hibernate_seq.nextval, '王五', '教师', '英语');
INSERT INTO tb_tea_cou (ID, name, zc, course) VALUES (hibernate_seq.nextval, '老刘', '教师', '历史');
INSERT INTO tb_tea_cou (ID, name, zc, course) VALUES (hibernate_seq.nextval, '小王', '教师', '政治');
INSERT INTO tb_tea_cou (ID, name, zc, course) VALUES (hibernate_seq.nextval, '杜甫', '教师', '生物');
INSERT INTO tb_tea_cou (ID, name, zc, course) VALUES (hibernate_seq.nextval, '李白', '教师', '化学');
INSERT INTO tb_tea_cou (ID, name, zc, course) VALUES (hibernate_seq.nextval, '韩愈', '教师', '物理');
select * from tb_tea_cou;
 

思路,使用存储过程,插入tb_tea表之后,select max(tid) from tb_tea; 得到刚刚插入的序列的最大值,在后面将这个值插入tb_cou表中。

--创建存储过程
SET serveroutput ON;
CREATE OR REPLACE PROCEDURE proce_insert_tab(error_msg OUT VARCHAR2) IS
    v_id NUMBER(9, 2);
BEGIN
    FOR cur IN (select * FROM tb_tea_cou) LOOP
       SELECT hibernate_seq.nextval INTO v_id FROM dual;
       INSERT INTO tb_tea(tid, tname, zc) VALUES (
              v_id, cur.name, cur.zc);
       INSERT INTO tb_cou(cid, course, tea_id) VALUES (
              hibernate_seq.nextval, cur.course, v_id);
       COMMIT;
       error_msg:='添加成功';
    END LOOP;
EXCEPTION
    WHEN OTHERS THEN ROLLBACK;
    error_msg:='添加失败';
    RAISE_APPLICATION_ERROR(-20010, 'ERROR:插入数据有误!');
END;
/
 
--调用存储过程
var error_msg VARCHAR2(200);
exec proce_insert_tab(:error_msg);  
 
 
SELECT * FROM tb_tea;
SELECT * FROM tb_cou;
SELECT t.tid, t.tname, t.zc, c.course FROM tb_tea t, tb_cou c WHERE t.tid=c.tea_id
delete from tb_tea;
delete from tb_cou;

oracle insert两个关联表的更多相关文章

  1. oracle 两张关联表执行更新update

    UPDATE T_ASN_DTL ad1 SET ad1.cf03=( SELECT ac.TH003 FROM "T_ASN_DTL_copy" ac WHERE ac.udf0 ...

  2. oracle 比较两个用户表结构的区别。

    create table ESPACE_TABLE ( TABLE_NAME ) not null ) create table ESPACE_COLUMN ( TABLE_NAME ) not nu ...

  3. 关联表映射 Association Table Mapping

    把关联保存为一个表,存储关联表的外键 在对象中,使用集合作为域值,来处理多值域. 而在DB中,只能有单值域. 外键映射的核心,是在关联关系的单值端使用外键来维持联系. 而在多对多的关联关系中,已经不存 ...

  4. Oracle 取两个表中数据的交集并集差异集合

    Oracle 取两个表中数据的交集 关键字: Oracle 取两个表中数据的交集 INTERSECT Oracle 作为一个大型的关系数据库,日常应用中往往需要提取两个表的交集数据 例如现有如下表,要 ...

  5. [PHP]更新中间关联表数据的两种思路

    ---------------------------------------------------------------------------------------------------- ...

  6. Oracle创建删除用户,角色,表空间,导入导出数据库命令总结(转载)

    无意间看到一篇文章,觉得对于ORACLE的新手很实用,特转载,原文出处这里 说明:在创建数据库时输入的密码,是修改系统默认的密码,以system和sysman等系统默认身份登录时要输入的密码就是修改后 ...

  7. 【转】Oracle - 数据库的实例、表空间、用户、表之间关系

    [转]Oracle - 数据库的实例.表空间.用户.表之间关系 完整的Oracle数据库通常由两部分组成:Oracle数据库和数据库实例. 1) 数据库是一系列物理文件的集合(数据文件,控制文件,联机 ...

  8. MySQL--表操作(约束条件foreign key关联表 多对1,多对多,1对1)

    一.所有数据都存放于一张表中的弊端:1.表的组织结构复杂不清晰2.浪费空间3.扩展性极差 解决方案:分表a.分表 + foreign key: 有硬性限制(关联表中的关联字段内容必须来自于被关联表), ...

  9. mybatis学习(五)----实现关联表查询

    一.一对一的表查询 查询班级表中班级号为1的对应的记录(包括教师的具体信息) 1.首先建立数据表 数据表class和techear,class表中只有一个外键techear_id,sql脚本如下: C ...

随机推荐

  1. 解决安装VC6.0后出现MSDEV.EXE错误,无法用打开工程解决方法

    问题:安装VC6.0后,在打开项目或添加文件时,出现如下错误: 可能导致原因:由于Ms安装软件的兼容性问题,导致VC6.0安装不完全, 解决方法:--网上打sp6补丁的方法貌似不可用,所以可以采用另一 ...

  2. Android-原生对话框

    package liudeli.ui.all; import android.app.Activity; import android.app.AlertDialog; import android. ...

  3. [转]Control的Invoke和BeginInvoke

    转自:Control的Invoke和BeginInvoke  作者:Kuffy Wang 近日,被Control的Invoke和BeginInvoke搞的头大,就查了些相关的资料,整理如下.感谢这篇文 ...

  4. Transaction And Lock--由外键导致的死锁

    死锁发生情况:1. 存在表A和表B,表A的主键是表B的外键2.事务A在表A上申请到X锁以修改表A中数据和删除表A中的数据,然后需要检查表B中的数据是否满足外键约束,从而需要Range锁来锁住表B3.事 ...

  5. Transaction And Lock--两种方式实现可重复读

    一些需求要求两次查询数据之间不允许数据被修改,即可重复读取 可重复读REPEATABLE READ与串行化SERIALIZABLE的区别在于串行化要求满足该查询的数据不被修改且无新满足该查询条件的数据 ...

  6. sql字段操作

    --删除第一位 substring(ftpMobile,2,len(ftpMobile)-1) --检查是否是数字 ISNUMERIC(ftpMobile) =0  含数字以外字符 ISNUMERIC ...

  7. php swoole扩展安装

    一波三折. 首先下载swoole安装包(由于我这里php是7,所以说应该去官网下载最新的swoole包,否则会发生意想不到的错误) wget https://github.com/swoole/swo ...

  8. zabbix前端添加平台脚本监控

    1.在前端创建脚本 2.添加监控配置 # 这里添加的监控为ping命令,用来探测网络的可用性. # 这里添加的监控为traceroute命令,用来探测网络的可用性. # 这里添加的监控为nmap命令, ...

  9. 为什么程序员都不喜欢使用switch而使用if来做条件跳转

    请用5秒钟的时间查看下面的代码是否存在bug.   OK,熟练的程序猿应该已经发现Bug所在了,在第8行和第10行下面我没有添加关键字break; 这就导致这段代码的行为逻辑与我的设计初衷不符了. 缺 ...

  10. jvisualvm_使用jmx连接远程linux应用

    [前提] JVisualVM是由Sun提供的性能分析工具,在Jdk6.0以后的版本中是自带的,如果是用Jdk1.5或以前版本的就得要单独安装了. [1]远程机器需要开启jmx 在使用jvisualvm ...