PL / SQL для вставки строки истории с длинным необработанным столбцом в Oracle - PullRequest
3 голосов
/ 06 ноября 2011

У меня есть длинный необработанный столбец в таблице Oracle.Вставка с помощью select не работает из-за длинного необработанного столбца, который также является частью моего оператора select.В основном я пытаюсь вставить, чтобы вставить строку истории с парой измененных параметров.Поэтому я думал об использовании PL / SQL в Oracle.У меня нет опыта в PL / SQL, и я ничего не получил после поиска в течение нескольких дней.Может кто-нибудь помочь мне с примером PL / SQL для моей проблемы?Заранее спасибо !!!

Ответы [ 2 ]

3 голосов
/ 07 ноября 2011

Типы данных LONG и LONG RAW устарели и существуют уже много лет.Вам действительно лучше от них избавиться.

Сказав, что, если вы используете PL / SQL, вы будете ограничены 32 760 байтами данных, что является максимумом, который LONG RAW PL /Тип данных SQL будет содержать.Тем не менее, тип данных базы данных LONG RAW может содержать до 2 ГБ данных.Таким образом, если какие-либо строки в вашей таблице содержат данные длиной более 32 760 байт, вы не сможете получить их с помощью PL / SQL.Это фундаментальное ограничение типов данных LONG и LONG RAW, и одна из причин, по которым Oracle отказалась от их использования.

В этом случае единственными опциями являются Pro * C или OCI.

Дополнительную информацию можно найти здесь: http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14261/datatypes.htm#CJAEGDEB

Надеюсь, что поможет.

2 голосов
/ 08 ноября 2011

Вы можете работать со столбцом LONG RAW непосредственно в PL / SQL, если ваши данные ограничены 32 КБ:

FOR cc IN (SELECT col1, col2... col_raw FROM your_table) LOOP
   INSERT INTO your_other_table (col1, col2... col_raw) 
      VALUES (cc.col1, cc.col2... cc.col_raw);
END LOOP;

Это не удастся, если какой-либо LONG RAW больше 32 КБ.

В этом случае вам придется использовать другой язык.Вы можете использовать Java, так как он включен в БД.Я уже ответил на пару вопросов по SO с помощью LONG RAW и java:

В любом случае, как вы заметили, работать с больюэтот тип данных.Если преобразование в LOB невозможно, вам придется использовать обходной путь.

...