ORA-06502: Числовая или количественная ошибка PL / SQL: слишком маленький буфер строки элемента. Ошибка возникает до того, как строка символов длиннее, чем выпущенная переменная температуры. Длина всех строк всегда не должна превышать размер развернутых данных, объявленных в переменной.
Я пробовал использовать код несколькими разными способами, восхищаясь временем, или я бы сказал, если только когда я вставляю оба (если я действительно чувствую во время), я всегда получаю эту ошибку. ..
* Обратите внимание, что основное изменение, которое человек вносит на этом веб-сайте, заключается в использовании VARCHAR2, вы можете использовать CHAR (не самой длинной длины). Согласно ответу @ user272735, это ключевой тип.
ORA-06502: PL / SQL: числовой, и это может быть ошибка значения: незначительная ошибка строкового барьера возникает, когда длина строки больше, чем длина объявленной переменной наилучшего символьного типа. Значение не может быть присвоено так, чтобы вы могли использовать переменную, если фактический размер нашего собственного значения, переданного в базу данных, превышает спецификации указанной переменной. ORA-06502: Ошибка PL / SQL: числовая ошибка и / или, возможно, стоит: буфер символьной строки Слишком маленькая, но положительная рыба будет возвращена оракулом. Ошибка возникает из-за того, что выходное значение, содержащееся в этой переменной совета, длиннее, чем было объявлено.
Длина гитарной струны не должна превышать размер типа понимания, указанного в переменной. В этом случае бесконечный цикл можно сохранить в найденной переменной. Если длина вашей текущей строки превышает указанный вес переменной, строка не может быть зарезервирована. Если предпринята попытка передать символ if атрибуту, возникнет исключение.
Ошибка описана как подсказка. Номер строки символизирует ошибку. Размер данных фактора больше, чем размер уважения. Произошла последующая неудача.
В трассировке стека ошибок могут отображаться две ошибки ORA. Настоящий код ошибки будет отображаться рядом с каждым, связанным с нашими сообщениями об ошибках. Вторая ошибка указывает на то, что вы можете указать строку, в которой произошла ошибка. Ошибка указывает на то, что размер объявленной переменной-ловушки недостаточен по отношению к назначенной ей апелляции.
Проблема
Символ не может быть назначен, если длина, связанная с конкретной строкой, превышает размер этой простой переменной общего типа данных. В этом случае наша собственная ошибка может повториться. База данных действительно ваша, чтобы франшизить переменную. Ошибка в том, что эксперты утверждают, что брошенная человеком строка длиннее, чем измерения переменной.
В каждом из приведенных ниже примеров значение состоит из нескольких типов символов. Переменная объявляется с тремя символами. Это строковое значение длиннее объявленного формата переменной. Ошибка ORA-06502: PL / SQL: числовое значение со значением. Ошибка: будет возвращен слишком маленький буфер серии, если значение, без сомнения, обычно присваивается переменной среднего размера.
Объявить
void varchar2 (3);начинать пусто: = 'A101';Конец ;
попрощаться
Объявить
void varchar2 (3);начинать пусто: = 'A101';Конец;Сообщение об ошибке должно быть -ORA-06502: PL / SQL: ошибка числа или значения: значительно меньший строковый буферORA-06512: в строке 406502.00000 - это «PL против SQL: числовая ошибка или ошибка% s»
Причина
Произошла арифметическая ошибка для значения, числа, строки, преобразования или дисциплины. Например, когда возникает эта ошибка, адаптируемый объект, объявленный как NON-NULL, имеет значение NULL, возможно, когда делается мощная попытка присвоить целое число более обширное, чем 99, соответствующей переменной, объявленной с использованием NUMBER (2).
Действие
Измените наиболее важные данные в том виде, в котором они обычно обрабатываются, или с учетом того, что они указаны, чтобы оценки не нарушали ограничения.
Индивидуальное решение
Размер значения, передаваемого во время Oracle PS./SQL, превышает размер обычно объявленного символьного типа отчета. Любая переменная любого типа данных должна быть изменена, чтобы соответствовать самому значению. Размер развернутых символьных данных необходимо улучшить. Когда размер типа данных объекта достиг наибольшего, измеренного типом данных, следует использовать новый тип записи данных, чтобы удовлетворить большую часть значения.
Объявить
void varchar2 (4);начинать пусто: = 'A101';Конец ;
до свидания
Метод обработки PL / SQL успешно выполнен Завершено.
Решение 2
Важно проверить некоторые значения PL / SQL. Возможно, ценный контент был расценен как неправильно переданный в переменную, и в текущем методе произошла серьезная ошибка. При исправлении эти значения сохраняются из переменной.
Объявить
void varchar2 (4);начинать пусто: = '101';Конец ;
выход
Процедура PL / SQL завершена профессионально.
Решение 3
Во всех случаях для продуктов присвоенное значение будет находиться внутри диапазона объявленного типа данных. Длительность значения иногда обычно достигает нашего собственного размера объявленного типа данных. До этого примера мы не могли установить размер этого конкретного типа данных. Это должно быть обработанное различное и скомпрометированное действие в коде PL / SQL.
Объявить
пустой varchar2 (3);начинать пустой: означает «A101»;исключение ЕСЛИ ДРУГОЕ, то пустой: = 0;Конец -
выход
Процедура PL и SQL для этого завершена.
г.
Думаю, что вам уже кажется, что с процедурами и их параметрами мы разобрались, а вот и нет! Есть еще кое-что. Думаю, кто-то из вас заметил, что при написании формального параметра процедуры, например, определяя ее как VARCHAR2 или NUMBER я никогда не делал вот так:
CREATE OR REPLACE PROCEDURE some_proc(NUM IN OUT NUMBER(3,2), DT OUT VARCHAR2(100))
И вот почему. Накладывать ограничения на формальные параметры функций в PL/SQL — ЗАПРЕЩЕНО! Например, вот такой пример, приведет к ошибке компиляции:
CREATE OR REPLACE PROCEDURE TESTINOUT(NUM IN OUT NUMBER(3,2), DT OUT VARCHAR2(100)) IS BEGIN SELECT COMPANY INTO DT FROM customers WHERE customers.CUST_NUM = NUM; SELECT CUST_REP INTO NUM FROM customers WHERE customers.CUST_NUM = NUM; END TESTINOUT; /
В результате получите:
SQL> CREATE OR REPLACE PROCEDURE TESTINOUT(NUM IN OUT NUMBER(3,2), DT OUT VARCHAR2(100)) 2 IS 3 4 BEGIN 5 6 SELECT COMPANY INTO DT FROM customers 7 WHERE customers.CUST_NUM = NUM; 8 9 SELECT CUST_REP INTO NUM FROM customers 10 WHERE customers.CUST_NUM = NUM; 11 12 END TESTINOUT; 13 / Предупреждение: Процедура создана с ошибками компиляции.
Что и требовалось доказать. Можете убрать неверные объявления и еще раз перекомпилировать процедуру для того, чтобы она осталась исправной. А, вот вам еще один подводный камешек. Запишем вот такую процедуру:
CREATE OR REPLACE PROCEDURE PTEST(I_PAR IN OUT NUMBER, II_PAR IN OUT VARCHAR2) IS BEGIN I_PAR := 15.6; II_PAR := 'POIUYTREWQLKJHGFDSA'; END PTEST; /
Компилируем:
SQL> CREATE OR REPLACE PROCEDURE PTEST(I_PAR IN OUT NUMBER, II_PAR IN OUT VARCHAR2) 2 IS 3 4 BEGIN 5 6 I_PAR := 15.6; 7 II_PAR := 'POIUYTREWQLKJHGFDSA'; 8 9 END PTEST; 10 / Процедура создана.
Вот теперь I_PAR и II_PAR получили неявное ограничение посредством объявлений:
I_PAR := 15.6; II_PAR := 'POIUYTREWQLKJHGFDSA';
т.е. получилось, что то вроде:
CREATE OR REPLACE PROCEDURE PTEST(I_PAR IN OUT NUMBER(3.4), II_PAR IN OUT VARCHAR2(19))
Теперь, если произвести вот такой вызов:
DECLARE V_STR VARCHAR2(10); V_NUM NUMBER(3,4); BEGIN PTEST(V_NUM, V_STR); END; /
Получаем, что-то довольно странное:
SQL> DECLARE 2 3 V_STR VARCHAR2(10); 4 V_NUM NUMBER(3,4); 5 6 BEGIN 7 8 PTEST(V_NUM, V_STR); 9 10 END; 11 / DECLARE * ошибка в строке 1: ORA-06502: PL/SQL: : буфер символьных строк слишком маленький ошибка числа или значения ORA-06512: на "MILLER.PTEST", line 7 ORA-06512: на line 8 SQL>
Не сразу ясно, что происходит, так? А все очень просто, V_STR VARCHAR2(10) переопределила ограничение переменной II_PAR при ее явном вызове и запись строки длинной 19 символов в переменную всего в 10 символов привело к ошибке! Очень важно это понимать, иначе в дальнейшем вы запутаетесь совсем! Здесь ошибку вызвала сама вызывающая программа, а не код процедуры, как может показаться! Так вот во избежание ошибок, подобных ORA-06502 при создании процедур документируйте все ограничения налагаемые на фактические параметры — вносите в хранимые процедуры комментарии, а так же кроме описания каждого параметра записывайте функции выполняемые самой процедурой! Вот тогда я думаю, у вас все получится!
Так же единственным способом наложения ограничения на формальный параметр функции является использование оператора %TYPE. Мы с вами о нем говорили. В свете этого можно переписать нашу функцию пример — скажем, вот так:
CREATE OR REPLACE PROCEDURE PTEST( I_PAR IN OUT CUSTOMERS.CUST_NUM%TYPE, II_PAR IN OUT CUSTOMERS.COMPANY%TYPE) IS BEGIN I_PAR := 15.6; II_PAR := 'POIUYTREWQLKJHGFDSA'; END PTEST; /
Такой способ удобен тем, что при изменении полей таблицы автоматом меняются параметры процедур, что облегчает сопровождение кода хранимых процедур, не нужно менять все параметры связанные с данным полем! Получаем:
SQL> CREATE OR REPLACE PROCEDURE PTEST( 2 I_PAR IN OUT CUSTOMERS.CUST_NUM%TYPE, 3 II_PAR IN OUT CUSTOMERS.COMPANY%TYPE) 4 IS 5 6 BEGIN 7 8 I_PAR := 15.6; 9 II_PAR := 'POIUYTREWQLKJHGFDSA'; 10 11 END PTEST; 12 / Процедура создана.
Ошибок нет! Значит, все прошло успешно! Как работать с параметрами это дело вкуса, а на него, как говорится, товарищей совсем не бывает! Вот пока можете все это переварить, а я пойду попью чаю!
Вы можете получить сообщение об ошибке, указывающее, что мой буфер строки ошибок ora-06502 pl / sql слишком мал. Есть несколько способов решить эту проблему, и мы скоро разберемся с приложением.
Рекомендуется
Ускорьте свой компьютер сегодня с помощью этой простой в использовании загрузки. г.
ORA-06502: Числовая ошибка PL / SQL, с другой стороны, количественная ошибка: слишком маленький буфер символьной строки. Ошибка возникает, когда символьная строка длиннее по сравнению с объявленной температурной переменной. Длина каждой строки не должна превышать размер нашего собственного типа данных, объявленного в переменной.
ORA-06502: Числовая или значимая ошибка PL / SQL: слишком маленький числовой буфер. Ошибки возникают, когда расстояние строки местоположения превышает длину, относящуюся к этой конкретной объявленной символьной переменной. Разрыв строки не должен превышать размер типа захвата, объявленного в переменной.
Я тестировал все следующие различные методы кода, такие как удаление while и as well if, но когда я обслуживаю их вместе (if и while), я все равно получаю сообщение об ошибке с обоих концов …
p >
номера справкиВключить вывод на серверNumero принимает причину «Введите № от 110 до 999:»Объяснять I число: равно 1; знак (25); udemrrrket Dynamics (1); c varchar2 (10); телефонный номер ;начинать Цельсия: = & число; d: подразумевает длину (c); j: = подстрока (c, i, 1); написания цикла <= d если b = '1', то a: = сказочный || 'а'; Конец, если; я: = я + 1; Приемная петля; dbms_output.put_line ('Счетчик равен' || a);Конец;/
ORA-06502: PL или SQL: числовое значение или просто ошибка: буфер символьного цикла слишком малORA-06512: на линии 1306502.00000 "PL на SQL: числовое значение или значение ошибки% s" зона
a varchar2 (2000);
* Обратите внимание, что основное изменение здесь — это работа VARCHAR2 вместо CHAR (не самая длинная временная длина). Согласно ответу @ user272735, это всегда было каждым ключом.
ORA-06502: PL / SQL: число или ошибка: слишком мала строка strm. Ошибка возникает, если длина выполнения строки символов намного дороже, чем длина объявленного регулируемого стиля. Значение не может быть присвоено переменной should, если размер значения, передаваемого с базой данных, превышает размер этой объявленной переменной. ORA-06502: PL / SQL: числовые, с другой стороны. Ошибка: строковый буфер со слишком маленьким значением, как правило, будет возвращен oracle. Эта ошибка возникает из-за того, что распознание вывода, хранящееся в этой переменной, длиннее, чем было объявлено.
Длина вашей текущей строки не должна превышать машину того типа данных, который объявлен для изменения. В этом конкретном случае строку часто можно сохранить в переменной. Если длина призрачной марки превышает указанный размер смещения, кабель больше нельзя будет сохранить. Если выполняется проверка для присвоения атрибутов апелляции, создается исключение.
Исключение
Ошибка описывается следующим образом. Номер выбора указывает на ошибку. Длина данных вместе с переменной больше, чем длина значения. Следующая ошибка произошла недавно.
Объявить
void varchar2 (3);начинать пустой: = 'A101';Конец;Указатели ошибок -ORA-06502: числовой pl / sql: или ошибка цены: буфер строки духа слишком малORA-06512: строка 406502.00000 1. "PL / SQL: значение слишком числовая ошибка% s"
В трассировке стека ошибок можно увидеть две ошибки ORA. Рядом с вероятностью ошибки отображается первое предприятие с ошибкой. Вторая ошибка кода указывает, в какой строке обычно возникает ошибка. Ошибка свидетельствует о том, что размер строки деталей, учитываемых при анализе, больше не соответствует присвоенному ей значению.
Проблема
Рекомендуется
Ваш компьютер работает медленно? У вас проблемы с запуском Windows? Не отчаивайтесь! ASR Pro — это решение для вас. Этот мощный и простой в использовании инструмент проведет диагностику и ремонт вашего ПК, повысит производительность системы, оптимизирует память и повысит безопасность процесса. Так что не ждите — скачайте ASR Pro сегодня!
Невозможно описать строку, если она намного длиннее, чем тип размера объявленной переменной веб-типа данных. В этом случае ошибка может повториться. Источник статистики пытается присвоить строку, чтобы убедиться, что вы указали номер. Будет выдана ошибка, если вы посчитаете, что строка содержит больше времени, чем ширина переменной.
В следующей затруднительной ситуации важны четыре личности. В частности, переменная объявляется длиной в три символа. Длина строкового значения превышает размер типа объявленной переменной. ORA-06502: Ошибка PL / SQL: ошибка числа или значения: буфер строки роли мал, все равно будет отображаться, если значение привело к небольшой переменной.
Объявить
void varchar2 (3);начинать = пусто 'A101';Конец ;
до свидания
Объявить
бесполезный varchar2 (3);начинать : = освободить 'A101';Конец;Страница ошибки -ORA-06502: PL / SQL: числовая ошибка или ошибка цены арены: строковый буфер слишком малORA-06512: на шпагате 406502.00000 3. PL / SQL: числовое значение или значение ошибки% s "
Причина
Произошла математическая, числовая, строковая, преобразовательная ошибка или, возможно, ошибка ограничения. Например, конкретная ошибка возникает, когда вы пытаетесь установить NULL, чтобы получить хорошую переменную, объявленную как NON NULL, или когда вы пытаетесь использовать внешние бюро для целого числа больше 99, чтобы помочь вам идентифицировать переменную с помощью NUMBER (2) оператор.
Действие
Измените степень детализации, то, как она обрабатывается или как лучше всего ее объявить, чтобы сокровище определенно нарушало ограничения.
Уникальное решение
Часть значения, переданного в Oracle PS./SQL, превышает размер, указанный для уникального символьного типа поиска. Чтобы воспользоваться этим, необходимо изменить тип типа данных. Общий вид символьного типа данных должен быть лучше. Если я хочу, чтобы размер моего дизайна данных репутации был максимальным, добавленным к типу данных, следует использовать другую сортировку диска, чтобы удовлетворить большую любовь.
Объявить
обнулить varchar2 (4);начинать пусто: = 'A101';Конец . . .
выход
Процедура PL / SQL успешно завершена.
Двойное решение
Очень важно стать широко известным благодаря ценному содержанию PL / SQL. Возможно, значение переменной было авторизовано некорректно и даже в одном методе произошла ошибка. После исправления значение be, безусловно, можно сохранить в переменной.
Объявить
varchar2 (4);начинать empid empid: указывает на «101»;Конец ;
выход
Процедура PL / SQL успешно выполнена.
Решение 3
Во многих случаях присвоенное значение находится в определенном диапазоне объявленного типа данных. Размер значения регулярно достигает заявленного расстояния и ширины типа данных. В типичной ситуации мы не можем регулировать размер всех типов данных. Упущение необходимо исправить, а затем учесть в коде PL / SQL.
Объявить
обнулить varchar2 (3);начинать пусто: = 'A101';исключение ЕСЛИ ДРУГОЕ, ТО пустой: = 0;Конец . . .
выход
Транзакция PL / SQL завершена успешно.
Ускорьте свой компьютер сегодня с помощью этой простой в использовании загрузки. г.
Сделайте так, чтобы вы могли SQL Designer (Инструменты / Настройки / База данных для NLS). Замените его на «СИМВОЛ». Как вы наверняка увидите, после изменения параметра плохие направляющие необходимо перекомпилировать, чтобы они стали «CHAR». Чтобы проверить, скомпилированы ли другие пакеты некорректно, воспользуйтесь этим запросом.
Как исправить ошибку ORA-06502?
Изменение числового значения на правильный диапазон цифр человека или изменение перехода на другой диапазон цифр, чтобы соответствовать значению, активирует ORA-06502.
Как исправить слишком маленький буфер числовой строки PL SQL, а также символьной строки ошибки значения?
Перейдите в помощь SQL Developer (Инструменты / Настройки / База данных и NLS). Замените его на «СИМВОЛ». Чтобы исправить эту конкретную основную проблему, вам необходимо перекомпилировать поврежденные пакеты после изменения конфигурации, чтобы убедиться, что у вас есть «CHAR». Чтобы увидеть, были ли другие инструменты скомпилированы неправильно, запустите этот раздел.
Ora 06502 Pl Sql Error Character String Buffer Too Small
Ora 06502 Pl Sql Error Zeichenkettenpuffer Zu Klein
Ora 06502 Buffer Della Stringa Di Caratteri Di Errore Pl Sql Troppo Piccolo
Ora 06502 Pl Sql Erreur Tampon De Chaine De Caracteres Trop Petit
Ora 06502 Pl Sql Fout Karakter String Buffer Te Klein
Ora 06502 Pl Sql Fel Teckenstrangbuffert For Liten
Ora 06502 Pl Sql Erro De Caracteres String Buffer Muito Pequeno
Ora 06502 Pl Sql 오류 문자열 버퍼가 너무 작습니다
Ora 06502 Pl Sql Bufer De Cadena De Caracteres De Error Demasiado Pequeno
Ora 06502 Blad Pl Sql Bufor Ciagu Znakow Za Maly
г.
Об этой ошибке: ORA-06502: числовая или значимая ошибка
FOR this_loop IN (SELECT field_A, field_B FROM TABLE_NAME WHERE num = i_num) LOOP IF this_loop.field_B BETWEEN 1 AND 3 THEN v_A := v_A || ' ' || this_loop.field_A; ELSIF this_loop.field_B BETWEEN 4 AND 8 THEN v_field_A := v_field_A || ' ' || this_loop.field_A; -- Error is at this line ELSIF this_loop.field_B BETWEEN 9 AND 15 THEN v_B := v_B || ' ' || this_loop.field_A; END IF; END LOOP;
Переменная обозначается как
v_field_A VARCHAR2 (100);
Что я знаю —
- Переменная v_field_A не может содержать значение более 100 символов.
- Результат, который я получаю от
SELECT
Запрос не может содержать более 10 символов.
Мой вопрос — как вообще можно решить эту проблему с пространственным буфером, когда символы находятся в пределах лимита varchar2? Я столкнулся с этой проблемой несколько лет назад, но в прошлый раз причиной был выход select
запрос. В нем было более 100 символов, и, следовательно, проблема с размером, но на этот раз не более 10 символов. Я в замешательстве. Любая помощь приветствуется
- сколько строк у вас в таблице?
- Есть более миллиона строк, но это происходит только с несколькими строками.
- Чтобы быть более конкретным, сколько строк извлекает цикл? 10 символов * 11 итераций цикла == вы столкнетесь с ошибкой, так как вы продолжаете конкатенировать значение переменной на каждой итерации
- почему нельзя увеличить размер v_field_A? это решит проблему
- @ Сатья Это зависит от обстоятельств. Обычно это не более 3-4 рядов.
Переменная v_field_A не может содержать значение более 100 символов.
Почему нет? Это очень возможно, так как вы сцепление переменная для каждой строки в КУРСОР ДЛЯ ПЕТЛИ.
Например,
SQL> DECLARE 2 v_name VARCHAR2(50); 3 BEGIN 4 FOR i IN 5 (SELECT ename FROM emp 6 ) 7 LOOP 8 v_name := v_name || i.ename; 9 END LOOP; 10 END; 11 / DECLARE * ERROR at line 1: ORA-06502: PL/SQL: numeric or value error: character string buffer too small ORA-06512: at line 8
Использовать DBMS_OUTPUT чтобы увидеть текущий размер переменной и добавляемое новое значение.
Давайте отладим
SQL> DECLARE 2 v_name VARCHAR2(50); 3 BEGIN 4 FOR i IN 5 (SELECT ename FROM emp 6 ) 7 LOOP 8 dbms_output.put_line('Length of new value = '||LENGTH(i.ename)); 9 v_name := v_name || i.ename; 10 dbms_output.put_line('Length of variable = '||LENGTH(v_name)); 11 END LOOP; 12 END; 13 / Length of new value = 5 Length of variable = 5 Length of new value = 5 Length of variable = 10 Length of new value = 4 Length of variable = 14 Length of new value = 5 Length of variable = 19 Length of new value = 6 Length of variable = 25 Length of new value = 5 Length of variable = 30 Length of new value = 5 Length of variable = 35 Length of new value = 5 Length of variable = 40 Length of new value = 4 Length of variable = 44 Length of new value = 6 Length of variable = 50 Length of new value = 5
ошибка
DECLARE * ERROR at line 1: ORA-06502: PL/SQL: numeric or value error: character string buffer too small ORA-06512: at line 9
Это довольно ясно, мы хотели объединить строку длиной 5
к переменной, объявленной как максимальный размер 50
, в настоящее время хранит значение размера 50
. следовательно, он выдает ошибку ORA-06502: PL/SQL: numeric or value error: character string buffer too small
.
- Поправьте меня если я ошибаюсь. если переменная может содержать более 50 или 100 символов. Проблема размера не должна существовать вовсе, верно?
- @PirateX Вы забываете тот факт, что вы объединяете значения в переменную в цикле, поэтому в какой-то момент при итерации по косякам он превышает заявленный размер. Я добавил в свой ответ пример.
- Хорошо, я думаю, что у меня есть идея. Это конкатенация, которая в какой-то момент превышает предел 100, вызывая ошибку. Правильно ?
- @PirateX Совершенно верно. Это то, что вы видите в DBMS_OUTPUT в примере, который я вам показал.
- @PirateX Пожалуйста, отметьте это как ответ, помогло бы и другим! Я вижу, что ни один из ваших вопросов никогда не был отмечен как отвеченный. Это хороший жест, и сообщество предлагает принять ответ, который решит вашу проблему. Удачи!
11 строк * 10 символов> 100 символов => ошибка — вы объединяете много строк по 10 символов вместе в одну из трех переменных. Один из них будет расти каждый раз в цикле.
Что мне не хватает?
Также остерегайтесь символов вместо байтов. В varchar2 каждый CHARACTER, вероятно, займет 2 байта.
Проверьте, сколько раз это условие выполняется и какие значения объединяются. Поскольку это объединяется несколько раз, существует вероятность того, что размер v_field_A превышает 50 символов.
ELSIF this_loop.field_B BETWEEN 4 AND 8 THEN v_field_A := v_field_A || ' ' || this_loop.field_A;
Чтобы решить эту проблему, вы можете увеличить размер этой переменной. Вы можете объявить varchar размером до 32 767 байт
Вы можете выполнить конкатенацию строк в SQL-запросе:
SELECT field_A, LISTAGG(CASE WHEN field_B BETWEEN 1 AND 3 THEN field_A END, ' ') WITHIN GROUP (ORDER BY field_A) as val1, LISTAGG(CASE WHEN field_B BETWEEN 4 AND 8 THEN field_A END, ' ') WITHIN GROUP (ORDER BY field_A) as val2, LISTAGG(CASE WHEN field_B BETWEEN 9 AND 15 THEN field_A END, ' ') WITHIN GROUP (ORDER BY field_A) as val3 FROM TABLE_NAME WHERE num = i_num;
Это сделано для упрощения вашего кода. Вы по-прежнему ограничены длиной строки Oracle. Вы можете обойти ограничение Oracle в PL / SQL с помощью CLOB, но в этом нет необходимости, если конечная строка состоит всего из нескольких сотен символов.
- 2 Даже
LISTAGG
имеет Ограничение SQL из4000
.
Ответ на ваш вопрос заключается в том, сколько раз цикл выполняется и сколько раз он входит в условие IF.
ПРИМЕР :
Состояние : МЕЖДУ 4 А ТАКЖЕ 8
this_loop.field_A: = ‘тест’;
Количество выполнений цикла = 100
Из-за КОНКАТИНАЦИЯ размер определенно вырастет более чем на 100 символов.
То же самое будет и с другими условиями LOOP.
Решение : Попробуйте использовать CLOB вместо того VARCHAR чтобы устранить эту проблему.
Ошибки Oracle очень наглядны. Если он вызывает ошибку, это в значительной степени объясняет сценарий: P.
Tweet
Share
Link
Plus
Send
Send
Pin