|
|
|
OUT'ы, SETOF of record'ы и все-все-все
|
|||
|---|---|---|---|
|
#18+
Ребята, помогите разобраться, как запустить сие чудо: Код: plsql 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. когда пытаюсь так: Код: plsql 1. 2. 3. Когда так: Код: plsql 1. 2. 3. 4. 5. Даже пытался первую строчку заменить на CREATE OR REPLACE FUNCTION "public"."test"(IN int4, IN json, OUT rb bool, OUT vld text, OUT msg text, IN clmn_name text) но в этом случае - не понимаю, как ее вызвать, ибо Код: plsql 1. 2. 3. 4. помогите разобраться, а? :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2014, 21:10:36 |
|
||
|
OUT'ы, SETOF of record'ы и все-все-все
|
|||
|---|---|---|---|
|
#18+
VanillaNInja, Вам английским языком говорят: Вы пытаетесь вернуть 4 колонки, хотя должны вернуть только одну величину типа "запись". То есть Вы пытаетесь вернуть не то, что обязались согласно объявлению функции. Да и в объявлении функции фигня какая-то написана. Должна быть и еще одна ошибка, так как между ELSE и END IF нет ни одного оператора. Итого: 1. Разберитесь, что Вы хотите получить на выходе функции. Прямо сейчас это не понятно. 2. Что заказали, то и верните в теле. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2014, 21:35:59 |
|
||
|
OUT'ы, SETOF of record'ы и все-все-все
|
|||
|---|---|---|---|
|
#18+
/\/\/\/\/\/\, чтрочка с else - там лишняя. Забыл удалить следы тестироваия :-/ Хочу получить рекорд с 4мя полями. Ну то есть не обязательно рекорд. Но четыре поля. Я об этом и пытаюсь сообщить кусочком: t1(rb boolean, vld text, msg text, clmn_name text) Я же ей указываю те 4 поля, которые надо вернуть. Но она мне отвечает "Ошибка, возвращаю 4 поля" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2014, 21:48:18 |
|
||
|
OUT'ы, SETOF of record'ы и все-все-все
|
|||
|---|---|---|---|
|
#18+
точнее, хочется получить как раз некоторое число рекордов с этими 4мя полями. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2014, 21:54:24 |
|
||
|
OUT'ы, SETOF of record'ы и все-все-все
|
|||
|---|---|---|---|
|
#18+
VanillaNInja, Хочется - так делайте! Прочитайте RTFM . Там все написано. Кстати, у Вас на удивление мерзкий стиль написания кода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2014, 22:23:52 |
|
||
|
OUT'ы, SETOF of record'ы и все-все-все
|
|||
|---|---|---|---|
|
#18+
А со стилем что не так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2014, 22:28:55 |
|
||
|
OUT'ы, SETOF of record'ы и все-все-все
|
|||
|---|---|---|---|
|
#18+
VanillaNInjaА со стилем что не так?если (NULL сделай пустой текст и если после этого не NULL ) то сделай подобную проверку ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2014, 23:06:46 |
|
||
|
OUT'ы, SETOF of record'ы и все-все-все
|
|||
|---|---|---|---|
|
#18+
VanillaNInja, Много ненужных слов, которые уводят в сторону от главного смысла. Так пишут тупые роботы из встроенных помогалок. Расскажите зачем: -- Берете наименование схемы и наименование функции в кавычки. -- Зачем указываете наименование схемы. (Особенно мерзко смотрится "pg_catalog"."record") -- Зачем указываете параметры в конце функции, которые можно и не указывать? -- Пишете какие-то странные типы -- Не пользуетесь алиасами, а обращаетесь к параметрам по номеру. Ну и форматирование отсутствует. Укажите пример из официального RTFM для поддерживаемой версии PG, где пишется именно так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2014, 23:20:47 |
|
||
|
OUT'ы, SETOF of record'ы и все-все-все
|
|||
|---|---|---|---|
|
#18+
/\/\/\/\/\/\, На самом деле, как образцом кода было то, как пишут у меня в компании. Никогда не задумывался что это плохо :-/ Спасибо за советы. Будем исправляться :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2014, 23:28:31 |
|
||
|
OUT'ы, SETOF of record'ы и все-все-все
|
|||
|---|---|---|---|
|
#18+
SmeL_md, если вы про строчку Код: plsql 1. То я не представляю как это элегантно сделать, избежав 2х проверок. Результат json_extract_path_text может быть как ' ' так null ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2014, 23:30:13 |
|
||
|
OUT'ы, SETOF of record'ы и все-все-все
|
|||
|---|---|---|---|
|
#18+
вот ELSE там совершенно не мешает, это не ара-кал проблема у вас вот какая Воспроизводим ваш код, вернее его синтаксическую струтуру: Код: sql 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. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2014, 12:56:46 |
|
||
|
OUT'ы, SETOF of record'ы и все-все-все
|
|||
|---|---|---|---|
|
#18+
лопата, По-моему автор не выучил все буквы и пока не может складывать слова. А Вы говорите о том как правильно рифмовать. Мне кажется, что более правильно будет подтолкнуть автора (в том числе и пинками) к тому, что нужно правильно указать входные и выходные параметры функции. То есть либо пометить выходные параметры OUT и RETURNS SETOF record, либо написать RETURNS TABLE (p1 INTEGER, ... ) . Пока автор не прочтет документацию (именно это и написано в документации), указанные Вами действия будут очень сильным колдунством. Пока автор бездумно полагается на какой-то конструктор функций, который все делает за него. Наверное, и думает тоже. По поводу ELSE действительно так. В энциклопедии юных сурков разъяснено, что это не обязательно. Просто тогда ELSE нужно удалить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2014, 13:24:36 |
|
||
|
OUT'ы, SETOF of record'ы и все-все-все
|
|||
|---|---|---|---|
|
#18+
/\/\/\/\/\/\, насчет OUT [|RETURNS TABLE] в данном случае вы правы везде, где тип возврата фиксирован на момент создания ф-ии -- это уместно. есть ситуации когда тип возврата зависит от параметров, и вызов может вычислить тип возврата в момент вызова самостийно (dblink crosstab и т.п.) -- вот тогда и уместно траха иметь дело с описанием типа в момент вызова. есть совсем третьи ситуации - и там всё внутри пж нехорошо, остается фетчить курсоры offtop: но я сам сплошь и рядом пользую Код: sql 1. 2. 3. 4. 5. именно для троичной логики, и мне это читаемее, чем Код: sql 1. 2. 3. 4. 5. 6. 7. и не только в plpgsql поэтому я и не разделяю православной ортодоксии ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2014, 13:48:00 |
|
||
|
OUT'ы, SETOF of record'ы и все-все-все
|
|||
|---|---|---|---|
|
#18+
/\/\/\/\/\/\, Я не понимаю, откуда столько ненависти к вопрошающим? Я стараюсь уважать чужое время и задаю вопросы, когда сам не могу найти ответа/разобраться в том числе и в документации. От вас же одно говно да и фраза "читайте доку". При этом пытаетесь дать какие-то ложные выводы о конструкторах кода и прочем. Короче, вы очень неприятная тварь :-/ Лопата, спасибо большое. Очень Хорошо все объяснил. Все работает. Я крайне признателен :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2014, 15:07:43 |
|
||
|
OUT'ы, SETOF of record'ы и все-все-все
|
|||
|---|---|---|---|
|
#18+
VanillaNInja, Тогда уж поймаю на слове: И сколько раз Вы эту доку прочитали? Почему задаете вопрос по тем вещам, которые явно указаны в примерах документации? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2014, 15:26:53 |
|
||
|
OUT'ы, SETOF of record'ы и все-все-все
|
|||
|---|---|---|---|
|
#18+
От корки до корки? Ни разу. Мне тяжело читать ее как беллетристику. Доку использую как справочник. Задал вопрос по той вещи которую не смог найти в документации. Ваша ссылка в том числе ничего не прояснила. Зато лопата смог очень явно указать на то что четыре значения не являются рекордом, если их предварительно не взять в скобки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2014, 15:39:20 |
|
||
|
OUT'ы, SETOF of record'ы и все-все-все
|
|||
|---|---|---|---|
|
#18+
VanillaNInja, Вы получили совершенно тоный ответ на неверно заданный вопрос. Оно Вас еще неоднократно догонит (хотя, уже догнало). Конкретно у меня ненависть вызывает неспособность прочитать 1 (одну) страницу текста, где ответ содержится в виде описания, а потом в виде примера. Похоже, что неспособность эта хроническая . Что Вам нужно было сделать: По ссылке из сообщения 16994356 прочитать теорию и ознакомисться с примерами: авторCREATE FUNCTION sum_n_product(x int, y int, OUT sum int, OUT prod int) AS $$ BEGIN sum := x + y; prod := x * y; END; $$ LANGUAGE plpgsql; и авторCREATE FUNCTION extended_sales(p_itemno int) RETURNS TABLE(quantity int, total numeric) AS $$ BEGIN RETURN QUERY SELECT quantity, quantity * price FROM sales WHERE itemno = p_itemno; END; $$ LANGUAGE plpgsql; This is exactly equivalent to declaring one or more OUT parameters and specifying RETURNS SETOF sometype. Ну, и нытиков нигде не любят. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2014, 15:55:03 |
|
||
|
OUT'ы, SETOF of record'ы и все-все-все
|
|||
|---|---|---|---|
|
#18+
VanillaNInja/\/\/\/\/\/\, Я не понимаю, откуда столько ненависти к вопрошающим? Я стараюсь уважать чужое время и задаю вопросы, когда сам не могу найти ответа/разобраться в том числе и в документации. нам отсюда не видно VanillaNInja От вас же одно говно да и фраза "читайте доку". При этом пытаетесь дать какие-то ложные выводы о конструкторах кода и прочем. Короче, вы очень неприятная тварь :-/это наша родина, сынок VanillaNInjaЛопата, спасибо большое. Очень Хорошо все объяснил. Все работает. Я крайне признателен :-) незачто. зубцы тащем-то прав. У меня просто было время вам разжевать, и было всё равно понятно, что пинать вас в сторону обучения работе с докой (не читать все подряд, а пользуясь find + google найти ответы на свои вопросы) -- нет смысла. привыкли доить людей походу, и тут же обгаживать. с такой-то ленью -- вам всё-ж-таки социализироваться не мешает получше, чтобы не только влезть, но и понукать при этом сподручнее было. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2014, 16:24:30 |
|
||
|
OUT'ы, SETOF of record'ы и все-все-все
|
|||
|---|---|---|---|
|
#18+
/\/\/\/\/\/\, анек про воздушный шар, кодера (|математика) и манагера вспоминается. так и ходим -- всюду уиноватые ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2014, 16:26:49 |
|
||
|
OUT'ы, SETOF of record'ы и все-все-все
|
|||
|---|---|---|---|
|
#18+
лопатаУ меня просто было время вам разжевать... Не соглашусь. По-моему Вы просто дали обезьяне гранату и объяснили как выдернуть чеку. Ни гранаты, ни обезьяны не жалко. Анекдот - да, именно этот. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2014, 16:39:18 |
|
||
|
OUT'ы, SETOF of record'ы и все-все-все
|
|||
|---|---|---|---|
|
#18+
/\/\/\/\/\/\, ненене, вывсёврёти, я ничего не давал оно ходило вокруг слона и что-то нащупало вытарчивающее а я просто объяснил, как за это "что-то" дёргать синтаксически правильно чтобы слон не брыкался в другой раз вы сами можете рассказать что-то полезное из вредных советов главное не увлекайтесь а с какой стороны правильно подходить к слону -- это сильное кунг-фу, много слов и тычков в rtfm надо произвести, и так и не научить. к тому же слон наиболее удачен именно со стороны доки, как это не странно. заставить бы падаванов доку ара-кала вслух читать. вот где содом, война и немцы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2014, 17:00:42 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=38833280&tid=1998290]: |
0ms |
get settings: |
8ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
199ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
60ms |
get tp. blocked users: |
1ms |
| others: | 242ms |
| total: | 546ms |

| 0 / 0 |
