Ничего не понимаю в синтаксисе ... (вопрос по функциям и триггерам)

sidewinder

Guest
Ничего не понимаю в синтаксисе ... (вопрос по функциям и триггерам)

Задача такая, Надо при обновлении даных некой таблицы вносить изменеия в другую таблицу,в строрку с именем таблицы в которой такие изменения провелись.

Для этого создаётся такая функция, которая должна стать триггером для таблицы, которой пока нет.
CREATE FUNCTION upd_test_tabl() RETURNS opaque AS' BEGIN
UPDATE tests SET valid = ''f'' WHERE table_r = TG_RELNAME;
RETURN NEW;
END;' LANGUAGE 'plpgsql';

Вот тут должна создаваться таблица и триггрер. Имя таблицы, передаётся как параметр ($3) функции.

CREATE FUNCTION cr_test(text, text, name,name, integer,integer) RETURNS boolean AS'
BEGIN
INSERT INTO "tests" (name_r, name_e,table_r,table_e,q_numbers,prep) VALUES ($1,$2,$3,$4,$5,$6);
CREATE TABLE "$3" (qid serial,target integer,qp varchar(64));
CREATE TRIGGER up_test AFTER INSERT OR UPDATE ON "$3" FOR EACH ROW EXECUTE PROCEDURE upd_test_tabl();
RETURN ''t'';
END;
' LANGUAGE 'plpgsql';

Так вот проблема в синтаксисе:
syntax error at or near "$1" at character 15
Что я непонимаю, $1 - совсем не 15-ый символ в строке, так где собственно ошибка?
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
где именно ошибка, я тоже не совсем понимаю. но сомневаюсь, что вот этот момент может нормально работать:

Автор оригинала: sidewinder
CREATE TABLE "$3" (qid serial,target integer,qp varchar(64));
CREATE TRIGGER up_test AFTER INSERT OR UPDATE ON "$3" FOR EACH ROW EXECUTE PROCEDURE upd_test_tabl();
RETURN ''t'';
рекомендую эти запросы выполнять через EXECUTE.
 

sidewinder

Guest
Sad Spirit
Не мог бы немного подробней. Я прочитал про эту самую EXECUTE и PREPARE, но не понял их сокровенного смысла, а главное практического.
По поводу строки с INSERT - пробовал вызять в кавычки параметры VALUES (''$1'',''$2'',''$3'',''$4'',''$5'',''$6'') - тогда ругается, что не правлильный формат для integer. Ещё попробую другие варианты с кавычками и ALIASами
 
Сверху