|
Процедура не возвращает набор
|
|||
---|---|---|---|
#18+
Подскажите ламеру! Есть процедура: CREATE FUNCTION "public"."test" (char) RETURNS "public"."ports" AS' select * from ports where ports.port_name like ''1'' 'LANGUAGE 'sql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER; "public"."ports" - таблица, с ней всё в порядке. ports.port_name это наименование порта(коммутатора). при выполенении выдаёт: ERROR: Cannot display a value of type RECORD если в процедуре поправить RETURNS "public"."ports" - тож самое. Наверняка проблем аглупая. Но я пока недокумекал. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2003, 17:20 |
|
Процедура не возвращает набор
|
|||
---|---|---|---|
#18+
SELECT test('1') INTO rResult; ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2003, 17:57 |
|
Процедура не возвращает набор
|
|||
---|---|---|---|
#18+
Вообще непонятно! вот результат: www=# select test('1') into rResult; SELECT www=# Явно что то не то. может в функции что то не так? Хотя сам запрос срабатывает нормально. Я просто не хочу запрос вшивать в програму. Нада функция. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2003, 18:48 |
|
Процедура не возвращает набор
|
|||
---|---|---|---|
#18+
Мне просто нада одно - чтобы процедура(функция) возвращала несколько столбцов, как в SyBase(не зря нёе деньги просят). ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2003, 19:19 |
|
Процедура не возвращает набор
|
|||
---|---|---|---|
#18+
tst=# create table ports (n serial,port_name text); NOTICE: CREATE TABLE will create implicit sequence 'ports_n_seq' for SERIAL col umn 'ports.n' CREATE TABLE tst=# CREATE FUNCTION "public"."test" (char) RETURNS "public"."ports" AS' tst'# select * from ports where ports.port_name like ''1'' tst'# 'LANGUAGE 'sql'; CREATE FUNCTION tst=# ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2003, 20:37 |
|
Процедура не возвращает набор
|
|||
---|---|---|---|
#18+
Конечно проблема глупая! Правда такого собщения об ошибке я не получил... Вот текст файла p3.sql --drop FUNCTION "public"."test" (char); CREATE or replace FUNCTION "public"."test" (char) RETURNS SETOF "public"."ports" AS' select * from ports where ports.port_name like ''1'' 'LANGUAGE 'sql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER; select * from test('1'); ----------- а вот результат avalon>psql -f p3.sql tst CREATE FUNCTION n | port_name ---+----------- (0 rows) ----------------------- При отсутствии SETOF результат следующий : psql:p3.sql:6: ERROR: ExecMakeTableFunctionResult: Invalid result from function returning tuple Почему это в твоей версии постгреса не сработало - спрашивай у авторов plpgsql.so - кажется один из них это Tom Lane. Кстати версию Postgresa ты так и не указал - уменя например PostgreSQL 7.3.3 on i386-unknown-freebsd4.4, compiled by GCC 2.95.3 и PostgreSQL 7.4 on i386-unknown-freebsd4.4, compiled by GCC 2.95.3 ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2003, 20:58 |
|
Процедура не возвращает набор
|
|||
---|---|---|---|
#18+
Конечно проблема глупая! Правда такого собщения об ошибке я не получил... Вот текст файла p3.sql --drop FUNCTION "public"."test" (char); CREATE or replace FUNCTION "public"."test" (char) RETURNS SETOF "public"."ports" AS' select * from ports where ports.port_name like ''1'' 'LANGUAGE 'sql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER; select * from test('1'); ----------- а вот результат avalon>psql -f p3.sql tst CREATE FUNCTION n | port_name ---+----------- (0 rows) ----------------------- При отсутствии SETOF результат следующий : psql:p3.sql:6: ERROR: ExecMakeTableFunctionResult: Invalid result from function returning tuple Почему это в твоей версии постгреса не сработало - спрашивай у авторов постгреса, возможно там только добавили возможность возврата нескольких столбцов и не успели исправить парсер . Кстати версию Postgresa ты так и не указал - уменя например PostgreSQL 7.3.3 on i386-unknown-freebsd4.4, compiled by GCC 2.95.3 и PostgreSQL 7.4 on i386-unknown-freebsd4.4, compiled by GCC 2.95.3 ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2003, 21:00 |
|
Процедура не возвращает набор
|
|||
---|---|---|---|
#18+
Всё тоже самое! www=# create table tt1(n serial,port_name text); NOTICE: CREATE TABLE will create implicit sequence 'tt1_n_seq' for SERIAL column 'tt1.n' CREATE TABLE www=# create function "public"."proc1" (char) RETURNS "public"."tt1" AS' www'# select * from tt1' www-# LANGUAGE 'sql'; CREATE FUNCTION www=# select proc1('f') www-# ; proc1 ------- (1 запись) www=# insert into tt1(port_name) values ('amw1'); INSERT 105015 1 www=# insert into tt1(port_name) values ('amww'); INSERT 105016 1 www=# select proc1('f'); ERROR: Cannot display a value of type RECORD www=# ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2003, 21:23 |
|
Процедура не возвращает набор
|
|||
---|---|---|---|
#18+
Блин - пока я писал исправлял пост ты уже успел по граблям по бегать 8) И все таки скажи версию слоника! ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2003, 21:33 |
|
|
start [/forum/topic.php?fid=53&msg=32335980&tid=2008027]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
69ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
others: | 333ms |
total: | 499ms |
0 / 0 |