거의 도움이 필요하지 않습니다. 4 개의 열 이름과 2 개의 테이블 이름을 6 개의 커서 변수에 출력하는 동적 쿼리가 있습니다. 이제 커서 변수를 사용하여 처음 4 개 열을 선택한 다음 커서 변수를 사용하여 두 테이블 이름에서 데이터를 포함하므로 쿼리를 포함하는 변수를 사용하여 가져 오기를 통해 가져온 것으로 생각하지만 모름니다. 그것에 대해 어떻게 가야하는지. 여기 내가 지금 가지고있는 것만으로 커서 변수를 가져 와서 쿼리에 헴을 넣을 필요가 있습니다.oracle 동적 쿼리 SQL을 통해 커서 변수 가져 오기
DECLARE
arow VARCHAR2 (1000);
column1 VARCHAR2 (50);
column2 VARCHAR2 (50);
column3 VARCHAR2 (50);
column4 VARCHAR2 (50);
table1 VARCHAR2 (50);
table2 VARCHAR2 (50);
match VARCHAR2 (50);
match1 VARCHAR2 (50);
sql_statement VARCHAR2 (500);
BEGIN
FOR arow IN (SELECT column_name_old,
column_name_new,
column_name_old_2,
column_name_new_2,
table_name_old,
table_name_new
FROM A550003.META_DATA_TABLE)
LOOP
sql_statement :=
'INSERT'
|| ' '
|| 'INTO'
|| ' '
|| 'a550003.MATCH_TABLE'
|| ' '
|| 'SELECT '
|| arow.column_name_old
|| ', '
|| arow.column_name_new
|| ', '
|| 'DECODE('
|| arow.column_name_old
|| ', '
|| arow.column_name_new
|| ','
|| '1'
|| ','
|| '0)'
|| 'AS'
|| ' '
|| 'MATCH'
|| ','
|| arow.column_name_old_2
|| ', '
|| arow.column_name_new_2
|| ','
|| 'DECODE('
|| arow.column_name_old_2
|| ', '
|| arow.column_name_new_2
|| ','
|| '1'
|| ','
|| '0)'
|| 'AS'
|| ' '
|| 'MATCH1'
|| ' FROM '
||' '
|| arow.table_name_old
|| ', '
|| arow.table_name_new
|| ' WHERE '
|| arow.column_name_old
|| '='
|| arow.column_name_new
|| '(+)';
DBMS_OUTPUT.PUT_LINE (sql_statement);
EXECUTE IMMEDIATE sql_statement;
COMMIT;
END LOOP;
END;
야. 내 원래의 게시물 쿼리를 편집하고 그것이 옳다면 나는 안 먹었어. immediatly를 실행하여 누락 된 표현을 얻었습니다. curosor 값을 읽은 후에 어디로 가야하는지 확실하지 않습니다. – Anthony
1. 질문을 올리기 전에 코드를 포맷 해보십시오. 2. 커서를 사용하여 데이터를 가져온 후 쿼리를 작성합니다 (sql_statement 변수 설정). 3. select는 4 개의 열을 반환하므로 tab1_val과 tab2_val을'EXECUTE IMMEDIATE' 문의'INTO' 부분에 넣으면 안됩니다. 4. INTO를 사용하는 경우 select는 항상 하나의 레코드를 리턴해야합니다. 더 많은 결과가 기대된다면 BULK COLLECT INTO와 변수 인 collection을 사용해야합니다. – kpater87
위 코드가 컴파일되지만 아무 것도 실제로는 데이터 이동 색인에 실제로 삽입되지 않습니다. – Anthony