powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Какой кошмар, забыл. Как LONG в VARCHAR2 сконвертить?
10 сообщений из 10, страница 1 из 1
Какой кошмар, забыл. Как LONG в VARCHAR2 сконвертить?
    #32076683
Slv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Slv
Гость
даже можно и с подрезанием/усечением до, скажем, 2000 символов (vch2(2000)).

Спасибо заранее преогромное.
...
Рейтинг: 0 / 0
Какой кошмар, забыл. Как LONG в VARCHAR2 сконвертить?
    #32076708
Фотография softy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В PL/SQL и SQL подозреваю что никак или по крайней мере без выламывания ребёр точно никак.
Если через приложение, скажем на java, то проблем никаких нет, потому-что там что LONG, что VARCHAR2 помещается в String. А там уже делаешь с эти стрингом что хочешь.
В PL/SQL же функции для работы с VARCHAR2 типа length(), Типа substr() с LONG не работают.
А вообще LONG был оставлен только для совместимости, Oracle рекомендует переходить на CLOB
...
Рейтинг: 0 / 0
Какой кошмар, забыл. Как LONG в VARCHAR2 сконвертить?
    #32076716
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
declare r long raw( 64 );
        v varchar2( 64 );
begin
  r := utl_raw.cast_to_raw(rpad(to_char('X'), 60 ,'X'));
  v := utl_raw.cast_to_varchar2(r);
end;
/
...
Рейтинг: 0 / 0
Какой кошмар, забыл. Как LONG в VARCHAR2 сконвертить?
    #32076717
Фотография softy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to Denis Popov:
А LONG_RAW и LONG - это одно и тоже?
...
Рейтинг: 0 / 0
Какой кошмар, забыл. Как LONG в VARCHAR2 сконвертить?
    #32076725
noname_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ALTER TABLE table_name MODIFY column_name VARCHAR2(...); Если поле содержит строки более 2000 символов, не сконвертит. Надо сначала их урезать или сделать пустыми.
...
Рейтинг: 0 / 0
Какой кошмар, забыл. Как LONG в VARCHAR2 сконвертить?
    #32076727
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот тут я не копенгаген, посколько с ними не особенно работаю, раз они оставлены только для совместимости с ранними версиями. Стараюсь вникнуть в документацию:

http://download-west.oracle.com/docs/cd/A97630_01/server.920/a96524/c13datyp.htm#3057

http://download-west.oracle.com/docs/cd/A97630_01/server.920/a96524/c13datyp.htm#4147

но пока не особо выходит. Кстати, предыдущий скрипт и просто с long работатет:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
declare r long( 120 );
        v varchar2( 60 );
begin
  r := utl_raw.cast_to_raw(rpad(to_char('X'), 60 ,'X'));
  v := utl_raw.cast_to_varchar2(r);
end;
/


Не понимаю только, почему для 60-ти символов нужен long(120), а не long(60)?
...
Рейтинг: 0 / 0
Какой кошмар, забыл. Как LONG в VARCHAR2 сконвертить?
    #32077280
Slv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Slv
Гость
Извините за долгое молчание,

Пояснения. Действие происходит, увы, в PL/SQL пакете - нужно вытащить столбец типа лонг из одной таблицы и сохранить его как варчар(2000) в другой.

К сожалению, последний предложенный вариант (с утл_роу) тоже не работает.

Мне вот подумалось, может быть, есть в природе функция конвертации лонг в цлоб? Тогда можно было бы применить дбмс_лоб.сабстр...
...
Рейтинг: 0 / 0
Какой кошмар, забыл. Как LONG в VARCHAR2 сконвертить?
    #32077303
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А почему не работает, в чем загвоздка? Посмотри на поисковых сайтах по слову long2lob, к примеру google выдал ссылки на похожие обсуждения:

http://www.dbaclick.com/forums/archive/15/89.html
http://www.experts-exchange.com/Databases/Oracle/Q_20139560.html
...
Рейтинг: 0 / 0
Какой кошмар, забыл. Как LONG в VARCHAR2 сконвертить?
    #32077375
Фотография softy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LONG в LOB есть функция:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
TO_LOB
Syntax
Purpose
TO_LOB converts LONG or LONG RAW values in the column long_column to LOB
values. You can apply this function only to a LONG or LONG RAW column, and only
in the SELECT list of a subquery in an INSERT statement.
Before using this function, you must create a LOB column to receive the converted
LONG values. To convert LONGs, create a CLOB column. To convert LONG RAWs,
create a BLOB column.
Example
Given the following tables:
CREATE TABLE long_table (n NUMBER, long_col LONG);
CREATE TABLE lob_table (n NUMBER, lob_col CLOB);
use this function to convert LONG to LOB values as follows:
See Also: INSERT on page  11 - 51  for information on the subquery
of an INSERT statement
TO_LOB ( long_column )

INSERT INTO lob_table
SELECT n, TO_LOB(long_col) FROM long_table;
...
Рейтинг: 0 / 0
Какой кошмар, забыл. Как LONG в VARCHAR2 сконвертить?
    #32077380
Фотография softy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, забыл уточнить - это для 8i и выше. В 8.0.X - не реализована.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Какой кошмар, забыл. Как LONG в VARCHAR2 сконвертить?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]