1

他の分野を調べてみましたが、自分がしていることの何が問題なのかわかりません。「00000-0000」としてフォーマットされた 9 桁の郵便番号を含むはずの列にチェック制約を作成しようとしています。これは割り当て用なので、許可されているのはチェック制約を作成することだけです。

私はすでに他の列に対して check ステートメントを正常に使用していますが、何らかの理由で、Stack Overflow で見つけたステートメントが機能しません。使用できる文字は、数字とハイフン ('-') のみです。

alter table Student
    add constraint student_zip_ck
    check (Zip not like '%[0-9\-]%' escape '\');

このチェック制約は、スタック オーバーフローに関する別の (肯定的な評価の) 質問に基づいてモデル化されているため、何が問題なのかわかりません。これは私が受け取るエラーです。

Error starting at line 751 in command:
alter table Student
  add constraint student_zip_ck
  check (Zip not like '%[0-9\-]%' escape '\')
Error report:
SQL Error: ORA-00604: error occurred at recursive SQL level 1
ORA-01424: missing or illegal character following the escape character
00604. 00000 -  "error occurred at recursive SQL level %s"
*Cause:    An error occurred while processing a recursive SQL statement
           (a statement applying to internal dictionary tables).
*Action:   If the situation described in the next error on the stack
           can be corrected, do so; otherwise contact Oracle Support.

提案、質問、またはコメントがある人はいますか?

4

2 に答える 2

6

正規表現に関連するものがないため、おそらく機能していません。あなたの構文は、それらを使用するつもりだったことを意味し、この状況ではそれに同意します。正規表現は Oracle 10g 以降で使用できるため、このバージョン以降を使用していることを確認する必要があります。

構文は次のようになります。

alter table Student
    add constraint student_zip_ck
    check (regexp_like(Zip,'^[[:digit:]]{5}-[[:digit:]]{4}$'));

これの意味は:

  • ^- 文字列の先頭に固定
  • [[:digit:]]- 数値のみを受け入れます。これは POSIX 準拠のバリエーションであり、 と同等\dです。
  • {5}- 正確に 5 回
  • -- ハイフンに一致
  • $- 文字列の最後に固定する

ハイフンと数字の 2 番目をオプションにするには、 を使用してグループを作成する必要があります()。これにより、括弧内のすべてが、文字列であろうと別の正規表現であろうと、単一の単位になり、他の演算子を適用できます。A?は 0 回または 1 回一致することを意味し、グループに適用する必要があります。すべてをまとめると、次のようになります。

regexp_like(Zip,'^[[:digit:]]{5}(-[[:digit:]]{4})?$')

参考文献

これを (初めて) 読むと、例 3-1\dのようにかなり似た問題があり、これはPOSIX の代わりにPerl 型の正規表現構文を使用しており、興味深いかもしれません。

于 2012-05-06T21:46:10.803 に答える
0

LIKEoperator はワイルドカード (%および_) を使用します - http://docs.oracle.com/cd/F49540_01/DOC/server.815/a67779/operator.htm#997970

正規表現については、REGEXP_LIKE()関数を試してください - http://www.regular-expressions.info/oracle.html

于 2012-05-06T21:45:06.450 に答える