2017-01-05 1 views
0

에 값을 삽입하지 않습니다, 나는 오류 사항에 따라Netezza를 저장 프로 시저에서 즉시 실행 테이블 나는이 Netezza를 저장 프로 시저를 실행하고

를 찾을 수 없습니다

속성 'SOME_VALUE'을 얻고있다 요구 사항 하나의 테이블 (TABLE_A)에서 값을 가져와 다른 테이블 (TABLE_B)에 삽입해야합니다. 여기 아래

create or replace procedure my_proc() 
returns boolean 
execute as owner 
language NZPLSQL 
as 
BEGIN_PROC 
    declare rec RECORD ; 
BEGIN 
    for rec in SELECT * from TABLE_A loop 
    EXECUTE IMMEDIATE 
    'INSERT INTO TABLE_B(COLUMN_B) 
    values('||  rec.COLUMN_A_OFTABLE_A || ')'; 
END LOOP; 
END; 
END_PROC; 

execute my_proc() 

, 내가 문자열을 삽입 할 수 있어요 :

는 절차입니다. 하지만 위에서 언급 한 다른 테이블에 따라 다른 값을 삽입해야합니다. 당신이 실행이에 대한 IMMEDIATE EXECUTE하려고하는 캐릭터 라인을 구축 할 때

EXECUTE IMMEDIATE 'INSERT INTO TABLE_B(COLUMN_B) values(''Y'');'; 

답변

0

, 당신은 제대로 인용 모든 것을 가지고 조심해야합니다. 귀하의 경우 그것은 SOME_VALUE를 속성/열로 처리해야한다고 생각하고 있으며 그 이름을 가진 열은 사용할 수 없습니다.

quote_literal()에 열 참조를 래핑하면 열의 내용을 해석하고 올바르게 인용 부호로 이스케이프 처리합니다.

create or replace procedure my_proc() 
returns boolean 
execute as owner 
language NZPLSQL 
as 
BEGIN_PROC 
    declare rec RECORD ; 
BEGIN 
    for rec in SELECT * from TABLE_A loop 
    EXECUTE IMMEDIATE 
    'INSERT INTO TABLE_B(COLUMN_B) 
    values('|| quote_literal(rec.COLUMN_A_OFTABLE_A) || ')'; 
END LOOP; 
END; 
END_PROC; 

자세한 내용은 the documentation here에서 확인할 수 있습니다.

참고 :이 저장 프로 시저에서 구현하는 데 더 복잡한 논리가 있다고 가정합니다. 행별로 반복을 반복하면 삽입, 선택이 훨씬 느려지므로 훨씬 더 복잡합니다. 종종 크기의 순서로.

+0

답장을 보내 주셔서 감사합니다. 예, TABLE_A의 두 열을 비교하고 결과에 따라 TABLE_B에 데이터를 삽입해야합니다. – VivekT

+0

그 해결책이 효과가 있었습니까? 그렇다면 대답으로 표시하십시오. 그렇지 않다면 무엇이 잘못되었는지 알려주세요. – ScottMcG

관련 문제