특정 스키마 이름을 반복하고 테이블에 데이터를 삽입하는 함수가 있습니다. 삽입 루프가 발생하기 전에 상기 테이블을자를 수 있어야합니다. 동적 쿼리 안에 truncate 문을 넣으려고했는데 그 결과 테이블의 내부에 스키마 데이터 만 보관할 수있었습니다. 나도 자신의 변수로 선언 한 다음 루핑 문과 별도로 명령문을 실행 해 보았습니다.하지만 결과는 동일합니다.하나의 함수 안에 루핑 변수가있는 동적 SQL 전에 테이블 잘림
제 질문은 - 정확히이 함수 내에 truncate table dwh.prod_table_notify
문을 넣을 수 있습니까? 따라서이 함수를 실행할 때마다 테이블이 잘리고 이후 삽입은 FOR
문에서 반환되는 각 스키마를 통해 적절하게 반복됩니다.
참고 : 나는 포스트 그레스
CREATE OR REPLACE FUNCTION dwh.dim_table_notification()
RETURNS void
LANGUAGE plpgsql
AS $function$
Declare
myschema varchar;
sql2 text;
Begin
for myschema in
select distinct table_schema
from information_schema.tables
where table_name in ('dim_loan_type', 'dim_acct_type')
and table_schema NOT LIKE 'pg_%'
and table_schema NOT IN ('information_schema', 'ad_delivery', 'dwh', 'users', 'wand', 'ttd')
order by table_schema
loop
sql2 ='insert into dwh.prod_table_notify
select '''|| myschema ||''' as userid, loan_type_id as acct_type_id, loan_type::varchar(10) as acct_type, loan_type_desc::varchar(50) as acct_type_desc, term_code, 1 as loan_type from '|| myschema || '.' ||'dim_loan_type where term_code is null
union
select '''|| myschema ||''' as userid, acct_type_id, acct_type::varchar(10), acct_type_desc::varchar(50), term_code, 0 as loan_type from '|| myschema || '.' ||'dim_acct_type where term_code is null';
execute sql2;
end loop;
END;
$function$
내가 뭔가를 잃어 버렸다고 생각합니다. 왜 루프 앞에 먼저 자르지 않습니까? – Dmitri
@Dmitri 작동하지 못했습니다. 어디로 넣을까요? – precose
첫 번째 진술 :'BEGIN' 다음에'for myschema in' 앞에. 이제부터 살펴 보았습니다. 거기에 함수 선언이 두 번 있습니다. 단지 복사/붙여 넣기 오류입니까? – Dmitri