powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / for in execute ?
25 сообщений из 25, страница 1 из 1
for in execute ?
    #34261248
IgoX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
есть простенькая функция
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
declare
 out text;
 dst_phone alias for $ 1 ;
 sql text;
 int_ab text;
begin
 out:='';
 sql:='select distinct int_abonent from ok where dst_phone=\''||dst_phone||'\'';
 FOR int_ab IN EXECUTE sql LOOP
  out:=out||int_ab||'-';
 END LOOP;
 return out;
end;
при вызове select pos_int_ab('78635467073'); выдается ошибка , что за .. непойму.
SQL error:
ERROR: missing ".." at end of SQL expression
CONTEXT: compile of PL/pgSQL function "pos_int_ab" near line 9
...
Рейтинг: 0 / 0
for in execute ?
    #34261592
st_serg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
проверьте работает ли у вас \' так как выдумаете :)
...
Рейтинг: 0 / 0
for in execute ?
    #34262052
IgoX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
даже так не хочет, ошибка та же
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
declare
 out text;
 dst_phone alias for $ 1 ;
 sql text;
 int_ab integer;
begin
 out:='';
 --sql:='select distinct int_abonent from ok where dst_phone=''||dst_phone||'\'';
 FOR int_ab IN select distinct int_abonent from ok where dst_phone='5555555' LOOP
  out:=out||int_ab||'-'; --error
 END LOOP;
 return out;
end;
...
Рейтинг: 0 / 0
for in execute ?
    #34262066
Serik Akhmetov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какая версия PostgreSQL ?
просто
Код: plaintext
execute $sql$select distinct int_abonent from ok where dst_phone=$q$ 5555555 $q$ $sql$
работает ?
...
Рейтинг: 0 / 0
for in execute ?
    #34262126
IgoX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[root@tank scripts]# psql -U igo ats
Welcome to psql 7.4.3, the PostgreSQL interactive terminal.

а Ваша строка чтото мне непонятно, она ругается на сивол $
...
Рейтинг: 0 / 0
for in execute ?
    #34262158
st_serg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
покажите полный ddl для создания функции
...
Рейтинг: 0 / 0
for in execute ?
    #34262180
IgoX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
CREATE FUNCTION pos_int_ab(character varying) RETURNS text
    AS '
declare
 out text;
 --dst_phone alias for $1;
 sql text;
 int_ab integer;
begin
 out:='''';
 --sql:=''select distinct int_abonent from ok where dst_phone=''''||dst_phone||''\\'''';
 FOR int_ab IN select dst_phone from ok where dst_phone=''5555555'' LOOP
  out:=out||int_ab||''-''; 
 END LOOP;
 return out;
end;
...
Рейтинг: 0 / 0
for in execute ?
    #34262184
IgoX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
'
    LANGUAGE plpgsql;
...
Рейтинг: 0 / 0
for in execute ?
    #34262188
IgoX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
for in execute ?
    #34262191
IgoX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
CREATE FUNCTION pos_int_ab(character varying) RETURNS text
    AS '
declare
 out text;
 --dst_phone alias for $1;
 sql text;
 int_ab integer;
begin
 out:='''';
 --sql:=''select distinct int_abonent from ok where dst_phone=''''||dst_phone||''\\'''';
 FOR int_ab IN select dst_phone from ok where dst_phone=''5555555'' LOOP
  out:=out||int_ab||''-''; 
 END LOOP;
 return out;
end;
'
    LANGUAGE plpgsql;
...
Рейтинг: 0 / 0
for in execute ?
    #34262223
IgoX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в инете всё что надыбал
http://archives.postgresql.org/pgsql-es-ayuda/2004-05/msg00172.php но на каком там языке
...
Рейтинг: 0 / 0
for in execute ?
    #34262248
4321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IgoX
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
CREATE FUNCTION pos_int_ab(character varying) RETURNS text
    AS '
declare
 out text;
 dst_phone alias for $1;
 sql text;
 int_ab integer;
begin
 out:=\'\';
 sql:=\'select distinct int_abonent from ok where dst_phone=\'\'\'||dst_phone||\'\'\';\';
 FOR int_ab IN select dst_phone from ok where dst_phone=\'5555555\' LOOP
  out:=out||int_ab||\'-\'; 
 END LOOP;
 return out;
end;
'
    LANGUAGE plpgsql;

если не соврал с дублированием \' - для внутренности строки.

ЗЫ: будет, думается, ошибацца, при наличии апосторфов в dst_phone.
...
Рейтинг: 0 / 0
for in execute ?
    #34262373
ZemA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
CREATE FUNCTION pos_int_ab(character varying) RETURNS text
    AS '
declare
 out text;
 dst_phone alias for $1;
 sql text;
 int_ab record;
begin
 out:='''';
 sql:=''select distinct int_abonent from ok where dst_phone='' || quote_literal(dst_phone) ;
 FOR int_ab IN EXECUTE sql LOOP
  out:=out||int_ab.int_abonent||''-''; 
 END LOOP;
 return out;
end;
'
    LANGUAGE plpgsql;
...
Рейтинг: 0 / 0
for in execute ?
    #34262481
IgoX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
схожу с ума
сделал уже вот так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
declare
 out text;
 dst_phone alias for $ 1 ;
 sql text;
 int_ab integer;
begin
 out:='';
 FOR int_ab IN select distinct int_abonent from ok LOOP
  out:=out||int_ab||'-'; 
 END LOOP;
 return out;
end;
...
Рейтинг: 0 / 0
for in execute ?
    #34262587
СергейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
A vot pravilnyy variant:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
CREATE FUNCTION pos_int_ab(character varying) RETURNS text
    AS '
declare
 out text;
 --dst_phone alias for $1;
 sql text;
 int_ab integer;
begin
 out:='''';
 sql:=''select distinct int_abonent from ok where dst_phone=''''''||dst_phone||'''''''''''';
 FOR int_ab IN select dst_phone from ok where dst_phone=''5555555'' LOOP
  out:=out||int_ab||''-''; 
 END LOOP;
 return out;
end;
'
    LANGUAGE plpgsql;
...
Рейтинг: 0 / 0
for in execute ?
    #34262603
СергейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Tolko ia estestvenno zabyl raskommentit' etu strochku: ... :)
СергейК
Код: plaintext
1.
 --dst_phone alias for $1;
...
Рейтинг: 0 / 0
for in execute ?
    #34262685
IgoX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
тоже самое, непойму, что ознаают ..(две точки в ошибке)
...
Рейтинг: 0 / 0
for in execute ?
    #34262717
СергейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
IgoXтоже самое, непойму, что ознаают ..(две точки в ошибке)

Ia prosto zaputalsia v raznyh versiah vashei pl/pgsql'ki.
vot okonchatelno:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
CREATE or replace FUNCTION pos_int_ab(character varying) RETURNS text
    AS '
declare
 out text;
 dst_phone alias for $1;
 sql text;
 int_ab integer;
begin
 out:='''';
 sql:=''select distinct int_abonent from ok where dst_phone=''''''||dst_phone||'''''''';
 FOR int_ab IN EXECUTE sql LOOP
  out:=out||int_ab||''-''; 
 END LOOP;
 return out;
end;
'
    LANGUAGE plpgsql;
...
Рейтинг: 0 / 0
for in execute ?
    #34262733
4321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СергейК vot okonchatelno:см. от ZemA (с учетом возможности апострофа в параметре)
...
Рейтинг: 0 / 0
for in execute ?
    #34262742
СергейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
4321 СергейК vot okonchatelno:см. от ZemA (с учетом возможности апострофа в параметре)
Da, Vy i ZemA pravy, ia kak-to progliadel tot otvet, tak kak avtor thread'a na nego ne proreagiroval.
...
Рейтинг: 0 / 0
for in execute ?
    #34262804
Jelis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дааа... в 7.х жутковато было кавычки удваивать(*4, *8, ...) - пока разберешся, глаза поломаеш :-(
На 8ку хотя бы тока из-за этого переползать стоит! :-)
...
Рейтинг: 0 / 0
for in execute ?
    #34263090
IgoX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
как мне кажется ошибка вовсе не в ковычках.я убрал все ковычки и упростил до максимума , но всеравно ошибка та же, может я использую какие нибудь ключевые слова?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
declare
 out text;
 sql text;
 int_ab integer;
begin
 FOR int_ab IN select distinct int_abonent from ok LOOP 
 END LOOP;
 return out;
end;
...
Рейтинг: 0 / 0
for in execute ?
    #34263112
ZemA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IgoXкак мне кажется ошибка вовсе не в ковычках.я убрал все ковычки и упростил до максимума , но всеравно ошибка та же, может я использую какие нибудь ключевые слова?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
declare
 out text;
 sql text;
 int_ab integer;
begin
 FOR int_ab IN select distinct int_abonent from ok LOOP 
 END LOOP;
 return out;
end;

ошибка в том что переменная int_ab должна быть типа record.
разве функция которую я привел здесь не работает?
...
Рейтинг: 0 / 0
for in execute ?
    #34263470
IgoX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вы были совершенно правы, я просто увидел только literal и подставил только его а record не заметил. сейчас всё работает, но как то странно почему именно record почему нельзя integer?
...
Рейтинг: 0 / 0
for in execute ?
    #34264112
ZemA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IgoXвы были совершенно правы, я просто увидел только literal и подставил только его а record не заметил. сейчас всё работает, но как то странно почему именно record почему нельзя integer?
почему, почему. потому!
подробнее здесь
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / for in execute ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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