Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / ПАМАГИТЕ!!!!!! / 14 сообщений из 14, страница 1 из 1
13.09.2005, 10:16
    #33265554
Frankie
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ПАМАГИТЕ!!!!!!
Делаю функцию на plpgsql. Записываю в переменную значение из запроса путём SELECT INTO. Причём документация к постгресу говорит, что пишется
Код: plaintext
SELECT INTO em id_emp FROM ...
а книга по постгресу, что
Код: plaintext
SELECT id_emp INTO em FROM ....

Ни один из вариантов не работает!!! Ужас в том, что pgAdminIII вообще молчалив до жути(словно пхп) - если в функции ошибка, он не говорит где она и в чём, а просто НИЧЕГО не возвращает, когда я пытаюсь воспользоваться этой функцией.

EMS PostgreSQL Manager вроде поразговорчивее, но он выдаёт
ERROR: column "em" does not exist причём, если задекларировать
Код: plaintext
DECLARE em int4;
то говорит синтакс еррор.

Я потерялся.................
...
Рейтинг: 0 / 0
13.09.2005, 10:54
    #33265690
фффф
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ПАМАГИТЕ!!!!!!
Правильны оба вариант записи. Есть ещё способы:
Код: plaintext
1.
2.
3.
em := id_emp FROM ....; --SELECT подставляется неявно
или
em := (SELECT id_emp FROM ....);
Без полного текста функции трудно сказать, в чем дело. Возможно конфликт с именем или алиасом таблицы в запросе, для чего рекомендуют обозначать переменные каким-нибудь префиксом/суффиксом.
...
Рейтинг: 0 / 0
13.09.2005, 11:44
    #33265900
Frankie
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ПАМАГИТЕ!!!!!!
Вот. Короче, бред какой-то. Указывает теперь на синтакс-еррор на DECLARE....
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
CREATE OR REPLACE FUNCTION sv(text,text)
DECLARE em integer;
RETURNS int4 AS
BEGIN
 em := id_emp FROM emps, deps
       WHERE employee=$ 1  AND department=$ 2 ;
RETURN em;
END;
  LANGUAGE 'plpgsql' VOLATILE;
...
Рейтинг: 0 / 0
13.09.2005, 11:55
    #33265932
mwolf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ПАМАГИТЕ!!!!!!
FrankieВот. Короче, бред какой-то. Указывает теперь на синтакс-еррор на DECLARE....
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
CREATE OR REPLACE FUNCTION sv(text,text)
DECLARE em integer;
RETURNS int4 AS
BEGIN
 em := id_emp FROM emps, deps
       WHERE employee=$ 1  AND department=$ 2 ;
RETURN em;
END;
  LANGUAGE 'plpgsql' VOLATILE;


DECLARE после AS

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
CREATE OR REPLACE FUNCTION sv(text,text)
RETURNS int4 AS'
BEGIN
  DECLARE em integer;
 em := id_emp FROM emps, deps
       WHERE employee=$1 AND department=$2;
RETURN em;
END;
'  LANGUAGE 'plpgsql' VOLATILE;
...
Рейтинг: 0 / 0
13.09.2005, 13:12
    #33266192
Frankie
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ПАМАГИТЕ!!!!!!
Как бы не так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
CREATE OR REPLACE FUNCTION sv(text,text)
RETURNS int4 AS
BEGIN
DECLARE em integer;
 em := id_emp FROM emps, deps
       WHERE employee=$ 1  AND department=$ 2 ;
RETURN em;
END;
  LANGUAGE 'plpgsql' VOLATILE;

Выдаёт ERROR: syntax error at or near "BEGIN" at character 58
Может у меня какие-то глючные версии?..
...
Рейтинг: 0 / 0
13.09.2005, 13:41
    #33266280
XM
XM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ПАМАГИТЕ!!!!!!
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
  CREATE OR REPLACE FUNCTION sv(text,text) RETURNS int4 AS '
  DECLARE em int4;
  BEGIN
   em := id_emp FROM emps, deps
         WHERE employee = $1 AND department = $2 ;
  RETURN em;
  END'   LANGUAGE 'plpgsql' ;

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
13.09.2005, 14:18
    #33266389
Frankie
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ПАМАГИТЕ!!!!!!
Большое спасибо :)
...
Рейтинг: 0 / 0
13.09.2005, 14:41
    #33266468
Frankie
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ПАМАГИТЕ!!!!!!
Ещё проблемка:

Код: plaintext
1.
2.
3.
4.
CREATE OR REPLACE FUNCTION take_1()
  RETURNS SETOF record AS '
SELECT employee, department FROM employee_in_department;
'
  LANGUAGE 'sql' VOLATILE;

При этом
Код: plaintext
SELECT employee FROM take_1()
выдаёт ERROR: a column definition list is required for functions returning "record"
но разве у меня не так????
...
Рейтинг: 0 / 0
13.09.2005, 17:03
    #33267028
Кувалдин Роман
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ПАМАГИТЕ!!!!!!
Код: plaintext
1.
2.
3.
4.
5.
CREATE OR REPLACE FUNCTION take_1() RETURNS SETOF employee_in_department AS 
'
SELECT * FROM employee_in_department;
'
LANGUAGE 'sql' VOLATILE;

В клиенте получишь только нужные столбцы.
...
Рейтинг: 0 / 0
13.09.2005, 17:05
    #33267036
Кувалдин Роман
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ПАМАГИТЕ!!!!!!
Про definition list к сожалению не в курсе. Может кто из гуру скажет?
...
Рейтинг: 0 / 0
13.09.2005, 17:46
    #33267165
Frankie
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ПАМАГИТЕ!!!!!!
Большое Спасибо! Может подскажете, где есть нормальная документация по этим делам? А то стандартная какая-то скудненькая...
...
Рейтинг: 0 / 0
13.09.2005, 20:23
    #33267447
курим доку
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ПАМАГИТЕ!!!!!!
Frankie
Код: plaintext
1.
2.
CREATE OR REPLACE FUNCTION take_1()
  RETURNS SETOF record AS '
Код: plaintext
SELECT employee FROM take_1()
выдаёт ERROR: a column definition list is required for functions returning "record" ругательство относится не к функции а к способу получения результатов. Воскури доку для возврата результатов из ф-й, возвращающих _неопределенный_ тип RECORD*


*помница за алиасом (или в алиасе) возврата должне быть опсиан тип, или перечень столбцов и их типов. т.е. все упираеца в синтаксис вызова таких функцмй
...
Рейтинг: 0 / 0
14.09.2005, 09:22
    #33267844
Кувалдин Роман
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ПАМАГИТЕ!!!!!!
курим доку Frankie
Код: plaintext
1.
2.
CREATE OR REPLACE FUNCTION take_1()
  RETURNS SETOF record AS '
Код: plaintext
SELECT employee FROM take_1()
выдаёт ERROR: a column definition list is required for functions returning "record" ругательство относится не к функции а к способу получения результатов. Воскури доку для возврата результатов из ф-й, возвращающих _неопределенный_ тип RECORD*


*помница за алиасом (или в алиасе) возврата должне быть опсиан тип, или перечень столбцов и их типов. т.е. все упираеца в синтаксис вызова таких функцмй

Можно ссылку на курево? В стандартной доке я этого не увидел.
...
Рейтинг: 0 / 0
14.09.2005, 12:05
    #33268472
фффф
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ПАМАГИТЕ!!!!!!
Прямо в описании команды SELECT, по словам "column definition" ищется, и пример там же есть.
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / ПАМАГИТЕ!!!!!! / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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