【发布时间】:2017-03-29 08:08:37
【问题描述】:
我编写了一个将数据从一个表插入到另一个表的过程。数据量巨大——总共有 1.06 亿行。所以我想在查询上设置一个提交间隔。
我发现这个脚本通常可以正常工作并且不需要时间来完成工作,但我不知道为什么会出现错误
INSERT INTO dlc_pr_activity_remise
VALUES (add all values using ga_array(i).<value in select>)
错误:
错误(51,1):PL/SQL:SQL 语句被忽略
错误(51,47):PL/SQL:ORA-00917:缺少逗号
我的程序:
create or replace
PROCEDURE ACTIVITY1 AS
BEGIN
DECLARE
commit_interval pls_integer := 250000 ;
uncommitted pls_integer := 0;
fetch_size pls_integer := 2500 ;
cursor g1 is SELECT prr.EVT_DECLENCHEUR ,
prr.BQ_CDF ,
prr.BQ_DOM ,
prr.NUM_COMMERCANT ,
prr.TYPE_CONTRAT_COM ,
prr.COMMERCANT_SIRET ,
prr.TYPE_PRE_COMP ,
prr.BQ_CDF_ID_EBF ,
prr.BQ_DOM_ID_EBF ,
prr.DAT_TRAITEMENT ,
prr.EVT_TYPE_OPERATION ,
prr.DEV_MT_CRE ,
prr.NBR_DECI_MT_CRE ,
prr.REF_FICHIER_TRAITE ,
prr.NUM_CTC ,
prr.REF_FICHIER_ORIGINE ,
prr.ORIGINE_FLUX ,
prr.NUM_EST_REMISE ,
prr.NUM_REMISE_ORIGINE ,
prr.NUM_MACHINE ,
prr.REF_ARCHIVAGE_REM ,
prr.DAT_REMISE ,
prr.SUPPORT_REMISE ,
prr.DAT_REMISE_CALCULEE ,
prr.DAT_VALEUR_REMISE ,
prr.COD_APPLI ,
to_date(SYSDATE,'DD/MM/YYYY')
FROM dlc_pr_remise prr
WHERE NOT EXISTS
(SELECT *
FROM DLC_PR_ACTIVITY_REMISE prao
WHERE prao.num_est_remise = prr.num_est_remise
);
TYPE GL_T is table of gl%rowtype ;
gl_array GL_T;
begin
open gl ;
loop
fetch gl
bulk collect
into gl_array
limit fetch_size ;
forall i in 1 .. gl_arary.count
INSERT INTO dlc_pr_activity_remise values(add all values using ga_array(i).<value in select>)
uncommitted :+ uncommitted + sql%rowcount ;
exit when gl_arary.count < fetch_size ;
if uncommitted >= commit_interval
then
commit ;
uncommitted := 0;
end if ;
end loop ;
commit ;
close gl;
END ;
END ACTIVITY1;
【问题讨论】:
-
您获得了满足您的要求所需的一切。如果你遇到一些问题,你为什么不试一试然后上来。执行@codemonkey 的建议,然后在遇到任何问题时发布问题
-
是的,我正在尝试这样做我只有一个错误:INSERT INTO dlc_pr_activity_remise 值(使用 ga_array(i) 添加所有值。)
-
它说语句被忽略并且缺少逗号我不知道为什么对我来说所有的 semms 都是好的
-
你能编辑你的问题并把你试过的代码和你得到的错误。
-
@XING 你知道什么会导致这个吗,因为对我来说它应该可以工作!!
标签: sql stored-procedures plsql oracle-sqldeveloper plsqldeveloper