powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / dynamic plpgsql
13 сообщений из 13, страница 1 из 1
dynamic plpgsql
    #35219640
neomax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
люди подскажите пожалуйста как использывать динамический sql . не получается чего то совсем ((( . у меня есть ХП в ней тока делается execute sqltext.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
sqltext имеет следующий текст который передается с клинта :
                                                                  update premija.premija1  set
                                                                  procent = 0,
                                                                  dogana = '',
                                                                  summa = 0,
                                                                  s_u_n = 0
                                                        where p_date = '01.3.2008'  
                                                           and idkadry = 8222;  
                                                        if  not found then  
                                                           insert into premija.premija1 
                                                           (p_date,  idkadry,dogana,summa,s_u_n)  
                                                            values
                                                           ('01.3.2008', 8222, 0, '', 0, 0);
                                                           end if;

так вот при выполнении пишет ошибку (ERROR: syntax error at or near "if" у символа 132
)..
В процедуре указан язык plpgsql , притом если тот же скрипт прописываю жестко в процедуре то он выполняется нормально . Подскажите че нада делать . доку пытался понимать но никак )). с англическим не дружу .
...
Рейтинг: 0 / 0
dynamic plpgsql
    #35219738
Serik Akhmetov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
опять путаем sql и plpgsql.
В sql нет if.
...
Рейтинг: 0 / 0
dynamic plpgsql
    #35219746
neomax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ну так а причем тут sql у меня ж в функции указано что язык plpgsql .. как тогда реализовать мне это? понимаю что достаю но я видимо не врубаюсь пока что ((( .
...
Рейтинг: 0 / 0
dynamic plpgsql
    #35220062
SeniorAndre
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В EXECUTE нельзя запихивать код из pgSql, туда можно отправить токо Sql :). Тебе же написали..., а то что он внутри функции не заставит его работать по другому
...
Рейтинг: 0 / 0
dynamic plpgsql
    #35220093
neomax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
хорошо . нельзя .
А каким образом я могу выполнить запрос в функции , при том что бы этот текст запроса был как простой текст который я формирую на клиенте и передаю в функцию что бы он выполнился ?
...
Рейтинг: 0 / 0
dynamic plpgsql
    #35220123
SeniorAndre
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну написали же... вот это можно.....
Код: plaintext
1.
2.
3.
update 
premija.premija1  
set  procent =  0 ,  dogana = '', summa =  0 ,   s_u_n =  0   
where p_date = '01.3.2008' and idkadry =  8222 ;  
Далее пишешь еще один запрос на клиенте...., проверяшь был ли апдейт, а потом можешь отправить инсёрт....
IF ТЕБЕ ПРИДЁТСЯ НА КЛИЕНТЕ СДЕЛАТЬ!!!!!! и вссё разбить на отдельные запросы.
...
Рейтинг: 0 / 0
dynamic plpgsql
    #35220214
neomax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
Спасибо за подсказку. но чета не верится что нету другого метода что бы решить это дело . документацию на русском по динамическому sql в постгресе знает ктонибудь где можна скачать???
...
Рейтинг: 0 / 0
dynamic plpgsql
    #35220267
Dan Black
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
neomax
Код: plaintext
Спасибо за подсказку. но чета не верится что нету другого метода что бы решить это дело . документацию на русском по динамическому sql в постгресе знает ктонибудь где можна скачать???

Динамически создаёшь хп, передаешь её имя другой функции, которая её выполняет через динамический sql, потом динамическую функции удаляешь :)
З.Ы.
Правда, при таком подходе много подводных камней
...
Рейтинг: 0 / 0
dynamic plpgsql
    #35220281
ЯЕХХ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
не-совсем-но-не-до-конца-непохожее-на-анонимный-оракловый-блок-и-жутко-неэффективное сделать можно
Код: plaintext
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.
30.
31.
CREATE OR REPLACE FUNCTION pl(body text)
  RETURNS void AS
$BODY$
declare
  func_name text;
  has_begin boolean;
begin
  func_name := quote_ident('anon-' || now() || '-' || pg_backend_pid()) || '()';
  has_begin := body ~* $$^\s*(BEGIN|DECLARE)$$;
  
  execute 'create function ' || func_name || ' returns void language plpgsql '
    || 'as $anon_body$'
    || case when has_begin then '' else 'begin ' end
    || body
    || case when has_begin then ''
         else case when body ~* $r$;\s*$$r$ then '' else ' ;' end || ' end'
       end
    || '$anon_body$';
  execute 'select ' || func_name;
  execute 'drop function ' || func_name;
end;
$BODY$
  LANGUAGE 'plpgsql' VOLATILE;

------а использовать так
select pl($$
update foo set b=b+ 1  where a= 1 ;
if not found then
  insert into foo values ( 1 , 0 );
end if;
$$);
...
Рейтинг: 0 / 0
dynamic plpgsql
    #35220297
neomax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
та думал уже так сделать но каждый раз криатить функцию и дропать ее это помоему не красиво ). хотелось бы на подобии оракла обрабатывать динамический запрос (
...
Рейтинг: 0 / 0
dynamic plpgsql
    #35220328
Dan Black
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
neomaxта думал уже так сделать но каждый раз криатить функцию и дропать ее это помоему не красиво ). хотелось бы на подобии оракла обрабатывать динамический запрос (Лучше придумайте более простое решение. И поддерживать будет проще, и работать оно будет надежнее
...
Рейтинг: 0 / 0
dynamic plpgsql
    #35220338
neomax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dan Black neomaxта думал уже так сделать но каждый раз криатить функцию и дропать ее это помоему не красиво ). хотелось бы на подобии оракла обрабатывать динамический запрос (Лучше придумайте более простое решение. И поддерживать будет проще, и работать оно будет надежнее


ага придумайте ) . мазгов не хватает )))))
...
Рейтинг: 0 / 0
dynamic plpgsql
    #35220640
Serik Akhmetov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы пытаетесь сделать кальку со своей СУБД,
но тут вам не там !
:)
Либо пишите нормальную ХП, которая все делает сама,
либо, если очень хочется формировать запрос на клиенте, выполняйте его простыми запросами.
Зачем его засовывать в ХП ?
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / dynamic plpgsql
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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