powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как записать ограничение
11 сообщений из 11, страница 1 из 1
Как записать ограничение
    #39590706
Gomn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как записать ограничение: если в строке, фиксированное количество знаков 12
Я тут записал код, есть другие варианты как-то записать проще?
REGION_CODE CHAR(2 CHAR),CONSTRAINT REGION_CODE_CK CHECK (LENGTH(REGION_CODE)=2)
...
Рейтинг: 0 / 0
Как записать ограничение
    #39590721
xenix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Gomn,

2 знака или 12 ?
...
Рейтинг: 0 / 0
Как записать ограничение
    #39590739
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GomnREGION_CODE CHAR(2 CHAR),CONSTRAINT REGION_CODE_CK CHECK (LENGTH(REGION_CODE)=2)в данной формулировке constraint на результат не влияет.
...
Рейтинг: 0 / 0
Как записать ограничение
    #39590740
Gomn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
12, просто я ошибся
...
Рейтинг: 0 / 0
Как записать ограничение
    #39590749
Gomn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
-2-GomnREGION_CODE CHAR(12 CHAR),CONSTRAINT REGION_CODE_CK CHECK (LENGTH(REGION_CODE)=12)в данной формулировке constraint на результат не влияет.
то есть, REGION_CODE CHAR(12 CHAR) достаточно
...
Рейтинг: 0 / 0
Как записать ограничение
    #39590775
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gomn,

Код: plsql
1.
select length(cast('01' as char(12))) len from dual;
...
Рейтинг: 0 / 0
Как записать ограничение
    #39591393
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gomnто есть, REGION_CODE CHAR(12 CHAR) достаточно

Нет. CHAR дополняет справа пробелами до указанной длины, посему твой констрейнт как пионер всeгда выдаст TRUE (на что и был намек от -2-). Посему CHAR тут в принципе не катит. Используй VARCHAR2:

Код: 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.
SQL> CREATE TABLE TBL(REGION_CODE CHAR(12 CHAR),CONSTRAINT REGION_CODE_CK CHECK (LENGTH(REGION_CODE)=12));

Table created.

SQL> insert into tbl values('123');

1 row created.

SQL> insert into tbl values(null);

1 row created.

SQL> drop table tbl purge;

Table dropped.

SQL> CREATE TABLE TBL(REGION_CODE VARCHAR2(12 CHAR) NOT NULL,
  2  CONSTRAINT REGION_CODE_CK CHECK (LENGTH(REGION_CODE)=12));

Table created.

SQL> insert into tbl values('123');
insert into tbl values('123')
*
ERROR at line 1:
ORA-02290: check constraint (SCOTT.REGION_CODE_CK) violated


SQL> insert into tbl values('123456789012');

1 row created.

SQL>



SY.
...
Рейтинг: 0 / 0
Как записать ограничение
    #39591410
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SY,

пробел - он тоже символ
...
Рейтинг: 0 / 0
Как записать ограничение
    #39591860
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymxSY,
пробел - он тоже символ

Похоже ты так и не понял. Усер ввел три прoбела (любую строку с пробелами справа). Поле CHAR(12 CHAR). Оracle добавил 9 пробелов справа. А теперь напиши констрейнт (триггер....дерзай) который поймет что в действительности вводил усер.

SY.
...
Рейтинг: 0 / 0
Как записать ограничение
    #39591868
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я писал про варчар2
...
Рейтинг: 0 / 0
Как записать ограничение
    #39592190
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymxЯ писал про варчар2

И что? Вводи 12 пробелов и check constraint выдаст TRUE. А вот ежели пробел недопустим:

Код: plsql
1.
2.
CREATE TABLE TBL(REGION_CODE CHAR(12 CHAR),
CONSTRAINT REGION_CODE_CK CHECK (LENGTH(NVL(REPLACE(REGION_CODE,' '),'X')) = 12 OR REGION_CODE IS NULL));



OR REGION_CODE IS NULL не нужен если REGION_CODE обьявлен как NOT NULL.

SY.
P.S. Ну а если недопустимых символов несколько, то TRANSLATE вместо REPLACE.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как записать ограничение
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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