powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Перевести long в char
30 сообщений из 30, показаны все 2 страниц
Перевести long в char
    #40003298
TQuestions
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день! Подскажите пжл как в запросе поле long перевести в char?
Примерно такой запрос, где p.high_value тип long
select * from table1 t, dba_tab_partitions p where t.col1 = p.high_value
...
Рейтинг: 0 / 0
Перевести long в char
    #40003300
Master_Detail
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вы точно поискали ответ на форуме или погуглили?
...
Рейтинг: 0 / 0
Перевести long в char
    #40003303
TQuestions
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Master_Detail, да. Нашел функции, которые не смог использовать в запросе
...
Рейтинг: 0 / 0
Перевести long в char
    #40003344
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TQuestions
Добрый день! Подскажите пжл как в запросе поле long перевести в char?
Примерно такой запрос, где p.high_value тип long
select * from table1 t, dba_tab_partitions p where t.col1 = p.high_value

в общем случае - никак
сравните лимиты по этим типам и успокойтесь

ну еще есть путь - зарыть тот тип long на.., то есть в пропасть
для чего и ждет вас to_lob уже лет 20 как
...
Рейтинг: 0 / 0
Перевести long в char
    #40003381
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
думаю, что Server Side Java должна с Long работать нормально. Но сам не проверял. Нужды не было

В OCI (C) и Client Java проблем с Long нет. Ф-ции для работы с BLOB совершенно нормально работают и с Long'ами.

Подозреваю разный интерфейс Long / Blob был до (возможно включительно) PRO*C Oracle 8.0. Уже в 8i интерфейс унифицировали.

AFAIK
...
Рейтинг: 0 / 0
Перевести long в char
    #40003404
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TQuestions,

У Вас лонг в табличке или вью?

ps
если длина до 32к то через ф-цию пл/скл

.....
stax
...
Рейтинг: 0 / 0
Перевести long в char
    #40003411
Фотография кит северных морей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TQuestions
select * from table1 t, dba_tab_partitions p where t.col1 = p.high_value
что конкретно вы хотите получить этим запросом? скорее всего есть более простые способы.
...
Рейтинг: 0 / 0
Перевести long в char
    #40003433
TQuestions
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax, вью
...
Рейтинг: 0 / 0
Перевести long в char
    #40003436
TQuestions
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
кит северных морей, нужно найти определенные названия партиций при наложении условий на таблицу table1

Т.е. существует очень большая таблица table1. нужно бежать по нужным партициям и дропать их
...
Рейтинг: 0 / 0
Перевести long в char
    #40003448
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TQuestions
Stax, вью

жаль, нет ровида

надеялся что dba_tab_partitions токо для примера

тагда можно определится что для dba_tab_partitions уникальный ключ и по нему
в pl/sql сравнивать col1 = p.high_value

.....
stax
...
Рейтинг: 0 / 0
Перевести long в char
    #40003450
Фотография кит северных морей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TQuestions
кит северных морей, нужно найти определенные названия партиций при наложении условий на таблицу table1

Т.е. существует очень большая таблица table1. нужно бежать по нужным партициям и дропать их


1) dbms_rowid.rowid_object(table1.rowid) + dba_objects.data_object_id

2) alter table drop partition for ( ... ) с учетом значения all_tab_partitions.interval

писать свой собственный парсер имеет смысл тогда, когда вам зачем-то нужно получить метаданные секции, в которой нет ни одной строки. в общем случае там очень много нюансов, которые нужно учесть (например то, что RANGE-секционирование бывает многоколоночным). скорее всего, вам это не нужно.
...
Рейтинг: 0 / 0
Перевести long в char
    #40003451
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TQuestions,

А конструкция partition for () не подойдёт?
...
Рейтинг: 0 / 0
Перевести long в char
    #40003452
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TQuestions
кит северных морей, нужно найти определенные названия партиций при наложении условий на таблицу table1

Т.е. существует очень большая таблица table1. нужно бежать по нужным партициям и дропать их


ну и бегите и дропайте
.. partition for
...
Рейтинг: 0 / 0
Перевести long в char
    #40003456
Фотография кит северных морей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кит северных морей
TQuestions
кит северных морей, нужно найти определенные названия партиций при наложении условий на таблицу table1

Т.е. существует очень большая таблица table1. нужно бежать по нужным партициям и дропать их


1) dbms_rowid.rowid_object(table1.rowid) + dba_objects.data_object_id

2) alter table drop partition for ( ... ) с учетом значения all_tab_partitions.interval

писать свой собственный парсер имеет смысл тогда, когда вам зачем-то нужно получить метаданные секции, в которой нет ни одной строки. в общем случае там очень много нюансов, которые нужно учесть (например то, что RANGE-секционирование бывает многоколоночным). скорее всего, вам это не нужно.

ну и сильные духом могут побаловаться с недокументированной tbl$or$idx$part$num, которая позволяет получить object_id секции по значению partition key.
...
Рейтинг: 0 / 0
Перевести long в char
    #40003467
TQuestions
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
К сожалению, у меня? наверное? не такой большой опыт...я не совсем понял ваших решений. Можно на пальцах, как найти названия партиций в таблице table1, например, по условию col2 = 1, если таблица парционирована по col1, а названия партиций лежат в поле long dba_tab_partitions.high_value
...
Рейтинг: 0 / 0
Перевести long в char
    #40003477
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TQuestions
К сожалению, у меня? наверное? не такой большой опыт...я не совсем понял ваших решений. Можно на пальцах, как найти названия партиций в таблице table1, например, по условию col2 = 1, если таблица парционирована по col1, а названия партиций лежат в поле long dba_tab_partitions.high_value

вам же всё показали уже

нет нужды знать имя секции, если знаете значение из той секции, которую хотите например, удалить
(какое? да любое )
...
Рейтинг: 0 / 0
Перевести long в char
    #40003486
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TQuestions
К сожалению, у меня? наверное? не такой большой опыт...я не совсем понял ваших решений. Можно на пальцах, как найти названия партиций в таблице table1, например, по условию col2 = 1, если таблица парционирована по col1, а названия партиций лежат в поле long dba_tab_partitions.high_value



Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
with t as (
           select  distinct dbms_mview.pmarker(rowid) object_id
             from  table1
             where col2 = 1
          )
select  o.object_name    table_name,
        o.subobject_name partition_name
  from  t,
        user_objects o
  where o.object_id = t.object_id
/



SY.
...
Рейтинг: 0 / 0
Перевести long в char
    #40003490
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
orawish

нет нужды знать имя секции, если знаете значение из той секции, которую хотите например, удалить
(какое? да любое )


авторпо условию col2 = 1, если таблица парционирована по col1,


SY.
...
Рейтинг: 0 / 0
Перевести long в char
    #40003492
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TQuestions
например, по условию col2 = 1, если таблица парционирована по col1

Именно для варианта секционирована по одному полю, а фильтр по совершенно другому?
...
Рейтинг: 0 / 0
Перевести long в char
    #40003506
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотя можно и выполнить DROP PARTINION FOR всем полученным значениям COL1 с NULL exception handler на ORA-14702 но неэффективно (двойной поиск).

SY.
...
Рейтинг: 0 / 0
Перевести long в char
    #40003517
TQuestions
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SY, не работает( ничего не возвращает. поменял на all_objects или dba_objects, тогда результат есть, но partition_name пусто
...
Рейтинг: 0 / 0
Перевести long в char
    #40003519
TQuestions
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
env, можно подробнее
...
Рейтинг: 0 / 0
Перевести long в char
    #40003521
TQuestions
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
env, да
...
Рейтинг: 0 / 0
Перевести long в char
    #40003524
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TQuestions,

В вашем примере секции нарезаны по col 1 , но условие по col 2 . Это опечатка или действительно надо найти все секции, в которых есть хотя бы одна строка с полем col 2 отвечающим на момент запроса условию фильтра?
...
Рейтинг: 0 / 0
Перевести long в char
    #40003529
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TQuestions,

Запрос Соломона работает. Если таблица не в вашей схеме, то вам в all/dba_objects с указанием схемы.
...
Рейтинг: 0 / 0
Перевести long в char
    #40003535
TQuestions
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
env
TQuestions,

В вашем примере секции нарезаны по col 1 , но условие по col 2 . Это опечатка или действительно надо найти все секции, в которых есть хотя бы одна строка с полем col 2 отвечающим на момент запроса условию фильтра?


не опечатка. col2 это дата. нужно взять все запись например от 01.01.2020 и удалить партиции, которые по полю col1
...
Рейтинг: 0 / 0
Перевести long в char
    #40003539
TQuestions
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
env
TQuestions,

Запрос Соломона работает. Если таблица не в вашей схеме, то вам в all/dba_objects с указанием схемы.



select o.subobject_name,o.* from user_objects o where o.subobject_name is not null - этот запрос всего 4 записи возращает у меня
...
Рейтинг: 0 / 0
Перевести long в char
    #40003545
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TQuestions,

А что при этом в user_tab_partitions?

TQuestions
нужно взять все запись например от 01.01.2020 и удалить партиции, которые по полю col1

т.е. если в секции миллион записей с другими датами и одна от 01.01.2020 - то секцию надо убить полностью? Интересный подход.
...
Рейтинг: 0 / 0
Перевести long в char
    #40003550
TQuestions
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
env
TQuestions,

А что при этом в user_tab_partitions?

TQuestions
нужно взять все запись например от 01.01.2020 и удалить партиции, которые по полю col1

т.е. если в секции миллион записей с другими датами и одна от 01.01.2020 - то секцию надо убить полностью? Интересный подход.

А что при этом в user_tab_partitions? - одна запись
на одну дату более одной партиции
...
Рейтинг: 0 / 0
Перевести long в char
    #40003589
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TQuestions
SY, не работает( ничего не возвращает. поменял на all_objects или dba_objects, тогда результат есть, но partition_name пусто


Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
SQL> CREATE TABLE TST_TABLE1(
  2                          ID   NUMBER,
  3                          NAME VARCHAR2(10 CHAR)
  4                         )
  5    PARTITION BY RANGE (ID) INTERVAL(5)
  6      (
  7       PARTITION P_INITIAL VALUES LESS THAN (5)
  8      )
  9  /

Table created.

SQL> INSERT INTO TST_TABLE1
  2  SELECT  LEVEL,
  3          CHR(ASCII('A') + MOD(LEVEL,5) - 1)
  4    FROM DUAL
  5    CONNECT BY LEVEL <= 7
  6  /

7 rows created.

SQL> SELECT  *
  2    FROM  TST_TABLE1
  3  /

        ID NAME
---------- ----
         1 A
         2 B
         3 C
         4 D
         5 @
         6 A
         7 B

7 rows selected.

SQL> SELECT  T.*,
  2          O.SUBOBJECT_NAME PARTITION_NAME
  3    FROM  TST_TABLE1 T,
  4          DBA_OBJECTS O
  5    WHERE T.NAME = 'A'
  6      AND O.OBJECT_ID = DBMS_MVIEW.PMARKER(T.ROWID)
  7  /

        ID NAME PARTITION_NAME
---------- ---- --------------
         1 A    P_INITIAL
         6 A    SYS_P105037

SQL> SELECT  T.*,
  2          O.SUBOBJECT_NAME PARTITION_NAME
  3    FROM  TST_TABLE1 T,
  4          DBA_OBJECTS O
  5    WHERE T.NAME = '@'
  6      AND O.OBJECT_ID = DBMS_MVIEW.PMARKER(T.ROWID)
  7  /

        ID NAME PARTITION_NAME
---------- ---- --------------
         5 @    SYS_P105037

SQL>



Но все это не имеет большого смысла ибо если мы нашли что NAME = '@' в партиции SYS_P105037 и дропнули SYS_P105037 то кроме NAME = '@' мы уничтожили строки с ID = 6,7. Вряд ли это то что требуется.

SY.
...
Рейтинг: 0 / 0
30 сообщений из 30, показаны все 2 страниц
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Перевести long в char
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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