Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как получить ResultSet из функции PostGreSql? / 20 сообщений из 20, страница 1 из 1
29.07.2005, 12:48
    #33191456
NilovSerge
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить ResultSet из функции PostGreSql?
Всем, привет!
Подскажите, пожалуйста. Как получить ResultSet из функции PostGreSql8.0.3(Windows) и
как должна выглядить эта PostGreSql-функция?
И как с ней работать на клиенте(в данном случае PHP)?
Если можно ссылку на пример.
С уважением
Нилов Сергей <nilov@vikoil.dn.ua>;
...
Рейтинг: 0 / 0
29.07.2005, 13:46
    #33191642
4321
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить ResultSet из функции PostGreSql?
этот форум "неплохо оснащен"
в т.ч. тут есть поиск

Пример
http://195.128.121.254/forum/actualtopics.aspx?search=SETOF&submit=%CD%E0%E9%F2%E8&bid=7
...
Рейтинг: 0 / 0
02.08.2005, 13:42
    #33196484
GreyVS
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить ResultSet из функции PostGreSql?
4321этот форум "неплохо оснащен"
в т.ч. тут есть поиск

Пример
http://195.128.121.254/forum/actualtopics.aspx?search=SETOF&submit=%CD%E0%E9%F2%E8&bid=7
Pilot
Код: plaintext
1.
2.
3.
4.
5.
CREATE FUNCTION getMyTable()
  RETURNS SETOF mytable AS
$BODY$
    SELECT * FROM mytable;
$BODY$
  LANGUAGE 'sql' VOLATILE;


Делаю свою функцию так же и получаю в ответ после вызова:
ERROR: query-specified return row and actual function return row do not match
7.4 версия сервера, что не так?
...
Рейтинг: 0 / 0
02.08.2005, 15:06
    #33196861
4321
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить ResultSet из функции PostGreSql?
фсе что угодно, например другой язык ф-ии
LANGUAGE 'sql' VOLATILE;

для других языков - другой способ ретёрна сета.
приведите СВОЮ ф-ю и свой же вызов с ошибкой.
...
Рейтинг: 0 / 0
02.08.2005, 16:28
    #33197225
GreyVS
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить ResultSet из функции PostGreSql?
4321фсе что угодно, например другой язык ф-ии
LANGUAGE 'sql' VOLATILE;

для других языков - другой способ ретёрна сета.
приведите СВОЮ ф-ю и свой же вызов с ошибкой.
так создаю в EMS PostgreSQL Managr:
CREATE OR REPLACE FUNCTION getclients()
RETURNS SETOF clients AS
SELECT * FROM clients;
LANGUAGE SQL;
так получается сама функция:
CREATE OR REPLACE FUNCTION "public"."getclients" () RETURNS SETOF "public"."clients" AS
SELECT * FROM clients;
LANGUAGE 'sql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;

так вызываю:
SELECT * FROM getclients();

вот ответ:
ERROR: query-specified return row and actual function return row do not match

язык подключён в базе один, plpgsql
...
Рейтинг: 0 / 0
02.08.2005, 16:53
    #33197321
4321
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить ResultSet из функции PostGreSql?
Вы ничего не пропустили?

CREATE OR REPLACE FUNCTION getclients()
RETURNS SETOF clients AS '
SELECT * FROM clients; '
LANGUAGE SQL;
...
Рейтинг: 0 / 0
02.08.2005, 16:56
    #33197345
GreyVS
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить ResultSet из функции PostGreSql?
4321Вы ничего не пропустили?

CREATE OR REPLACE FUNCTION getclients()
RETURNS SETOF clients AS '
SELECT * FROM clients; '
LANGUAGE SQL;
ну это само собой.... просто специально не напечатал.... Вы по существу можете что-то сказать? уже давно бьюсь... всю доку перерыл.... и всё на месте топчусь... :(
...
Рейтинг: 0 / 0
02.08.2005, 17:13
    #33197406
LeXa NalBat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить ResultSet из функции PostGreSql?
# create table mytable ( id integer, name text );
CREATE TABLE
# create function getMyTable() returns setof mytable as 'select * from mytable;' language 'sql';
CREATE FUNCTION
# insert into mytable values ( 1, 'lexa' );
INSERT 21359156 1
# select * from getMyTable();
id | name
----+------
1 | lexa
(1 row)

# alter table mytable drop column name;
ALTER TABLE
# select * from getMyTable();
ERROR: Query-specified return tuple and actual function return tuple do not match
...
Рейтинг: 0 / 0
02.08.2005, 17:25
    #33197437
GreyVS
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить ResultSet из функции PostGreSql?
LeXa NalBat# create table mytable ( id integer, name text );
CREATE TABLE
# create function getMyTable() returns setof mytable as 'select * from mytable;' language 'sql';
CREATE FUNCTION
# insert into mytable values ( 1, 'lexa' );
INSERT 21359156 1
# select * from getMyTable();
id | name
----+------
1 | lexa
(1 row)

# alter table mytable drop column name;
ALTER TABLE
# select * from getMyTable();
ERROR: Query-specified return tuple and actual function return tuple do not match

Я создаю свою функцию в тот момент, когда таблица уже есть и несколько записей в ней лежат... Честно говоря, я не совсем понял смысл Вашего поста... а в документации я уже читал как надо поступать, только эффекта ноль... :(
...
Рейтинг: 0 / 0
02.08.2005, 17:25
    #33197438
4321
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить ResultSet из функции PostGreSql?
Спасиб 2 ЛНБ, - вспомнил
- проскакивало уже - необходимо пересоздать ф-ю после переопределения таблицы - сменился тип
...
Рейтинг: 0 / 0
02.08.2005, 17:37
    #33197495
LeXa NalBat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить ResultSet из функции PostGreSql?
GreyVSЯ создаю свою функцию в тот момент, когда таблица уже есть и несколько записей в ней лежат...То есть например так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
# create table mytable ( id integer, name text );
CREATE TABLE
# insert into mytable values (  1 , 'lexa' );
INSERT  21359162   1 
# alter table mytable drop column name;
ALTER TABLE
# insert into mytable values (  2  );
INSERT  21359164   1 
# create function getMyTable() returns setof mytable as 'select * from mytable;' language 'sql';
CREATE FUNCTION
# select * from getMyTable();
ERROR:  Query-specified return tuple and actual function return tuple do not match

4321необходимо пересоздать ф-ю после переопределения таблицыпереопределение таблицы - это drop/create

GreyVSЧестно говоря, я не совсем понял смысл Вашего поста... а в документации я уже читал как надо поступать, только эффекта ноль... :(Наверное надо делать drop/create table. :(
...
Рейтинг: 0 / 0
02.08.2005, 17:38
    #33197496
GreyVS
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить ResultSet из функции PostGreSql?
4321Спасиб 2 ЛНБ, - вспомнил
- проскакивало уже - необходимо пересоздать ф-ю после переопределения таблицы - сменился тип
Да нет в моём случае никакого переопределения таблиц! (хотя теперь буду и это знать, спасибо)
И всё же... куда рыть?
...
Рейтинг: 0 / 0
02.08.2005, 17:49
    #33197532
LeXa NalBat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить ResultSet из функции PostGreSql?
GreyVSДа нет в моём случае никакого переопределения таблиц!Колонки не дропали?

select attname from pg_class, pg_attribute where relname='clients' and oid=attrelid and attisdropped;

GreyVSИ всё же... куда рыть?Попробуйте пересоздать таблицу, и затем - функцию.
...
Рейтинг: 0 / 0
02.08.2005, 17:50
    #33197536
GreyVS
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить ResultSet из функции PostGreSql?
Мда :/ создал новую таблицу, только не EMS... а запросом CREATE.... и создал новую функцию на эту таблицу и всё заработало... странно как-то
Первая моя таблица, с которой не работало, была создана мастером в EMS PostgreSQL Manager .... что-то не так делает мастер при создании таблиц? Или может есть какая-то тонкость при работе с таким инструментом? Как-то не серьёзно это если такая ситуация является нормальной...
...
Рейтинг: 0 / 0
02.08.2005, 17:55
    #33197547
4321
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить ResultSet из функции PostGreSql?
DELETE FROM mytable;
VACUUM FULL;
select * from getMyTable();
...
Рейтинг: 0 / 0
02.08.2005, 18:04
    #33197586
LeXa NalBat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить ResultSet из функции PostGreSql?
4321DELETE FROM mytable;
VACUUM FULL;
select * from getMyTable();не помогает

DELETE FROM mytable;
VACUUM FULL;
select * from getMyTable();
insert into mytable values ( 2 );
select * from getMyTable();
ERROR: Query-specified return tuple and actual function return tuple do not match

P.S.: ошибка не вылетает, если возвращается 0 строк
...
Рейтинг: 0 / 0
02.08.2005, 18:52
    #33197688
4321
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить ResultSet из функции PostGreSql?
мдя-ссс
...
Рейтинг: 0 / 0
03.08.2005, 16:34
    #33199783
GreyVS
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить ResultSet из функции PostGreSql?
Уважаемые! Расскажите у кого на какой версии сервера происходит такая ошибка?
у меня сервер 7.4.6 под FreeBSD 4.11
...
Рейтинг: 0 / 0
03.08.2005, 16:53
    #33199860
LeXa NalBat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить ResultSet из функции PostGreSql?
На 7.3 ошибка наблюдается, на 8.0 - нет.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select version();
create table mytable ( id integer, name text );
create function getMyTable() returns setof mytable as 'select * from mytable;' language 'sql';
insert into mytable values (  1 , 'lexa' );
select * from getMyTable();
alter table mytable drop column name;
select * from getMyTable();
insert into mytable values (  2  );
select * from getMyTable();
drop function getMyTable();
drop table mytable;

Код: 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.
# select version();
                                                 version
---------------------------------------------------------------------------------------------------------
 PostgreSQL  7 . 3 . 6  on i686-pc-linux-gnu, compiled by GCC gcc (GCC)  3 . 3 . 2   20040119  (Red Hat Linux  3 . 3 . 2 - 8 )
( 1  row)

# create table mytable ( id integer, name text );
CREATE TABLE
# create function getMyTable() returns setof mytable as 'select * from mytable;' language 'sql';
CREATE FUNCTION
# insert into mytable values (  1 , 'lexa' );
INSERT  4035406988   1 
# select * from getMyTable();
 id | name
----+------
   1  | lexa
( 1  row)

# alter table mytable drop column name;
ALTER TABLE
# select * from getMyTable();
ERROR:  Query-specified return tuple and actual function return tuple do not match
# insert into mytable values (  2  );
INSERT  4035406989   1 
# select * from getMyTable();
ERROR:  Query-specified return tuple and actual function return tuple do not match
# drop function getMyTable();
DROP FUNCTION
# drop table mytable;
DROP TABLE

Код: 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.
32.
33.
34.
35.
36.
37.
38.
# select version();
                                                     version
------------------------------------------------------------------------------------------------------------------
 PostgreSQL  8 . 0 . 3  on x86_64-unknown-linux-gnu, compiled by GCC gcc (GCC)  3 . 3 . 5   20050117  (prerelease) (SUSE Linux)
( 1  row)

# create table mytable ( id integer, name text );
CREATE TABLE
# create function getMyTable() returns setof mytable as 'select * from mytable;' language 'sql';
CREATE FUNCTION
# insert into mytable values (  1 , 'lexa' );
INSERT  4283156   1 
# select * from getMyTable();
 id | name
----+------
   1  | lexa
( 1  row)

# alter table mytable drop column name;
ALTER TABLE
# select * from getMyTable();
 id
----
   1 
( 1  row)

# insert into mytable values (  2  );
INSERT  4283157   1 
# select * from getMyTable();
 id
----
   1 
   2 
( 2  rows)

# drop function getMyTable();
DROP FUNCTION
# drop table mytable;
DROP TABLE
...
Рейтинг: 0 / 0
03.08.2005, 17:42
    #33200064
4321
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить ResultSet из функции PostGreSql?
LeXa NalBatНа 7.3 ошибка наблюдается, на 8.0 - нет.слава яйсам!
(на 8-ку вроде перейдем)
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как получить ResultSet из функции PostGreSql? / 20 сообщений из 20, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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