큰 행렬의 데이터를 3 개의 열로 구성된 테이블로 조 변경하는 절차를 진행하고 있습니다. 테이블에 행을 동적으로 삽입하는 데 어려움이 있습니다. 나는 아래의 절차 블록을 실행하려고하면, 나는 오류 메세지를 지정하지 않고 얻을 :동적 INSERT는 프로 시저에서 실패하지만 정적 SQL로 작동합니다.
ORA-00936: missing expression
ORA-06512: at line 24
00936. 00000 - "missing expression"
절차는 내가 복사하고 정적 SQL을 실행할 수있는 유효한 INSERT 문을 생성합니다. 까지 실행하면 즉시 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 문의 예 :
insert into p100_stg1_site_measurement (
site_id,
col_name,
measurement
)
values (
'5715_C17orf85_S500_RPHS[+80]PEKAFSSNPVVR',
'tmnt_2',
.0288709682691077
)
환경 : 우분투 16.04 오라클 12C 커뮤니티 에디션에 SQL 개발자.
은 어디'채워 my_rec.measurement' 않습니다 즉? 만약 그것이 null이라면'values ('X', 'Y',) '와 같은 것을 포함하는 문장을 얻을 것이다. –