|
результат строковой конкатинации слишком велик
|
|||
---|---|---|---|
#18+
при попытке выполнить функцию вот такая вот ошибка. Сама функция: create or replace FUNCTION FN_1GKB_GET_TEXT_ANSWERS (var_form_id IN VARCHAR2,var_from IN VARCHAR2,var_to IN VARCHAR2) RETURN clob AS res clob; BEGIN SELECT LISTAGG(text,'') WITHIN GROUP (ORDER BY sortcode ASC) INTO res FROM (SELECT CASE WHEN typ = 1 THEN text || CASE WHEN SUBSTR(text,-1) != '.' AND SUBSTR(text,-1) != '!' AND SUBSTR(text,-1) != '?' THEN '.' END || CASE WHEN (lag(typ,1) over (ORDER BY sortcode DESC) = 0) THEN chr(10) WHEN (lag(typ,1) over (ORDER BY sortcode DESC) = 1) THEN ' ' END WHEN typ = 0 THEN CASE WHEN text = ' ' THEN '' ELSE '~b' || text || '.b& ' END END text,sortcode,typ FROM (SELECT text,sortcode, CASE WHEN typ = 0 THEN CASE WHEN (lag(typ,1) over (ORDER BY sortcode DESC) = 1) THEN 0 ELSE 1 END ELSE 0 END del,typ FROM (SELECT CASE WHEN fi.text = ' ' THEN '' ELSE fi.text || ' ' END || TRIM(fv.text) AS text, fi.sortcode, fi.typ FROM solution_reg.form_result_desc fd, solution_form.form_item fi, solution_reg.form_result_value_desc fv WHERE fd.id = var_form_id AND fv.form_result_id = fd.id AND fi.id = fv.form_item_id AND fv.text <> ' ' AND fi.typ=1 AND fi.sortcode BETWEEN var_from AND var_to UNION ALL SELECT fi.text, fi.sortcode, fi.typ FROM solution_reg.form_result_desc fd, solution_form.form_item fi WHERE fd.id = var_form_id AND fi.form_id = fd.form_id AND fi.typ=0 AND fi.sortcode BETWEEN var_from AND var_to ORDER BY sortcode ASC)) WHERE del != 1); RETURN res; END FN_1GKB_GET_TEXT_ANSWERS; вызов функции: SELECT FN_1GKB_GET_TEXT_ANSWERS('117094023',0,9999) FORM FROM DUAL ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2021, 13:00 |
|
результат строковой конкатинации слишком велик
|
|||
---|---|---|---|
#18+
ОК, понятно. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2021, 13:06 |
|
результат строковой конкатинации слишком велик
|
|||
---|---|---|---|
#18+
в чём тут проблема? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2021, 13:09 |
|
результат строковой конкатинации слишком велик
|
|||
---|---|---|---|
#18+
результат строковой конкатинации слишком велик ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2021, 13:21 |
|
результат строковой конкатинации слишком велик
|
|||
---|---|---|---|
#18+
Скорее всего это потому, что когда конкатенацией в запросе собираешь строку из строк типа VARCHAR то результатом и будет строка типа VARCHAR, со всеми положенными ограничениями. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2021, 13:28 |
|
результат строковой конкатинации слишком велик
|
|||
---|---|---|---|
#18+
и как можно решить эту проблему? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2021, 13:30 |
|
результат строковой конкатинации слишком велик
|
|||
---|---|---|---|
#18+
kmskmskms и как можно решить эту проблему? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2021, 13:40 |
|
результат строковой конкатинации слишком велик
|
|||
---|---|---|---|
#18+
Ну или max_string_size = extended, но это на любителя. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2021, 13:47 |
|
результат строковой конкатинации слишком велик
|
|||
---|---|---|---|
#18+
Собирать прямо в CLOB функциями соответствующего пакета. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2021, 13:47 |
|
результат строковой конкатинации слишком велик
|
|||
---|---|---|---|
#18+
PuM256 Ну или max_string_size = extended, но это на любителя. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2021, 13:49 |
|
результат строковой конкатинации слишком велик
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Собирать прямо в CLOB функциями соответствующего пакета. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2021, 13:51 |
|
результат строковой конкатинации слишком велик
|
|||
---|---|---|---|
#18+
AmKadМожно и без пакета собрать средствами xmlagg и последующей конвертацией в clob. Именно это он уже и делает. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2021, 14:03 |
|
результат строковой конкатинации слишком велик
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov AmKadМожно и без пакета собрать средствами xmlagg и последующей конвертацией в clob. Именно это он уже и делает. Если мы говорим про код в первом посте, то нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2021, 14:15 |
|
результат строковой конкатинации слишком велик
|
|||
---|---|---|---|
#18+
AmKadЕсли мы говорим про код в первом посте, то нет. Форматирование там, конечно, отсутствует как класс, но я вижу всего один мегазапрос, обёрнутый как раз в list_agg в clob. Чего я не замечаю? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2021, 14:32 |
|
результат строковой конкатинации слишком велик
|
|||
---|---|---|---|
#18+
ты не замечаешь того что это LISTAGG а не XMLAGG. а вообще не подскажете как будет выглядеть аналог для SELECT LISTAGG(text,'') WITHIN GROUP (ORDER BY sortcode ASC) с использованием XMLAGG? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2021, 14:37 |
|
результат строковой конкатинации слишком велик
|
|||
---|---|---|---|
#18+
Ох уж этот copypaste-driven девелопмент... 1. Изложите свою мегафункцию, раз уж всё одно вылезли в PL/SQL, на PL/SQL. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
2. Раз уж вылезли в PL/SQL - то стоит избавиться от unon all и сделать необходимую логику в цикле по одному проходу через таблички. 3. Подрываетесь вы, к гадалке не ходи, на конкатенациях - если их выполнить не в запросе, а в pl/sql, где varchar2 длиннее, то проскочите. Да и текст сопровождать будет попроще. Dimitry Sibiryakov Чего я не замечаю? Контатенаций в copypaste-style мегазапросе :) ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2021, 14:58 |
|
результат строковой конкатинации слишком велик
|
|||
---|---|---|---|
#18+
andrey_anonymous Ох уж этот copypaste-driven девелопмент... 1. Изложите свою мегафункцию, раз уж всё одно вылезли в PL/SQL, на PL/SQL. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
2. Раз уж вылезли в PL/SQL - то стоит избавиться от unon all и сделать необходимую логику в цикле по одному проходу через таблички. 3. Подрываетесь вы, к гадалке не ходи, на конкатенациях - если их выполнить не в запросе, а в pl/sql, где varchar2 длиннее, то проскочите. Да и текст сопровождать будет попроще. Dimitry Sibiryakov Чего я не замечаю? Контатенаций в copypaste-style мегазапросе :) не работает функция Код: 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. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52.
вызов: Код: plsql 1. 2. 3.
ошибка: ORA-06502: PL/SQL: ошибка числа или значения ORA-06512: на "SYS.DBMS_LOB", line 1163 ORA-06512: на "SOLUTION_MED.FN_1GKB_TEST", line 49 ORA-06512: на "SOLUTION_MED.FN_1GKB_TEST", line 49 06502. 00000 - "PL/SQL: numeric or value error%s" *Cause: An arithmetic, numeric, string, conversion, or constraint error occurred. For example, this error occurs if an attempt is made to assign the value NULL to a variable declared NOT NULL, or if an attempt is made to assign an integer larger than 99 to a variable declared NUMBER(2). *Action: Change the data, how it is manipulated, or how it is declared so that values do not violate constraints. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2021, 15:45 |
|
результат строковой конкатинации слишком велик
|
|||
---|---|---|---|
#18+
kmskmskms SELECT LISTAGG(text,'') WITHIN GROUP (ORDER BY sortcode ASC) с использованием XMLAGG? Код: plsql 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2021, 16:14 |
|
результат строковой конкатинации слишком велик
|
|||
---|---|---|---|
#18+
andrey_anonymous, короче он так ошибкой реагирует если попадается text с пустой строкой ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2021, 17:42 |
|
результат строковой конкатинации слишком велик
|
|||
---|---|---|---|
#18+
kmskmskms, Код: 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. 37. 38.
..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2021, 18:15 |
|
результат строковой конкатинации слишком велик
|
|||
---|---|---|---|
#18+
а как можно конкатинировать клоб с символом? тобиж "clob_text || '123'" как я понимаю эта конструкция выдаст в запросе туже ошибку что результат строковой конкатинации слишком велик. Как грамотно приклеить к клобу текст в запросе? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2022, 10:27 |
|
результат строковой конкатинации слишком велик
|
|||
---|---|---|---|
#18+
kmskmskms как я понимаю Код: plsql 1. 2. 3. 4.
..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2022, 11:09 |
|
результат строковой конкатинации слишком велик
|
|||
---|---|---|---|
#18+
Stax, Ок, почему тогда в этой функции может вылетать эта ошибка? Код: 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. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52.
ошибка возникает когда поле text попадается очень большой текст "результат строковой конкатинации слишком велик" ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2022, 11:59 |
|
результат строковой конкатинации слишком велик
|
|||
---|---|---|---|
#18+
kmskmskmsпочему тогда в этой функции может вылетать эта ошибка? У тебя там конкатенация двух полей с константами. Какие размеры у fi.text и fv.text? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2022, 13:00 |
|
|
start [/forum/topic.php?fid=52&msg=40112593&tid=1879615]: |
0ms |
get settings: |
28ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
41ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
465ms |
get tp. blocked users: |
2ms |
others: | 291ms |
total: | 861ms |
0 / 0 |