Гость
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Создание процедур в скрипте с транзакцией / 5 сообщений из 5, страница 1 из 1
03.04.2018, 10:43
    #39624526
ASukhov1986
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание процедур в скрипте с транзакцией
Здравствуйте! Я недавно стал изучать PostgreSql и у меня возникла проблема:
Есть следующий фрагмент скрипта создания объектов БД:
Код: 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.
BEGIN

CREATE FUNCTION "public"."DP_CREATE_SCHEMA_FUNC" (VARCHAR) RETURNS integer AS
$body$
BEGIN
  IF EXISTS(SELECT n."oid" FROM pg_namespace n WHERE n."nspname" = $1) THEN
    RETURN 0;
  ELSE
    EXECUTE 'CREATE SCHEMA "' || $1 || '"';
    RETURN 1;
  END IF;
END;
$body$
LANGUAGE 'plpgsql';<---У меня тут ошибка!!! В MS SQL Server это пишется так: EXECUTE('CREATE FUNCTION DP_CREATE_SCHEMA_FUNC ...'); 

RAISE 'Создание схемы ''METR'' базы данных';<----У меня тут ошибка!!! В MS SQL Server это пишется так: PRINT 'Создание схемы ''METR'' базы данных'; 
SELECT "public"."DP_CREATE_SCHEMA_FUNC"('METR');

DROP FUNCTION "public"."DP_CREATE_SCHEMA_FUNC"(varchar);
...

...

COMMIT;
EXCEPTION 
   WHEN others THEN
      ROLLBACK;
      RAISE;
END;



Вопрос:
Можно как то в PostgreSql в "транзакционном" ( присутствует BEGIN, COMMIT,ROLLBACK) скрипте создать функцию по аналогии с процедурой EXECUTE ('CREATE FUNCTION ...') MS SQL Server и вывести диагностическое сообщение по аналогии с командой PRINT 'сообщение' MS SQL Server.
...
Рейтинг: 0 / 0
03.04.2018, 11:30
    #39624604
Павел Лузанов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание процедур в скрипте с транзакцией
ASukhov1986,

Конкретно в этом случае код на plpgsql вообще не нужен:
Код: sql
1.
CREATE SCHEMA IF NOT EXISTS metr;



Что касается приведенного скрипта.
Функции это отдельные объекты в базе данных и создавать их внутри блока BEGIN ... END нельзя.
Для вывода сообщений используйте RAISE NOTICE, только почитайте про неё в документации как следует.
Впрочем почитать можно и про всё остальное.
...
Рейтинг: 0 / 0
03.04.2018, 11:36
    #39624610
ASukhov1986
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание процедур в скрипте с транзакцией
Павел Лузанов,
спасибо
...
Рейтинг: 0 / 0
03.04.2018, 13:27
    #39624757
qwwq
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание процедур в скрипте с транзакцией
Павел ЛузановASukhov1986,
<>

Функции это отдельные объекты в базе данных и создавать их внутри блока BEGIN ... END нельзя.
Для вывода сообщений используйте RAISE NOTICE, только почитайте про неё в документации как следует.
Впрочем почитать можно и про всё остальное.
1. можно. и в скл блоке. и в плпгскл блоке. и даже в pg_temp.

//видимо имелось в виду "не нужно" в подавляющем числе случаев

2. прелесть в том, что после Т-скл ТС не различает скл от плскл. и вероятно пробует выполнить свой скрипт как скл-батч то, что долж но быть анонимным блоком. а в СКЛ "райз нотис" не работает.

если это конечно вообще не 3-й случай -- не помню, как зовутся клиентские скрипты пжодмина.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
begin; --sql block
	drop function if exists pg_temp.try();
	do $xxx$
	begin --plpgsql "block"

		CREATE function pg_temp.try() returns text  AS 
		'begin RAISE NOTICE ''hello word''; RETURN text''Ok''; END;' language plpgsql;
		raise notice 'in plpgsql: %' ,  pg_temp.try();
	end;--"block"
	$xxx$;


	SELECT  pg_temp.try();
rollback;--sql block
--SELECT  pg_temp.try(); --ERROR:  function pg_temp.try() does not exist

...
Рейтинг: 0 / 0
03.04.2018, 14:21
    #39624835
Павел Лузанов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание процедур в скрипте с транзакцией
qwwqПавел Лузанов...
Функции это отдельные объекты в базе данных и создавать их внутри блока BEGIN ... END нельзя.
...

1. можно. и в скл блоке. и в плпгскл блоке. и даже в pg_temp.

Торможу, конечно можно. Оракловое прошлое не оставляет.
Спасибо за поправку, и остальное всё по делу.
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Создание процедур в скрипте с транзакцией / 5 сообщений из 5, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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