我在 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
在將它們插入臨時表之前,我需要此選擇。
uj5u.com熱心網友回復:
不要MAX用于查找序列中的下一個值;如果您有兩個用戶運行并發陳述句,那么他們將獲得相同的值,并且您將有重復的條目。
使用序列。
CREATE SEQUENCE flag_id_header__seq;
然后增加序列并插入:
DECLARE
v_id YOUR_TEMP_TABLE.COLUMN1%TYPE;
BEGIN
-- Set the variable to the next sequence value.
v_id := flag_id_header__seq.NEXTVAL;
-- Use the sequence value in the insert.
INSERT INTO your_temp_table (column1, column2)
SELECT v_id,
DATE_OF_TRANSACTION
FROM TBL_FUNDING_SOURCE;
END;
/
我想我忘了提到
TBL_FUNDING_HEADER要先插入以獲得ID(它是INT PK AUTO INCREMENT),然后我需要將選擇的IDTBL_FUNDING_SOURCE插入TBL_FUNDING為FK
甲骨文不支持AUTO_INCREMENT;你需要使用GENERATED ALWAYS AS IDENTITY.
如果您想插入一IDENTITY列,然后再使用它,請使用RETURNING帶有初始 . 的子句INSERT。
DECLARE
v_id TBL_FUNDING_HEADER.ID%TYPE;
BEGIN
INSERT INTO TBL_FUNDING_HEADER (column1)
VALUES ('something')
RETURNING id INTO v_id;
-- Then use the returned identity value in the insert.
INSERT INTO your_temp_table (column1, column2)
SELECT v_id,
DATE_OF_TRANSACTION
FROM TBL_FUNDING_SOURCE;
END;
/
小提琴
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/522713.html
標籤:sql甲骨文plsql
