我在Oracle SQL Developer中尝试了此代码,并返回错误“此SELECT语句中需要INTO子句”
declare
flag_id_header int;
begin
select NVM(MAX(A.ID),0) as VAL into flag_id_header from TBL_FUNDING_HEADER A;
flag_id_header := flag_id_header + 1;
select flag_id_header, B.DATE_OF_TRANSACTION
from TBL_FUNDING_SOURCE B
;
end;
在Sql Server中,我可以很容易地做到这一点
declare @var1 int = 1;
select @var1, col1, col2, col3 from tbl_whatever
在将它们插入临时表之前,我需要选择此选项。
1条答案
按热度按时间at0kjp5o1#
不要使用
MAX
来查找序列中的下一个值;如果您有两个用户运行并发语句,则他们将获得相同的值,并且您将具有重复的条目。使用序列。
然后递增序列并插入:
我想我忘了提到,首先要插入
TBL_FUNDING_HEADER
以获得ID(它是INT PK AUTO INCREMENT
),然后我需要将用TBL_FUNDING_SOURCE
选择的ID作为FK插入到TBL_FUNDING
中Oracle不支持
AUTO_INCREMENT
;您需要使用GENERATED ALWAYS AS IDENTITY
。如果要插入到
IDENTITY
列中,然后在以后使用该列,请使用带有初始INSERT
的RETURNING
子句。fiddle