Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / 2 версии функции добавления данных / 4 сообщений из 4, страница 1 из 1
02.11.2016, 14:53
    #39340028
mstdmstd
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
2 версии функции добавления данных
Всем привет,
есть 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
04.11.2016, 11:26
    #39341370
mstdmstd
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
2 версии функции добавления данных
Решил делать с дефолтовым 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
04.11.2016, 13:31
    #39341430
isdenno
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
2 версии функции добавления данных
mstdmstd,

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


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