Как профилировать значения столбца базы данных оракула, используя SQL для типа значения, хранящегося в столбце - PullRequest
1 голос
/ 25 февраля 2011

У меня есть требование, где я должен профилировать / проверить, что определенный столбец в таблице базы данных оракула содержит только символы или нет (числа не допускаются в столбце, таком как город и т. Д.).Похоже, я должен проверить, что столбец может содержать буквенно-цифровые значения, но не специальные символы.Как это можно сделать с помощью оракула sql.

Ответы [ 2 ]

2 голосов
/ 25 февраля 2011

Вот пример использования TRANSLATE. Возможно, вам придется немного подправить персонажей, которых вы хотите разрешить, а которых нет, но это даст вам представление:

SQL> create table cities
  2  ( name varchar2(30)
  3  , constraint city_name_alphanumeric
  4    check (translate(upper(name),'1ABCDEFGHIJKLMNOPQRSTUVWXYZ','1') is null)
  5  )
  6  /

Table created.

SQL> insert into cities values ('Utrecht')
  2  /

1 row created.

SQL> insert into cities values ('Utr3cht')
  2  /
insert into cities values ('Utr3cht')
*
ERROR at line 1:
ORA-02290: check constraint (RWIJK.CITY_NAME_ALPHANUMERIC) violated


SQL> insert into cities values ('UtrΘcht')
  2  /
insert into cities values ('UtrΘcht')
*
ERROR at line 1:
ORA-02290: check constraint (RWIJK.CITY_NAME_ALPHANUMERIC) violated


SQL> insert into cities values ('|Utrecht')
  2  /
insert into cities values ('|Utrecht')
*
ERROR at line 1:
ORA-02290: check constraint (RWIJK.CITY_NAME_ALPHANUMERIC) violated

А вот пример с использованием регулярных выражений:

SQL> delete cities
  2  /

1 row deleted.

SQL> alter table cities
  2    drop constraint city_name_alphanumeric
  3  /

Table altered.

SQL> alter table cities
  2    add constraint city_name_alphanumeric
  3    check (regexp_like(name,'^[[:alpha:]]+$'))
  4  /

Table altered.

SQL> insert into cities values ('Utrecht')
  2  /

1 row created.

SQL> insert into cities values ('Utr3cht')
  2  /
insert into cities values ('Utr3cht')
*
ERROR at line 1:
ORA-02290: check constraint (RWIJK.CITY_NAME_ALPHANUMERIC) violated


SQL> insert into cities values ('UtrΘcht')
  2  /
insert into cities values ('UtrΘcht')
*
ERROR at line 1:
ORA-02290: check constraint (RWIJK.CITY_NAME_ALPHANUMERIC) violated


SQL> insert into cities values ('|Utrecht')
  2  /
insert into cities values ('|Utrecht')
*
ERROR at line 1:
ORA-02290: check constraint (RWIJK.CITY_NAME_ALPHANUMERIC) violated

С уважением,
Роб.

2 голосов
/ 25 февраля 2011

Если вы используете версию 10g +, вы можете попробовать использовать функцию regexp_instr и искать вхождения нужных классов символов posix.

Пример:

create table test1(onlyletters varchar2(100))
/
insert into test1
values('a')
/
insert into test1
values('b')
/
insert into test1
values('a1')
/
insert into test1
values('22')
/

select *
from  test1
where REGEXP_INSTR(onlyletters, '[[:digit:]]') = 0

Это должно затем вернуть толькоСтроки, в которых столбцы «onlyletters» не имеют цифр, в данном случае это строки со значениями «a» и «b».

Если вы хотите найти те, которые содержат цифры, найдите REGEXP_INSTR (...)>0.

Я не уверен, что вы подразумеваете под специальными символами, но вы можете использовать различные классы символов posix таким образом, я использовал его для обнаружения управляющих символов с помощью "REGEXP_INSTR (onlyletters, '[[: cntrl:]] ') ".

Подробнее о классах символов здесь: http://www.regular -expressions.info / posixbrackets.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...