Добавить ограничение дроби для столбца в оракуле - PullRequest
3 голосов
/ 28 сентября 2011

Я использую оракул 10гр2. Я пытаюсь наложить ограничение на столбец с именем «оценка», чтобы можно было вводить только дроби.

В частности, формат должен содержать одну цифру в числителе и одну цифру в знаменателе, так что пользователь может ввести только дробь, такую ​​как 3/4, 2/5 или 7/8. Столбец принимает только цифры в качестве входных данных. Кто-нибудь может показать мне SQL для использования?

Ответы [ 3 ]

8 голосов
/ 28 сентября 2011

Если я правильно понимаю, я думаю, что правильный способ сделать это - сохранить данные в двух столбцах. Это особенно имеет смысл, если верхнее число - это фактическая оценка пользователя по проблеме, а нижнее число - это возможная оценка, что, по вашему мнению, и делает. Это позволит вам суммировать результаты, используя встроенные числовые функции в Oracle, а не анализировать строки. Затем вы ограничите размер каждого столбца (0-9), используя тип NUMBER(1,0). Например:

alter table table_name add (
    column possible number(1,0),
    column actual number(1,0)
);

Если у вас уже есть данные в столбце оценок, вы затем копируете свои значения оттуда в новые столбцы. Наконец, вы опускаете этот столбец.

alter table table_name drop score;

Кроме того, я бы выполнил поиск по «Oracle меньше, чем ограничение», потому что вы, вероятно, не хотите, чтобы фактическая оценка превышала возможную, и, вероятно, применили бы подобное ограничение, чтобы сделать возможную оценку больше нуля.

0 голосов
/ 28 сентября 2011

Область допустимых значений конечна и мала. Поэтому рассмотрите возможность размещения их всех в таблице, используя текстовый столбец фиксированной ширины (т.е. три символа) и создайте внешнюю ссылку на эту таблицу поиска, а не ограничение CHECK.

0 голосов
/ 28 сентября 2011

У меня нет экземпляра Oracle для проверки, но вот некоторые указатели и некоторые непроверенный код :

Указатели:

  • Посмотритездесь о том, как создать проверочное ограничение: http://www.techonthenet.com/oracle/check.php
  • После того, как вы это знаете, вы можете использовать Regex для проверки ввода.Прочитайте здесь для дальнейшего ознакомления: http://psoug.org/reference/regexp.html

Возможно, вы собираетесь использовать REGEX_LIKE, и это будет выглядеть примерно так:

ALTER TABLE your_table
add CONSTRAINT check_your_field
   CHECK (REGEXP_LIKE(your_field, '^[0-9]+/[0-9]+$'));

Предупреждение:это не гарантируется, чтобы быть полностью функциональным кодом.Это свинец.Читайте, исследуйте и корректируйте соответственно.

Предостережение: 1/0 будет сочтено действительным для регулярного выражения выше, но мы все знаем, что это не должно быть.Есть способ узнать о второй части дроби.Прочитайте ссылку на Regex, там есть все, что вам нужно знать.

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