powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / помогите с функцией
8 сообщений из 8, страница 1 из 1
помогите с функцией
    #34688808
prodider
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Помогите в такой ситуации. Есть две таблицы. Нужно продублировать два значения столбца с одной таблицы в другую. Структура таблиц.
Первая userdb
client_id integer NOT NULL,
client_name character varying(200) NOT NULL,
telnumber character varying(200),
client_address character varying(200)
Вторая condition_work
client_id integer NOT NULL,
client_name character varying(200),
price integer,
condition character varying(50),
day_delay character varying(50)
Хочу после инсерта в первую userdb поля client_id и client_name что б проинсертило эти же значения и в таблицу condition_work столбцы client_id и client_name.

Создаю триггер
CREATE TRIGGER insert_id_to_condition_work
AFTER INSERT
ON userdb
FOR EACH ROW
EXECUTE PROCEDURE insert_id_condition_work();

далее функцию.

CREATE OR REPLACE FUNCTION insert_id_condition_work()
RETURNS "trigger" AS
' BEGIN
Вот как тут правильно писать не знаю, предполагаю чет в ту сторону.
UPDATE condition_work SET client_id=new.client_id;

END; '
LANGUAGE 'plpgsql' VOLATILE;
ALTER FUNCTION insert_id_condition_work() OWNER TO postgres;

Подтолкните как правильно написать в теле функции. Спасибо.
...
Рейтинг: 0 / 0
помогите с функцией
    #34689085
Ми
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так, наверно...
INSERT INTO condition_work (client_id,client_name) VALUES (NEW.client_id,NEW.client_name);
return NEW;

Только client_name во второй таблице - не очень хорошая идея.
...
Рейтинг: 0 / 0
помогите с функцией
    #34689177
prodider
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
МиТак, наверно...
INSERT INTO condition_work (client_id,client_name) VALUES (NEW.client_id,NEW.client_name);
return NEW;

Только client_name во второй таблице - не очень хорошая идея.

Спасибо. Ща попробуемс. А почему не очень хорошая идея? На каком основании?(извините не спец)
...
Рейтинг: 0 / 0
помогите с функцией
    #34689236
prodider
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
prodider МиТак, наверно...
INSERT INTO condition_work (client_id,client_name) VALUES (NEW.client_id,NEW.client_name);
return NEW;

Только client_name во второй таблице - не очень хорошая идея.

Спасибо. Ща попробуемс. А почему не очень хорошая идея? На каком основании?(извините не спец)


Работает 100% с первого. Появился второй вопрос. По идее можно же сделать так что бы при удалении client_id и client_name c userdb удалялась СТРОКА с condition_work.

CREATE TRIGGER drop_id_to_condition_work
AFTER DELETE
ON userdb
FOR EACH ROW
EXECUTE PROCEDURE drop_id_condition_work();

CREATE OR REPLACE FUNCTION insert_id_condition_work()
RETURNS "trigger" AS
' BEGIN
DROP колонки FROM condition_work WHERE тут ЧТО?



END; '
LANGUAGE 'plpgsql' VOLATILE;
ALTER FUNCTION insert_id_condition_work() OWNER TO postgres;
...
Рейтинг: 0 / 0
помогите с функцией
    #34689246
prodider
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ПАРДОН за ОШИБКИ

Работает 100% с первого. Появился второй вопрос. По идее можно же сделать так что бы при удалении client_id и client_name c userdb удалялась СТРОКА с condition_work.

CREATE TRIGGER drop_id_to_condition_work
AFTER DELETE
ON userdb
FOR EACH ROW
EXECUTE PROCEDURE drop_id_condition_work();

CREATE OR REPLACE FUNCTION drop_id_condition_work()
RETURNS "trigger" AS
' BEGIN
DROP колонки FROM condition_work WHERE тут ЧТО?



END; '
LANGUAGE 'plpgsql' VOLATILE;
ALTER FUNCTION drop_id_condition_work() OWNER TO postgres;
...
Рейтинг: 0 / 0
помогите с функцией
    #34689816
Ми
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Наверно, это имелось в виду:
delete from condition_work where client_id =OLD.client_id;
return OLD;

Доп. инфо см. тут

А почему не очень хорошая идея?
Потому что одни и те же данные будут храниться в двух местах, что со временем неизбежно приведет к их рассогласованию.
...
Рейтинг: 0 / 0
помогите с функцией
    #34692356
prodider
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
МиНаверно, это имелось в виду:
delete from condition_work where client_id =OLD.client_id;
return OLD;

Доп. инфо см. тут

А почему не очень хорошая идея?
Потому что одни и те же данные будут храниться в двух местах, что со временем неизбежно приведет к их рассогласованию.

спасибо большое!
...
Рейтинг: 0 / 0
помогите с функцией
    #34692379
Фотография pamir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
prodider МиНаверно, это имелось в виду:
delete from condition_work where client_id =OLD.client_id;
return OLD;

Доп. инфо см. тут

А почему не очень хорошая идея?
Потому что одни и те же данные будут храниться в двух местах, что со временем неизбежно приведет к их рассогласованию.

спасибо большое!Не в качестве поучения, но для самообразования - почитайте что-нибуть про "нормализацию". И вопросы такие сами собой пропадут.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / помогите с функцией
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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