powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Тригерная функция никак..
6 сообщений из 6, страница 1 из 1
Тригерная функция никак..
    #35538343
endokrinolog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здрастье!
Имеем триггер BEFORE INSERT OR UPDATE на таблице comdeal (id_com int, id_deal int, quantity int)
возбуждает тригерную функцию commodities_check() :

CREATE OR REPLACE FUNCTION commodities_check()
RETURNS "trigger" AS
$$
declare
begin
raise notice '%', new.id_com;
return new;
end;
$$
LANGUAGE 'plpgsql';


осуществляем вставку: insert into comdeal values (1, 1, 2);
результат:
ERROR: record "new" is not assigned yet
ПОДРОБНО: The tuple structure of a not-yet-assigned record is indeterminate.
КОНТЕКСТ: PL/pgSQL function "commodities_check" line 3 at RAISE


паамаагите!!! :-)
...
Рейтинг: 0 / 0
Тригерная функция никак..
    #35538365
Quadrix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
автор
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
CREATE OR REPLACE FUNCTION commodities_check()
  RETURNS "trigger" AS
$$
declare
begin
  raise notice '%', new.id_com;
  return new;
end;
$$
  LANGUAGE 'plpgsql';


Может так?


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
CREATE OR REPLACE FUNCTION commodities_check() RETURNS trigger AS
$body$
begin
  raise notice '%', new.id_com;
  return new;
end;
$body$
LANGUAGE 'plpgsql';
...
Рейтинг: 0 / 0
Тригерная функция никак..
    #35538377
endokrinolog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
увы и ах...но нет...
такое чувство, что new воспринимается как незадекларированная переменная...
...
Рейтинг: 0 / 0
Тригерная функция никак..
    #35538431
Quadrix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ищите проблемы не в коде. Этот пример прекрасно работает: (Postgres 8.3.1)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
--DROP TABLE comdeal;
--DROP FUNCTION commodities_check();

CREATE TABLE comdeal( 
id_com INTEGER, 
id_deal INTEGER, 
quantity INTEGER);

CREATE FUNCTION commodities_check() RETURNS trigger AS
$body$
begin
  raise notice '%', new.id_com;
  return new;
end;
$body$
LANGUAGE 'plpgsql';

CREATE TRIGGER "B_IU_commodities_check" BEFORE INSERT OR UPDATE ON comdeal 
FOR EACH ROW EXECUTE PROCEDURE commodities_check();

INSERT INTO comdeal VALUES ( 1 ,  1 ,  2 );

Результат:
Код: plaintext
NOTICE:   1 
...
Рейтинг: 0 / 0
Тригерная функция никак..
    #35538434
Quadrix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сравните этот код со своим и, возможно, получите ответ на вопрос.
...
Рейтинг: 0 / 0
Тригерная функция никак..
    #35538491
endokrinolog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И вправду, Ваш код коррктно работает. В результате сравнения выяснилось, что загвоздка в описании самого тригера, а не его функции
у меня:
CREATE TRIGGER commodities_check
...
FOR EACH STATEMENT
...
Ваш вариант:
CREATE TRIGGER commodities_check
...
FOR EACH ROW
...
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Тригерная функция никак..
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]