powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / помогите с динамическим выполнением запроса
4 сообщений из 4, страница 1 из 1
помогите с динамическим выполнением запроса
    #33110639
AntonIgg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Господа, помогите с запросом.
надо создавать пользователя, причем имя юзера заранее не известно. Как я понял в таких случаях помогает динамическое выполнение - execute
нашел в хелпе пример и написал по нему
Код: plaintext
1.
2.
3.
4.
5.
...
PREPARE estCreateUser (text) AS
   CREATE USER $ 1  NOCREATEDB NOCREATEUSER;
EXECUTE estCreateUser ('username1');
...
Но оно не выполняется, подскажите, чайнику, где я не прав?
Заранее спасибо
...
Рейтинг: 0 / 0
помогите с динамическим выполнением запроса
    #33110790
фффф
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть две разные команды EXECUTE. Та что тебе нужна работает только в функциях на PL/pgSQL и не требует PREPARE.
Если же создание пользователя не оформлять функцией, то команду CREATE USER нужно собирать полностью на клиенте. Кроме того, PREPARE можно использовать только с DML-командами. Некоторые средства (например Zeos, старые версии DBD::Pg) не поддерживают серверный PREPARE, а формируют строку сами - в них такой параметризированный запрос пройдёт.
...
Рейтинг: 0 / 0
помогите с динамическим выполнением запроса
    #33110863
nig_AM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CREATE OR REPLACE FUNCTION "config"."createuser_sys" (aname char, apass char, acreateusers boolean, acreatedb boolean) RETURNS integer AS
$body$
/* Тело функции */
declare
apos integer;
alen integer;
atext text;
begin

--CREATE USER "the_test" ENCRYPTED PASSWORD '1' CREATEDB CREATEUSER;
atext = 'create user ';
atext = atext || aname || ' ENCRYPTED PASSWORD ';
atext = atext || chr(39) || apass || chr(39) || ' ';
if acreateusers = true then
atext = atext || ' CREATEUSER ';
end if;
if acreatedb = true then
atext = atext || ' CREATEDB ';
end if;

execute atext;
return 1;

end;
$body$
LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY DEFINER;

моя работает проверено........
только тут я не поставил обработку исключения если такоойюзер уже есть
поскольку я вызываю эту процедуру из другой в которой это уже выполняется.........
вот))
...
Рейтинг: 0 / 0
помогите с динамическим выполнением запроса
    #33111769
AntonIgg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, всё заработало!!!
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / помогите с динамическим выполнением запроса
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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