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]))
'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);这是我输入的值,它给出了错误。我不在计算机旁,因此无法测试它,但您的邮政编码包含空格,而约束没有空格。