Sql 在表A中插入数据并使用该数据插入表B时,是否需要在存储过程中进行多次提交

Sql 在表A中插入数据并使用该数据插入表B时,是否需要在存储过程中进行多次提交,sql,oracle,stored-procedures,commit,oracle12c,Sql,Oracle,Stored Procedures,Commit,Oracle12c,我有一个存储过程,在该存储过程中,我在表T1中插入数据。然后,根据表T1中插入的数据,我必须在表T2中插入数据(参见下面的代码)。我的问题是-我是否需要使用commit两次(在表T1中插入数据后,然后在表T2中插入数据后再次),或者我可以在最后使用它一次,在表T2中插入数据时,我将在该过程会话中加入插入表T1中的数据 CREATE OR REPLACE PROCEDURE FOO AS BEGIN INSERT INTO T1 (ID, NAME, PHONE) SELECT ID, NAM

我有一个存储过程,在该存储过程中,我在
表T1
中插入数据。然后,根据
表T1
中插入的数据,我必须在
表T2
中插入数据(参见下面的代码)。我的问题是-我是否需要使用
commit两次(在
表T1
中插入数据后,然后在
表T2
中插入数据后再次),或者我可以在最后使用它一次,在
表T2
中插入数据时,我将在该过程会话中加入插入
表T1
中的数据

CREATE OR REPLACE PROCEDURE FOO
AS
BEGIN

INSERT INTO T1 (ID, NAME, PHONE) 
SELECT ID,
NAME,
PHONE
FROM CUST;

COMMIT; --Do I really need to use this commit here?

INSERT INTO T2 (ID,NAME,CITY)
SELECT C.ID,
C.NAME,
C.CITY
FROM CUST C
JOIN T1 X
ON X.ID = C.ID

COMMIT;

END FOO;

不,你不必把那件事放在第一位。第二次提交完成了任务。

一般来说,您不应该将提交放在过程中,除非它是一个自治事务。In:“我坚信事务控制必须在调用程序级别的最顶层完成。”因此,在调用过程后提交所有提交。在此处了解事务: