powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / 2 версии функции добавления данных
4 сообщений из 4, страница 1 из 1
2 версии функции добавления данных
    #39340028
mstdmstd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет,
есть 2 версии функции pd_update_product_comment для вставки/редактирования коментария

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
CREATE OR REPLACE FUNCTION public.pd_update_product_comment(p_id integer, p_product_id integer, p_parent_product_comment_id integer, p_comment_text text, p_approved_status type_approved_status, p_user_id integer, p_rating integer, p_created_at timestamp )
 RETURNS integer
 LANGUAGE plpgsql
AS $function$

  begin
    IF p_id <= 0 THEN

      INSERT INTO pd_product_comment ( product_id, parent_product_comment_id, comment_text, approved_status, user_id, rating, created_at )
        VALUES(  p_product_id, p_parent_product_comment_id, p_comment_text, p_approved_status, p_user_id, p_rating, p_created_at );
      RETURN lastval();

    ELSE

      UPDATE pd_product_comment set product_id= p_product_id, parent_product_comment_id= p_parent_product_comment_id, comment_text= p_comment_text, approved_status= p_approved_status, user_id= p_user_id, rating= p_rating
        where id= p_id;
      RETURN p_id;

    END IF;

  end
$function$



Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
CREATE OR REPLACE FUNCTION public.pd_update_product_comment(p_id integer, p_product_id integer, p_parent_product_comment_id integer, p_comment_text text, p_approved_status type_approved_status, p_user_id integer, p_rating integer)
 RETURNS integer
 LANGUAGE plpgsql
AS $function$

  begin
    IF p_id <= 0 THEN

      INSERT INTO pd_product_comment ( product_id, parent_product_comment_id, comment_text, approved_status, user_id, rating )
        VALUES(  p_product_id, p_parent_product_comment_id, p_comment_text, p_approved_status, p_user_id, p_rating );
      RETURN lastval();

    ELSE

      UPDATE pd_product_comment set product_id= p_product_id, parent_product_comment_id= p_parent_product_comment_id, comment_text= p_comment_text, approved_status= p_approved_status, user_id= p_user_id, rating= p_rating
        where id= p_id;
      RETURN p_id;

    END IF;

  end
$function$



Единственное различие, что первая функция имеет доп параметр p_created_at timestamp и эта функция вызавается при импорте из внешних данных, так как дату создания
надо сохранить. Если, например, в таблицу добавить новые поля - то и редактировать нужно обе функции, поэтому появляется идея в первой функции
не делать insert/update, а вызывать 2ю версию со вставкой, а в первой доп проапдейтить поле created - чтобы весь функционал был во 2й функции.

Как по-вашему лучше и что посоветуете?

Спасибо!
...
Рейтинг: 0 / 0
2 версии функции добавления данных
    #39341370
mstdmstd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Решил делать с дефолтовым null для параметра даты
и если он задан то апдейтить его после инсерта :

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
CREATE OR REPLACE FUNCTION public.pd_update_product_comment(p_id integer, p_product_id integer, p_parent_product_comment_id integer, p_comment_text text, p_approved_status type_approved_status, p_user_id integer, p_rating integer, p_created_at timestamp without time zone default null)
 RETURNS integer
 LANGUAGE plpgsql
AS $function$

  begin
    IF p_id <= 0 THEN

      INSERT INTO pd_product_comment ( product_id, parent_product_comment_id, comment_text, approved_status, user_id, rating )
        VALUES(  p_product_id, p_parent_product_comment_id, p_comment_text, p_approved_status, p_user_id, p_rating );

      p_id= lastval();

      IF (p_created_at IS NOT NULL ) THEN
        UPDATE pd_product_comment SET created_at= p_created_at
          where id= p_id;
      END IF;

    ELSE

      UPDATE pd_product_comment set product_id= p_product_id, parent_product_comment_id= p_parent_product_comment_id, comment_text= p_comment_text, approved_status= p_approved_status, user_id= p_user_id, rating= p_rating
        where id= p_id;

    END IF;

    RETURN p_id;
    
  end
$function$



Вроде нормально...
...
Рейтинг: 0 / 0
2 версии функции добавления данных
    #39341430
isdenno
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mstdmstd,

а чем не устраивает значение по умолчанию
alter table pd_product_comment alter column p_created_at set default now();
...
Рейтинг: 0 / 0
2 версии функции добавления данных
    #39341477
mstdmstd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как я писал выше надо дать возможность писать эту дату явно при импорте из внешних данных, так как дату создания
надо сохранить.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / 2 версии функции добавления данных
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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