Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Большой текстовый тип.  [new]
Roman20
Member

Откуда:
Сообщений: 306
Всем привет! Буду признателен за помощь.
Имеется запрос, который строится в цикле процедуры как текстовый. Проблема в том что переменная в которую строится запрос типа
eq VARCHAR2(32622);
и после этого, через построенный запрос я возвращаю данные

OPEN anmres FOR eq;

и проблема в том что размера этой переменной катастрафически не хватает.

Прошу подсказать какой тип можно еще использовать. Пробовал clob, но когда я пытаюсь туда записать текст вида
eq := 'select 1 raz from dual'

он ругается.
22 авг 11, 16:38    [11158474]     Ответить | Цитировать Сообщить модератору
 Re: Большой текстовый тип.  [new]
crazy_hands
Member

Откуда: Россия
Сообщений: 170
Roman20
Всем привет! Буду признателен за помощь.
Имеется запрос, который строится в цикле процедуры как текстовый. Проблема в том что переменная в которую строится запрос типа
eq VARCHAR2(32622);
и после этого, через построенный запрос я возвращаю данные

OPEN anmres FOR eq;

и проблема в том что размера этой переменной катастрафически не хватает.

Прошу подсказать какой тип можно еще использовать. Пробовал clob, но когда я пытаюсь туда записать текст вида
eq := 'select 1 raz from dual'

он ругается.


to_clob пробовали? to_clob( 'select 1 raz from dual')
22 авг 11, 16:43    [11158523]     Ответить | Цитировать Сообщить модератору
 Re: Большой текстовый тип.  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
Roman20
.. Пробовал clob, но когда я пытаюсь туда записать текст вида
eq := 'select 1 raz from dual'

он ругается.

неправда. ругается, не он, а строковый литерал.
dbms_lob вам нужен.
22 авг 11, 16:52    [11158617]     Ответить | Цитировать Сообщить модератору
 Re: Большой текстовый тип.  [new]
Flok
Member

Откуда:
Сообщений: 258
Roman20
Всем привет! Буду признателен за помощь.
Имеется запрос, который строится в цикле процедуры как текстовый. Проблема в том что переменная в которую строится запрос типа
eq VARCHAR2(32622);
и после этого, через построенный запрос я возвращаю данные

OPEN anmres FOR eq;

и проблема в том что размера этой переменной катастрафически не хватает.

Прошу подсказать какой тип можно еще использовать. Пробовал clob, но когда я пытаюсь туда записать текст вида
eq := 'select 1 raz from dual'

он ругается.


open..for и execute immediate может использовать CLOB-переменную, начиная только с 11й версии. А у вас, наверняка, 10ка или 9ка.
22 авг 11, 17:00    [11158695]     Ответить | Цитировать Сообщить модератору
 Re: Большой текстовый тип.  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 6692
Flok,

Очень информативно, а главное не имеет к проблеме ТС никакого отношения.
ТС, смотри ответ orawish
22 авг 11, 17:03    [11158735]     Ответить | Цитировать Сообщить модератору
 Re: Большой текстовый тип.  [new]
Flok
Member

Откуда:
Сообщений: 258
да, забыл добавить. в вашем случае остается один вариант - использовать dbms_sql.
Благо он позволяет использовать CLOB-переменную для длинного запроса.
22 авг 11, 17:04    [11158741]     Ответить | Цитировать Сообщить модератору
 Re: Большой текстовый тип.  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 6692
Roman20,

0. Версия сервера?
1. Причины, вынуждающие формировать запрос > 32К?
2. Не ждите чуда, оракл не обязан догадываться, что литерал справа является клобом.
22 авг 11, 17:07    [11158779]     Ответить | Цитировать Сообщить модератору
 Re: Большой текстовый тип.  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
Flok
да, забыл добавить. в вашем случае остается один вариант - использовать dbms_sql.
Благо он позволяет использовать CLOB-переменную для длинного запроса.

это для >= 11g, а до 11g - можно через массив строк
22 авг 11, 19:05    [11159760]     Ответить | Цитировать Сообщить модератору
 Re: Большой текстовый тип.  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 10039
Flok
да, забыл добавить. в вашем случае остается один вариант - использовать dbms_sql.
Благо он позволяет использовать CLOB-переменную для длинного запроса.


Why DBMS_SQL? Ability to использовать CLOB was added in 11g to both DBMS_SQL, EXECUTE IMMEDIATE and OPEN FOR. So, assuming OP is on 11g, all OP needs is to change variable eq declaration to CLOB.

SY.

Сообщение было отредактировано: 22 авг 11, 19:32
22 авг 11, 19:30    [11159870]     Ответить | Цитировать Сообщить модератору
 Re: Большой текстовый тип.  [new]
Flok
Member

Откуда:
Сообщений: 258
orawish, SY - спасибо за поправку.
моя невнимательность.

конечно же, в этом случае использовать ассоциативный массив
22 авг 11, 22:18    [11160330]     Ответить | Цитировать Сообщить модератору
 Re: Большой текстовый тип.  [new]
Roman20
Member

Откуда:
Сообщений: 306
1. Версия 10g.
2. Запрос достаточно сложен и причины для такого формирования есть.
3 Да извиняюсь ошибся ругается на строковый литерал.
Можно ли каким то образом вызвать

OPEN anmres FOR 
клобовскую переменную?
23 авг 11, 09:17    [11161412]     Ответить | Цитировать Сообщить модератору
 Re: Большой текстовый тип.  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
Roman20
1. Версия 10g.
2. Запрос достаточно сложен и причины для такого формирования есть.
3 Да извиняюсь ошибся ругается на строковый литерал.
Можно ли каким то образом вызвать

OPEN anmres FOR 
клобовскую переменную?

нет, в 10g нельзя.
вам надо использовать dbms_sql. пример - в его же спецификации есть, в комментарии.
причем нужен тот (перегруженный) parse , который параметр текст_запроса получает в виде ассоциативного массива строк
(декларация типа которого - опять же в самом пакете).
23 авг 11, 11:32    [11162477]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить