|
|
|
Функция, возвращающая набюор данных
|
|||
|---|---|---|---|
|
#18+
Всем привет. Пишу функцию Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. Не работает, ошибка Код: plaintext В чем может быть причина? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2015, 15:11 |
|
||
|
Функция, возвращающая набюор данных
|
|||
|---|---|---|---|
|
#18+
Есть такой работающий вариант: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. И меня он, в принципе, устраивает. Но вопрос для понимания остается. Почему конструкция "RETURNS setof record" требует минимум два поля? Или причина в чем-то другом? В документаци ответа на этот вопрос я не нашел. Все примеры с одним полем там описаны через return table (...) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2015, 15:23 |
|
||
|
Функция, возвращающая набюор данных
|
|||
|---|---|---|---|
|
#18+
Alexey Agafonov, Причина, скорее всего, здесь: RETURNS setof record Пробуйте вместо этого написать RETURNS setof NUMERIC Сейчас в выходных условиях написано возвращение записи. Хотя по факту возвращается NUMERIC (не запись), о чем и сказано в тексте ошибки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2015, 16:10 |
|
||
|
Функция, возвращающая набюор данных
|
|||
|---|---|---|---|
|
#18+
ursido, согласен, я тоже об этом думал. По очень простой (вроде бы) логике, numeric - это частный случай record записи. Она просто состоит из одного поля. Вот это меня и смутило. Отход от теории множеств (один элемент - это частный случай множества). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2015, 20:29 |
|
||
|
Функция, возвращающая набюор данных
|
|||
|---|---|---|---|
|
#18+
Alexey Agafonov, numeric — не частный случай record, даже если record содержит единственное поле типа numeric. Это так же, как значение отдельно взятого поля не является частным случаем записи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2015, 23:29 |
|
||
|
Функция, возвращающая набюор данных
|
|||
|---|---|---|---|
|
#18+
Ы2Alexey Agafonov, numeric — не частный случай record, даже если record содержит единственное поле типа numeric. Это так же, как значение отдельно взятого поля не является частным случаем записи. спор тупоконечников с остроконечниками т.е. вот так вот -- на голубом глазу -- отказывают в праве иметь запись шириной в одно поле хоть уписайсо -- всё божья роса понятно, почему так реализовано -- чтобы вот за эту общность не платить (за компаундный record в C ) но и неудобно в некоторых случаях -- вырождение записи в одно поле приходится обставлять отдельным кодом, даже зная, что так оно быстрее -- а не греет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2015, 00:06 |
|
||
|
Функция, возвращающая набюор данных
|
|||
|---|---|---|---|
|
#18+
qwwqотказывают в праве иметь запись шириной в одно поле Кто вам отказывает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2015, 03:07 |
|
||
|
Функция, возвращающая набюор данных
|
|||
|---|---|---|---|
|
#18+
Ы2qwwqотказывают в праве иметь запись шириной в одно поле Кто вам отказывает? а глаз голубой--голубой [сколько литров мочи не впитай] вот же, ять, второе счастье ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2015, 08:37 |
|
||
|
Функция, возвращающая набюор данных
|
|||
|---|---|---|---|
|
#18+
qwwqно и неудобно в некоторых случаях -- вырождение записи в одно поле приходится обставлять отдельным кодом, даже зная, что так оно быстрее -- а не греет Полностью согласен, потому что так (см ниже) - работает. Всего лишь добавил еще одну колонку. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2015, 13:39 |
|
||
|
Функция, возвращающая набюор данных
|
|||
|---|---|---|---|
|
#18+
Для PostgreSQL setof record - это от ДВУХ колонок. Хотя в классике (и БД и вообще математике) один элемент - это тоже частный случай множества, совсем строго "набор" - это от одного и более элемента. Например, вполне уместна формулировка "наш набор представлен в виде одной колонки айдишников..." и так далее. Тут же странно. Как гвоздями в ядро прибито, что если set of record, но при этом один выходной параметр - не дадим. Причина непонятна, правда, что при наборе типизированных процедур у тех, у который одна колонка, писать надо иначе... Собственно, с чем я и столкнулся, создав эту тему. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2015, 13:44 |
|
||
|
Функция, возвращающая набюор данных
|
|||
|---|---|---|---|
|
#18+
Alexey AgafonovДля PostgreSQL setof record - это от ДВУХ колонок. Хотя в классике (и БД и вообще математике) один элемент - это тоже частный случай множества, совсем строго "набор" - это от одного и более элемента. Например, вполне уместна формулировка "наш набор представлен в виде одной колонки айдишников..." и так далее. Тут же странно. Как гвоздями в ядро прибито, что если set of record, но при этом один выходной параметр - не дадим. Причина непонятна, правда, что при наборе типизированных процедур у тех, у который одна колонка, писать надо иначе... Собственно, с чем я и столкнулся, создав эту тему. вообще то Код: sql 1. вполне себе возвращает рекорд из 1 поля. и именно компаунд и поле из него с типом вы уже не выдерете Код: sql 1. 2. а алиасом с типами -- как в случае record returning ф-ии, попользоваться не дадут. просто вместо того, чтобы сокрыть от пользователя декларации проблемы/тонкости реализации, разрабы пошли по оракл--вею -- запретили "медленный" вариант сетофа компаундов от одного поля. (могли бы его реализовать как сетоф типов поля, сокрыв "снятие избыточной компаунд--обертки" (уже на этапе разбора декларации) от пользователя языка). эта фигня сделана когда--то в далёком ещё прошлом. В returnin table, который более свежий -- такой фигни уже нет. пользователь деклараций (т.е. языка) оперирует абстракциями, не привязанными к тонкостям реализации. и помнить, что алиасы не туннелируют глубже одного уровня вложенности (как в оракле) -- ему незачем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2015, 15:31 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=39092100&tid=1997660]: |
0ms |
get settings: |
7ms |
get forum list: |
10ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
158ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
| others: | 256ms |
| total: | 494ms |

| 0 / 0 |
