大きな行列から3つの列で構成される表にデータを転置するプロシージャの作業中です。テーブルに行を動的に挿入するのが難しいです。私は、以下の手順でブロックを実行しようとすると、私はエラーメッセージを指定を取得します:動的INSERTプロシージャで失敗しますが、静的SQLとして機能します
ORA-00936: missing expression
ORA-06512: at line 24
00936. 00000 - "missing expression"
手順は、私は、静的SQLをコピーして実行することができ、有効なINSERT文を生成します。 までのすべてを実行するとすぐにstmntが正常に動作しています。さらに、私は完全に機能するほぼ同じ手順を持っています。両者の違いは1つだけです。現用バージョンでは、挿入される値はすべて「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文の例:
insert into p100_stg1_site_measurement (
site_id,
col_name,
measurement
)
values (
'5715_C17orf85_S500_RPHS[+80]PEKAFSSNPVVR',
'tmnt_2',
.0288709682691077
)
環境:Ubuntuの16.04 のOracle 12cのコミュニティ版の SQL開発。
をバインド変数を使用する必要がありますか?もしそれがnullなら、 'values( 'X'、 'Y'、) 'のような文を得るでしょう。 –