-3

student_nameテーブルの列にstudent英字しか入力できないことを確認するにはどうすればよいですか?

4

3 に答える 3

3

「英字のみ」が大文字と小文字の A ~ Z のみを意味する場合は、英字CHECK以外の文字があるかどうかをチェックする制約を使用できます。

SQL> ed
Wrote file afiedt.buf

  1  create table student (
  2    student_name varchar2(100),
  3    constraint chk_student_name check( student_name = regexp_replace( student_name, '[^[:alpha:]]', null ))
  4* )
SQL> /

Table created.

student_nameこれにより、純粋にアルファベットの値を挿入できます

SQL> insert into student values( 'JustinCave' );

1 row created.

ただし、スペースなどのアルファベット以外のものを挿入するとエラーが発生します

SQL> insert into student values( 'Justin Cave' );
insert into student values( 'Justin Cave' )
*
ERROR at line 1:
ORA-02290: check constraint (SCOTT.CHK_STUDENT_NAME) violated

アルファベット文字と一緒にスペースを許可したい場合は、正規表現を変更できます

SQL> ed
Wrote file afiedt.buf

  1  create table student (
  2    student_name varchar2(100),
  3    constraint chk_student_name check( student_name = regexp_replace( student_name, '[^([:alpha:]|[:space:])]', null ))
  4* )
SQL> /

Table created.

SQL> insert into student values( 'Justin Cave' );

1 row created.

SQL> insert into student values( 'Justin Cave1' );
insert into student values( 'Justin Cave1' )
*
ERROR at line 1:
ORA-02290: check constraint (SCOTT.CHK_STUDENT_NAME) violated
于 2012-04-30T20:09:21.897 に答える
0

チェック制約を探しているかもしれません

構文は、create table コマンド内で次のようになります。

... CHECK REGEXP_LIKE (students_name, '^([:alpha:]|[:space:])*$'), ...

これまでにウェブで見つけた例:

http://www.w3schools.com/sql/sql_check.asp

http://psoug.org/reference/regexp.html

于 2012-04-30T19:53:08.530 に答える
0

Oracle のREGEXP関数を使用してそれを行うことができます。

于 2012-04-30T19:54:05.340 に答える