簡體   English   中英

ORA-00917: PLSQL 中缺少逗號

[英]ORA-00917: Missing Comma in PLSQL

我編寫了一個 PL SQL 腳本來將存儲在數組中的值添加到臨時表中。 我已經使用立即執行在循環內執行插入查詢。

我已經檢查了單引號的數量和逗號的數量,它們被關閉了。 盡管如此,我還是收到了錯誤代碼

ORA-00917: 缺少逗號。

declare
   type post_CODS IS VARRAY(34) OF VARCHAR2(20); 
   type locality_ID IS VARRAY(34) OF NUMBER(9); 
   pc post_CODS; 
   Y varchar2(1);
   lid locality_ID; 
   total integer;
begin
   Y := 'Y'; 
   lid := locality_ID(2380,3785,8710,17895,20345,24630,26814,28525,29130,31025,31265,32445,36940,40590,54290,83775,83780,83785,83790,83795,88483,93480,94560,96670,1000524,1000628,1000738,1000857,1000988,1001103,1001466,1001575,1001707,1001744);
   pc := post_CODS(2822,2739,2822,2372,2817,4314,4300,4726,4300,4884,4314,4314,4300,5719,3026,4314,4314,4314,4314,4314,873,2582,2817,4314,5723,5440,2083,2575,873,2372,5440,5440,5715,5440);
   total := lid.count;
   FOR i in 1 .. total LOOP 
      execute immediate 'insert into tmp_ref_lc_pc_cods values('||lid(i)||','||pc(i)||','||Y||',89987,'||sysdate||')';  
   END LOOP; 
END;

這是我得到的錯誤

錯誤報告:

ORA-00917:缺少逗號 ORA-06512:在第 14 行 00917. 00000 - “缺少逗號”

我正在使用 oracle 機器。

將您的insert語句包裹在q'[]'並嘗試

execute immediate q'[insert into tmp_ref_lc_pc_cods values('||lid(i)||','||pc(i)||','||Y||',89987,'||sysdate||')]';  

更新

建議使用bind variable 你可以試試下面的。 它正在為我工​​作並插入數據。

declare
   type post_CODS IS VARRAY(34) OF NUMBER(20); 
   type locality_ID IS VARRAY(34) OF NUMBER(9); 
   pc post_CODS; 
   Y varchar2(1);
   lid locality_ID; 
   total integer;
begin
   Y := 'Y'; 
   lid := locality_ID(2380,3785,8710,17895,20345,24630,26814,28525,29130,31025,31265,32445,36940,40590,54290,83775,83780,83785,83790,83795,88483,93480,94560,96670,1000524,1000628,1000738,1000857,1000988,1001103,1001466,1001575,1001707,1001744);
   pc := post_CODS(2822,2739,2822,2372,2817,4314,4300,4726,4300,4884,4314,4314,4300,5719,3026,4314,4314,4314,4314,4314,873,2582,2817,4314,5723,5440,2083,2575,873,2372,5440,5440,5715,5440);
   total := lid.count;
   FOR i in 1 .. total LOOP 
      execute immediate q'[insert into tmp_ref_lc_pc_cods values(:var1,:var2,'Y',89987,sysdate)]' using lid(i),pc(i);  
   END LOOP; 
END;

嘗試立即執行時的一個好技巧是確保創建的語句格式正確,打印您編寫的代碼會顯示 Y 不在撇號內

insert into tmp_ref_lc_pc_cods values(2380,2822,Y,89987,23-APR-19)

因此,在動態創建代碼時,請確保創建的所有字符串都具有正確數量的撇號。

dbms_output.put_line('insert into tmp_ref_lc_pc_cods values('||lid(i)||','||pc(i)||','''||Y||''',89987,'||sysdate||')');

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM