Поле усечения SQL - PullRequest
       29

Поле усечения SQL

0 голосов
/ 27 августа 2018

В Oracle у меня есть запрос, похожий на:

CREATE TABLE my_table
(
    my_field CLOB,
    my_field2 VARCHAR2(50 CHAR),
    my_field3 VARCHAR2(5 CHAR),
)

, и я хотел бы выполнить этот запрос:

select count(*)
from my_table
where my_field = substr('...',4000,1)

Когда я запускаю запрос, я получаю ошибку:

00000 - «строковый литерал слишком длинный»
* Причина: строковый литерал длиннее 4000 символов.
* Действие: использовать строковый литерал не более 4000 символов.
Более длинные значения могут быть тольковвод с использованием переменных связывания.

Пожалуйста, совет!

Ответы [ 2 ]

0 голосов
/ 27 августа 2018

Вы используете substr с 4000 символами. Возможно, ваш набор символов является многобайтовым набором символов, из-за которого объем памяти превышает 4 КБ.Еще один подход, который я могу предложить, это использовать переменную plsql varchar2.Он имеет предел 32767.

Declare
 my_field varchar2(32767) := <Long text>;
 v_count number;
begin
SELECT COUNT(*) into v_count FROM my_table
WHERE my_field = my_field;

end;
/
0 голосов
/ 27 августа 2018

Как говорится в сообщении об ошибке, Oracle переворачивается, потому что вы пытаетесь использовать строковый литерал с более чем 4000 байтов в нем.Одной из альтернатив является использование переменных связывания (как предложено):

VARIABLE my_field CLOB;
EXEC :my_field := 'some really long text here longer than 4000 bytes';

SELECT COUNT(*)
FROM my_table
WHERE my_field = :my_field;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...