sql - 如何在 oracle 的第二个表中插入第一个表运行时间值?
问题描述
我有表 A 列如下所示
> id, name, salary
>
> Max+1(10) ,'aa',100 max+1(11), 'bb',200 . .like that i have 10 record
> is there . Max+(21),'xx',1000
现在插入 10 行没有任何问题。
第二张表如下所示
p_id,age,id
p_id max+1 (41) ,30,(here i need to insert same id from A table 1st record(Max+1(10)))
p_id max+1 (42) ,31,(here i need to insert same id from A table 2nd record(Max+1(11)))
p_id max+1 (43) ,32,(here i need to insert same id from A table 3rd record(Max+1(12)))
.
.
.
.
同样我需要在循环中插入 10 行。谢谢 。
解决方案
使用存储过程并且不获取MAX()+1
值,使用序列:
Oracle 11g R2 模式设置:
CREATE TABLE table1 (
id NUMBER(20,0) PRIMARY KEY,
name VARCHAR2(200),
salary NUMBER(12,2)
)
/
CREATE TABLE table2 (
p_id NUMBER(20,0) PRIMARY KEY,
age NUMBER(3,0),
id NUMBER(20,0) REFERENCES table1 (id)
)
/
CREATE SEQUENCE table1__id__seq
/
CREATE SEQUENCE table2__p_id__seq
/
CREATE PROCEDURE add_Details(
in_name TABLE1.NAME%TYPE,
in_salary TABLE1.SALARY%TYPE,
in_age TABLE2.AGE%TYPE
)
IS
p_id TABLE1.ID%TYPE;
BEGIN
INSERT INTO table1 ( id, name, salary )
VALUES ( table1__id__seq.NEXTVAL, in_name, in_salary )
RETURNING id INTO p_id;
INSERT INTO table2 ( p_id, age, id )
VALUES ( table2__p_id__seq.NEXTVAL, in_age, p_id );
END;
/
查询 1:
BEGIN
add_Details( 'aa', 100, 30 );
add_Details( 'bb', 200, 31 );
add_Details( 'cc', 300, 32 );
END;
查询 2:
SELECT * FROM table1
结果:
| ID | NAME | SALARY |
|----|------|--------|
| 1 | aa | 100 |
| 2 | bb | 200 |
| 3 | cc | 300 |
查询 3:
SELECT * FROM table2
结果:
| P_ID | AGE | ID |
|------|-----|----|
| 1 | 30 | 1 |
| 2 | 31 | 2 |
| 3 | 32 | 3 |
推荐阅读
- graphql - 将 ImageSharp 作为字段添加到 MarkdownRemark 节点(不是 frontmatter)
- r - For循环填充R中的一列
- python-3.x - 这在 Python 中是如何发生的?
- python - 函数的参数可以用作全局变量的占位符吗
- http - 根据查询的路由使用不同的请求解析器
- javascript - 动态添加到 Promise 数组时,Promise 全部提前完成
- java - 根据杰克逊中的xml文档属性在反序列化期间检测对象类型 - 没有JsonNode
- node.js - 为什么我在 Mongoose 中的 createIndex 失败了?
- c - 为什么“__tracepoint_sched_switch”未定义
- jwt - 如何使用 Google IAP 对 JupyterHub 进行身份验证?