ХРАНИВШАЯСЯ ПРОЦЕДУРА постглинистый песчаник

мое сомнение - следующее. У меня есть следующая хранившаяся процедура, которую это считает конечной целью реализовывать ту же функцию, но для трех различных схем (внутри той же базы данных). Мой код - следующий:

FOR i IN 1..4
loop
cod = 0;
esquemaTabla = '';

if i=1 AND muni = 'municipalidad' THEN 
    cod=1; 
    esquemaTabla := 'municipalidad'; 
end if;

if i=2 AND edu = 'educacion' THEN 
    cod=2; 
    esquemaTabla := 'educacion'; 
end if;

if i=3 AND salud = 'salud' THEN 
    cod=3; 
    esquemaTabla := 'salud'; 
end if;

if i=4 AND cementer = 'cementerio' THEN 
    cod=4; 
    esquemaTabla := 'cementerio'; 
end if;

insert into esquemaTable.tabla....

END loop;

Проблема - следующая, введя переменную в компьютер esquemaTable, постглинистый песчаник я беру это себе как имя схемы "esquemaTable" и не из-за Вашей стоимости, которая была бы "муниципалитетом", "образованием" или "здоровьем".

1
задан 07.11.2019, 20:31
1 ответ

Это было бы ожидаемое поведение..., а следовательно я понимаю ты нуждаешься в стоимости dinГЎmico в esquemaTabla, поэтому должен выполнять эту консультацию insert into dinamicamente с execute и это осталось бы больше менее так:

FOR i IN 1..4
loop
cod = 0;
esquemaTabla = '';

if i=1 AND muni = 'municipalidad' THEN 
cod=1; 
esquemaTabla := 'municipalidad'; 
end if;

if i=2 AND edu = 'educacion' THEN 
cod=2; 
esquemaTabla := 'educacion'; 
end if;

if i=3 AND salud = 'salud' THEN 
cod=3; 
esquemaTabla := 'salud'; 
end if;

if i=4 AND cementer = 'cementerio' THEN 
cod=4; 
esquemaTabla := 'cementerio'; 
end if;

EXECUTE format('insert into  %I.tabla...',esquemaTable) ;

END loop;

Или иначе сделай insert into внутри каждого if и ты лишаешь себя темы динамического выполнения, если тебя осложняет очень

FOR i IN 1..4
loop
cod = 0;
esquemaTabla = '';

if i=1 AND muni = 'municipalidad' THEN 
cod=1; 
insert into municipalidad.tabla....;

end if;

if i=2 AND edu = 'educacion' THEN 
cod=2; 
insert into educacion.tabla....;
end if;

if i=3 AND salud = 'salud' THEN 
cod=3; 
insert into municipalidad.tabla....;
end if;

if i=4 AND cementer = 'cementerio' THEN 
cod=4; 
insert into cementerio.tabla....; 
end if;


END loop;
1
ответ дан 01.12.2019, 12:21