powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Создание процедур в скрипте с транзакцией
5 сообщений из 5, страница 1 из 1
Создание процедур в скрипте с транзакцией
    #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
Создание процедур в скрипте с транзакцией
    #39624604
Павел Лузанов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASukhov1986,

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



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

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

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


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