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

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

Код: plsql
1.
select length(cast('01' as char(12))) len from dual;
...
Рейтинг: 0 / 0
26.01.2018, 03:35
    #39591393
SY
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
26.01.2018, 07:15
    #39591410
andreymx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как записать ограничение
SY,

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

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

SY.
...
Рейтинг: 0 / 0
26.01.2018, 18:30
    #39591868
andreymx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как записать ограничение
Я писал про варчар2
...
Рейтинг: 0 / 0
27.01.2018, 16:27
    #39592190
SY
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
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как записать ограничение / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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