Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 无法使用加拿大邮政编码和省所有上限_Database_Oracle_Plsql_Oracle10g_Plsqldeveloper - Fatal编程技术网

Database 无法使用加拿大邮政编码和省所有上限

Database 无法使用加拿大邮政编码和省所有上限,database,oracle,plsql,oracle10g,plsqldeveloper,Database,Oracle,Plsql,Oracle10g,Plsqldeveloper,我试图让我的PL/SQL代码运行,但我一直遇到问题。我试图让我的加拿大邮政编码有效,它不断给出获取错误SQL错误:ORA-02290:检查约束(ORCL2_21.CK_投资者_邮政编码)违反,该省需要两个字符,所有大写只能有效,它不会编译我的测试代码 Create table Investor ( Investor_Number Number(7,0) Constraint PK_Investor_Investor_Number Primary Key Constra

我试图让我的
PL/SQL
代码运行,但我一直遇到问题。我试图让我的加拿大邮政编码有效,它不断给出获取错误SQL错误:ORA-02290:检查约束(ORCL2_21.CK_投资者_邮政编码)违反,该省需要两个字符,所有大写只能有效,它不会编译我的测试代码

Create table Investor
(
  Investor_Number Number(7,0)
      Constraint PK_Investor_Investor_Number Primary Key
      Constraint NN_Investor_Investor_Number Not Null,
  First_Name Varchar2(25)
      Constraint NN_Investor_First_Name Not Null,
  Last_Name Varchar2(30)
      Constraint NN_Investor_Last_Name Not Null,    
  Street_Address Varchar2(35)
      Constraint NL_Investor_Street_Address Null,
  City Varchar2(25)
      Constraint NL_Investor_City Null,
  Province Char(2)
      Constraint CK_Investor_Province Check (Province in ('__'))
      Constraint CK_Investor_Province_Caps Check (Province = UPPER(province))
      Constraint NL_Investor_Province Null,
 Postal_Code Varchar2(7)
          Constraint CK_Investor_Postal_Code Check (REGEXP_like(Postal_Code,'[A-Z][0-9][A-Z][0-9][A-Z][0-9]')) --Having problem getting postal code to work on test inserts code!!!!!!
          Constraint NL_Investor_Postal_Code Null,
  Area_Code Number(3,0)
      Default '780'
      Constraint NN_Investor_Area_Code Not Null,
  Phone_Number Number(7,0) 
      Constraint NN_Investor_Phone_Number Not Null,
   Email_Address Varchar2(50)
      Constraint CK_Investor_Email_Address Check (REGEXP_LIKE (email_address, '^(\S+)\@(\S+)\.(\S+)$'))
      Constraint NN_Investor_Email_Address Not Null,
  Account_Number Number(7,0) Not Null,
      Constraint FK__Investor_Account_Number --Name of Constraint
      Foreign Key (Account_Number) -- Foreign Key Column name
      References Account(Account_Number)-- name of table and column trying to reference,
  );

下面是一个insert语句,它没有通过约束

INSERT INTO Investor (Investor_Number, First_Name, Last_Name, Street_Address, City, Province, Postal_Code, Area_Code, Phone_Number, Email_Address, Account_Number) 
VALUES (1004, 'Tobias', 'Schneider', '10222 102 ST', 'Edmonton', 'AB', 'T5P 1W1', 780, 4997766, 'pellentesque@freenet.com', 7200); 
它给出了SQL错误:

ORA-02290:违反检查约束(ORCL2_21.CK_投资者邮政编码)


首先,不清楚“弄错”是什么意思。你是不是有什么差错?如果是这样的话,它有助于准确地显示您所遇到的错误

第二,这对我来说很有用,因为我可以在删除account_number上的FK约束后创建表,因为我没有该表

第三,您有几个
NULL
约束,但我假设这些约束应该是
notnull
。否则,它们就没有意义了

第四,
不应该在中,而应该像一样

我不知道加拿大的邮政编码是什么样子。A0是有效的邮政编码吗

就我个人而言,我会去掉
CHAR
,改用
VARCHAR2
。不要使用
CHAR
。如果您的数据库是UTF-8,我还将使用长度类型指定列,如
VARCHAR2(25个字符)

编辑:
您的邮政编码中有空格,但您的正则表达式不允许。在第三个和第四个标记之间有一个空格,可以使其成为[A-Z][0-9][A-Z][0-9][A-Z][0-9]。

指定NULL约束根本没有用。默认情况下,列将允许空值,所以这样做没有意义

你说你的密码有问题;我没有:

SQL> create table investor
  2  ( Postal_Code Varchar2(7)
  3            Constraint CK_Investor_Postal_Code Check
  4            (REGEXP_like(Postal_Code,'[A-Z][0-9][A-Z][0-9][A-Z][0-9]'))
  5            --Having problem getting postal code to work on test inserts code!!!!!!
  6  );

Table created.

SQL> insert into investor values ('A1B2C3');

1 row created.

SQL> insert into investor values ('abcdef');
insert into investor values ('abcdef')
*
ERROR at line 1:
ORA-02290: check constraint (SCOTT.CK_INVESTOR_POSTAL_CODE) violated


SQL> insert into investor values ('123');
insert into investor values ('123')
*
ERROR at line 1:
ORA-02290: check constraint (SCOTT.CK_INVESTOR_POSTAL_CODE) violated


SQL> insert into investor values ('AAABBB');
insert into investor values ('AAABBB')
*
ERROR at line 1:
ORA-02290: check constraint (SCOTT.CK_INVESTOR_POSTAL_CODE) violated


SQL>

如果不提供您所做的操作(即,您试图在表中插入的值),则很难猜出错误所在。

您的示例邮政编码是
'T5P 1W1'
。您的正则表达式只强制字母和数字,不允许空格。因此,要么:

  • 您需要更改邮政编码值,使其为
    'T5P1W1'
  • 您需要更改正则表达式以包含空格,例如
    (类似REGEXP_(邮政编码,[A-Z][0-9][A-Z][0-9][A-Z][0-9]))

它需要为空,是的,加拿大邮政编码就是这种格式。im获取错误SQL错误:ORA-02290:检查约束(ORCL2\u 21.CK\u投资者\u邮政编码)violated@mohammedtarrabain-该错误仅表示您的检查约束拒绝了一个值。价值是多少?这是一个有效的邮政编码吗?@WilliamRobertson在投资者(投资者编号、名字、姓氏、街道地址、城市、省、邮政编码、区号、电话号码、电子邮件地址、账号)中插入值(1004,‘Tobias’、‘Schneider’、‘10222 102街’、‘Edmonton’、‘AB’、‘T5P 1W1’、‘780’、‘4997766’)pellentesque@freenet.com', 7200);我想你说的是
't5p1w1'
与regex
'A-Z][0-9][A-Z][0-9][A-Z][0-9][A-Z][0-9][A-Z][0-9]不匹配,正如eaolson指出的,这是因为空间。如果整个问题归结为一个正则表达式,你可以在一个正则表达式测试网站上检查它,比如“它不断给出错误”。请告诉我们您得到了什么错误。Oracle在运行时和编译时间上都有数以千计的错误。如果你想得到一个有用的答案,你需要提供足够的细节。显然,人们会试图猜测你遇到了什么问题,但实际上他们不应该猜测。
Check(Province in(“'uuu'))
对于
char(2)
列总是正确的。如果要确保其长度为两个字符,请将其设置为普通的
varchar2(2)
,然后检查长度或指定正则表达式。@mohammedtarrabin-请编辑您的问题以包含澄清或其他信息。特别是,请不要在评论中添加代码,因为缺少格式和丢失的布局使其太难阅读。插入投资者(投资者号码、名字、姓氏、街道地址、城市、省份、邮政编码、区号、电话号码、电子邮件地址、账号)值(1004,'Tobias','Schneider','10222 102 ST','Edmonton','AB','T5P 1W1','780,4997766,'pellentesque@freenet.com,7200);这是我输入的值,它给出了错误。我不在计算机旁,因此无法测试它,但您的邮政编码包含空格,而约束没有空格。