我正在處理一個過程,將數據從一個大矩陣轉置到一個由三列組成的表中。我在動態插入表格時遇到了一些困難。當我嘗試執行以下程序塊,我得到一個錯誤mesage:動態插入在過程失敗,但作爲靜態SQL
ORA-00936: missing expression
ORA-06512: at line 24
00936. 00000 - "missing expression"
程序產生一個有效的INSERT語句,我可以複製並執行靜態SQL。一切達到立即執行stmnt工作正常。此外,我有一個幾乎完全相同的過程。兩者之間只有一個區別。在工作版本中,所有插入的值都是「VARCHAR2」類型。我對如何繼續排除故障感到不知所措。
declare
type rec_type is record(
row_name varchar2(250),
measurement number(30,27)
);
my_rec rec_type;
type cols_type is table of varchar2(10);
cols cols_type;
stmnt varchar2(2000);
cur sys_refcursor;
begin
select colnames bulk collect into cols from p100_stg1_tmnt_meta;
for i in cols.first..cols.last loop
stmnt := 'select site_id, '|| cols(i) ||' from p100_stg1_site_matrix';
open cur for stmnt;
loop
fetch cur into my_rec;
exit when cur%notfound;
stmnt := 'insert into p100_stg1_site_measurement (site_id, col_name, measurement) values '||
'('''||my_rec.row_name ||''', '''||cols(i)||''', '||my_rec.measurement||')';
--dbms_output.put_line(stmnt);
execute immediate stmnt;
end loop;
end loop;
end;
/
通過上述方法產生的插入語句的一個例子:
insert into p100_stg1_site_measurement (
site_id,
col_name,
measurement
)
values (
'5715_C17orf85_S500_RPHS[+80]PEKAFSSNPVVR',
'tmnt_2',
.0288709682691077
)
環境: 在Ubuntu 16.04 甲骨文12C社區版SQL開發人員。
哪裏'my_rec.measurement'得到填充?如果它是空的,你會得到一個包含'values('X','Y',)''' –