oracle 插入两段序列,在Oracle中插入带序列的多行

restrictions on multitable inserts包括:

You cannot specify a sequence in any part of a multitable insert statement. A multitable insert is considered a single SQL statement. Therefore, the first reference to NEXTVAL generates the next number, and all subsequent references in the statement return the same number.

这不是真的 – 你可以使用一个序列,它总是得到相同的值,因此通过引用相同的序列一次创建父记录和子记录会很有用.

如果你想继续使用insert all,你可以通过使用获取序列值的非确定性函数来解决这个问题:

CREATE FUNCTION get_seq RETURN NUMBER IS

BEGIN

RETURN postal_code_seq.nextval;

END;

/

INSERT ALL

INTO POSTAL_CODE( postal_code,description)

VALUES(get_seq,'Coimbatore')

INTO POSTAL_CODE (postal_code,description)

VALUES(get_seq,'Mumbai') SELECT * FROM DUAL;

2 rows inserted.

SELECT * FROM postal_code;

POSTAL_CODE DESCRIPTION

--------------------------------------- --------------------

1 Coimbatore

2 Mumbai

但这有点尴尬.你可能最好使用单独的insert语句 – 在单个表中使用多表插入并不是真正获得了很多 – 或者是从序列中设置唯一列的触发器,或者是CTE /内联视图来生成值插入.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值