powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / NULL Шрёдингера
8 сообщений из 8, страница 1 из 1
NULL Шрёдингера
    #39526428
Вадиман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет.

Мне кажется, что я видел подобную тему, но ни автора, ни ключевых слов подобрать не могу.
Ерунда какая-то случилась:

CREATE TABLE x (
...
GENERATE_TOKEN VARCHAR2(1 BYTE) DEFAULT ON NULL 'N' NOT NULL,
...);


SQL> ALTER TABLE x MODIFY generate_token NULL;
ALTER TABLE x MODIFY generate_token NULL
*
ERROR at line 1:
ORA-01451: column to be modified to NULL cannot be modified to NULL


SQL> ALTER TABLE x MODIFY generate_token NOT NULL;
ALTER TABLE x MODIFY generate_token NOT NULL
*
ERROR at line 1:
ORA-01442: column to be modified to NOT NULL is already NOT NULL


SQL> SELECT COUNT(*) FROM x WHERE generate_token IS NULL;

COUNT(*)
----------
0

SQL> SELECT DISTINCT DUMP(generate_token) FROM x;

DUMP(GENERATE_TOKEN)
----------------------------------------------------------------------------------------------------------------------------------------------------------------
Typ=1 Len=1: 89
NULL
Typ=1 Len=1: 78

SQL> spool off

Когда-то на таблице был check constraint novalidate вида (generate_token IN ('Y', 'N')). Сейчас его нет. Но NOT NULL-то никуда не делся. Как это?

Oracle Database 12c Enterprise Edition Release 12.1.0.2.0
...
Рейтинг: 0 / 0
NULL Шрёдингера
    #39526441
Вадиман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Забыл добавить:

SQL> SELECT COUNT(*) FROM x WHERE SYS_OP_MAP_NONNULL(generate_token) = SYS_OP_MAP_NONNULL(NULL);

COUNT(*)
----------
дофига
...
Рейтинг: 0 / 0
NULL Шрёдингера
    #39526476
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Вадиман,

а в чем конкретно проблема?
покажи
Код: plsql
1.
SELECT generate_token, COUNT(*) from x group by generate_token
...
Рейтинг: 0 / 0
NULL Шрёдингера
    #39526484
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
...
Рейтинг: 0 / 0
NULL Шрёдингера
    #39526822
Вадиман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtenderВадиман,

а в чем конкретно проблема?
покажи
Код: plsql
1.
SELECT generate_token, COUNT(*) from x group by generate_token


Я уже приводил distinct выше:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
SQL> SELECT generate_token, COUNT(*) from x group by generate_token;

G   COUNT(*)                                                                    
- ----------                                                                    
      548644                                                                    
Y          2                                                                    
N     389666                                                                    

SQL> spool off
...
Рейтинг: 0 / 0
NULL Шрёдингера
    #39526823
Вадиман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtenderВадиман,

а в чем конкретно проблема?
[/src]
Проблема в том, что при действующем NOT NULL имеем NULLs в колонке
...
Рейтинг: 0 / 0
NULL Шрёдингера
    #39526827
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
а, невнимательно посмотрел...
Это определение таблицы получено с помощью dbms_metadata.get_ddl или реально так таблица создавалась?
В эту таблицу лодырем или директом не заливается?

ВадиманНо NOT NULL-то никуда не делся.
Покажи
Код: plsql
1.
2.
3.
4.
select * 
from user_constraints 
where table_name='X'
 and search_condition_vc like '%GENERATE_TOKEN%'


last_change там какой стоит?


зы. вообще 12.1.0.2 сыроватая версия
...
Рейтинг: 0 / 0
NULL Шрёдингера
    #39526828
Вадиман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SQL> select *
  2  from dba_constraints
  3  where table_name='X'
  4   and search_condition_vc like '%GENERATE_TOKEN%';

OWNER      CONSTRAINT_NAME CONSTRAINT TABLE_NAME SEARCH_CONDITION                                   SEARCH_CONDITION_VC                                R_OWNER    R_CONSTRAI DELETE_RUL STATUS     DEFERRABLE      DEFERRED        VALIDATED  GENERATED       BAD RELY LAST_CHANGE          INDEX_OWNE INDEX_NAME INVALID    VIEW_RELATED    ORIGIN_CON_ID
---------- --------------- ---------- ---------- -------------------------------------------------- -------------------------------------------------- ---------- ---------- ---------- ---------- --------------- --------------- ---------- --------------- --- ---- -------------------- ---------- ---------- ---------- --------------- -------------
PSP        SYS_C00175411   C          X          "GENERATE_TOKEN" IS NOT NULL                       "GENERATE_TOKEN" IS NOT NULL                                                        ENABLED    NOT DEFERRABLE  IMMEDIATE       VALIDATED  GENERATED NAME           27-JUN-17                                                                         0

SQL> spool off

История такова:
1. сначала ALTER TABLE x ADD COLUMN generate_token VARCHAR2(1 BYTE) DEFAULT ON NULL 'N'
2. потом создавалась другая таблица, куда переливались данные из существующей X, и в этой другой таблице колонка generate_token уже была объявлена как DEFAULT ON NULL 'N' NOT NULL
3. INSERT as SELECT, DROP, RENAME. Здесь, наверное, и был direct path load.

Проблема с этого момента тянется.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / NULL Шрёдингера
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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