有什么方法可以将变量设置为在 oracle SQL 中只接受两个值?
is there anytthing way to set a variable to accept only two values in oracle SQL?
这是我的代码,我想将我的变量 Account_Type
设置为仅接受两个值。
CREATE TABLE AccountRrequest(
RequestId NUMBER PRIMARY KEY,
Branch VARCHAR2(15),
Account_Type VARCHAR2(15), --> Account_Type
Title VARCHAR2(4),
FirstName VARCHAR2(15),
LastName VARCHAR2(15),
Birthday DATE DEFAULT (MM-DD-YYYY),
WorkPhone NUMBER(10),
HomePhone NUMBER(10),
Address VARCHAR2(30),
State VARCHAR2(15),
Zip NUMBER(10),
Email VARCHAR2(30),
Status VARCHAR2(10) DEFAULT 'Entered'
);
有一种方法,称为检查约束(参见第5-7行)(它被设置为接受type1
或type2
; 不允许使用其他值):
SQL> CREATE TABLE AccountRrequest
2 (
3 RequestId NUMBER PRIMARY KEY,
4 Branch VARCHAR2 (15),
5 Account_Type VARCHAR2 (15)
6 CONSTRAINT ch_acctype CHECK
7 (account_type IN ('type1', 'type2')),
8 Title VARCHAR2 (4),
9 FirstName VARCHAR2 (15),
10 LastName VARCHAR2 (15),
11 Birthday DATE, -- DEFAULT (MM - DD - YYYY),
12 WorkPhone NUMBER (10),
13 HomePhone NUMBER (10),
14 Address VARCHAR2 (30),
15 State VARCHAR2 (15),
16 Zip NUMBER (10),
17 Email VARCHAR2 (30),
18 Status VARCHAR2 (10) DEFAULT 'Entered'
19 );
Table created.
SQL> insert into accountrrequest (requestid, account_type) values (1, 'type3');
insert into accountrrequest (requestid, account_type) values (1, 'type3')
*
ERROR at line 1:
ORA-02290: check constraint (SCOTT.CH_ACCTYPE) violated
SQL> insert into accountrrequest (requestid, account_type) values (1, 'type1');
1 row created.
SQL>
此外,默认的“格式”无法按照您的方式进行设置,因此我在第 11 行对其进行了注释。默认值可以是例如sysdate
,但这在这里没有意义,因为我认为没有人是“今天”出生的,那一天您将向 table 中插入行。如果是这样,你会
Birthday DATE DEFAULT TRUNC(SYSDATE),
此外,在这种情况下,它不是一个接受某些值的“变量”——它是一个列。
最后,table 名字好像打错了。真的吗AccountRrequest
(在“Rr”请求中有 2 个“R”?)
有两种方法。
- 首先,您可以使用
CHECK
约束来限制值;
CREATE TABLE AccountRequest(
RequestId NUMBER PRIMARY KEY,
Branch VARCHAR2(15),
Account_Type VARCHAR2(15),
Title VARCHAR2(4),
FirstName VARCHAR2(15),
LastName VARCHAR2(15),
Birthday DATE,
WorkPhone VARCHAR2(10),
HomePhone VARCHAR2(10),
Address VARCHAR2(30),
State VARCHAR2(15),
Zip NUMBER(10),
Email VARCHAR2(30),
Status VARCHAR2(10) DEFAULT 'Entered',
CONSTRAINT AccountRequest__Acount_Type__CHK
CHECK ( Account_Type IN ( 'value1', 'value2' ) )
);
- 或者,您可以将 acceptable 值放在另一个 table 中并使用引用约束。
CREATE TABLE account_types (
account_type VARCHAR2(15),
CONSTRAINT account_types__account_type__pk PRIMARY KEY (account_type)
);
INSERT INTO Account_Types ( Account_Type ) VALUES ( 'value1' );
INSERT INTO Account_Types ( Account_Type ) VALUES ( 'value2' );
CREATE TABLE AccountRequest(
RequestId NUMBER PRIMARY KEY,
Branch VARCHAR2(15),
Account_Type VARCHAR2(15) NOT NULL,
Title VARCHAR2(4),
FirstName VARCHAR2(15),
LastName VARCHAR2(15),
Birthday DATE,
WorkPhone VARCHAR2(10),
HomePhone VARCHAR2(10),
Address VARCHAR2(30),
State VARCHAR2(15),
Zip NUMBER(10),
Email VARCHAR2(30),
Status VARCHAR2(10) DEFAULT 'Entered',
CONSTRAINT AccountRequest__Acount_Type__FK
FOREIGN KEY ( Account_Type ) REFERENCES Account_Types (Account_Type)
);
注意:您可能不想对 phone 数字使用 NUMBER
数据类型;尽管它们由数字字符组成,但它们通常以 0
开头,而 NUMBER
列不会存储它。
注意:DATE
是一种二进制数据类型,ALWAYS 具有年、月、日、小时、分钟和秒组件,并且NOT 是否存储任何格式。您不能使用 DEFAULT
设置格式。
这是我的代码,我想将我的变量 Account_Type
设置为仅接受两个值。
CREATE TABLE AccountRrequest(
RequestId NUMBER PRIMARY KEY,
Branch VARCHAR2(15),
Account_Type VARCHAR2(15), --> Account_Type
Title VARCHAR2(4),
FirstName VARCHAR2(15),
LastName VARCHAR2(15),
Birthday DATE DEFAULT (MM-DD-YYYY),
WorkPhone NUMBER(10),
HomePhone NUMBER(10),
Address VARCHAR2(30),
State VARCHAR2(15),
Zip NUMBER(10),
Email VARCHAR2(30),
Status VARCHAR2(10) DEFAULT 'Entered'
);
有一种方法,称为检查约束(参见第5-7行)(它被设置为接受type1
或type2
; 不允许使用其他值):
SQL> CREATE TABLE AccountRrequest
2 (
3 RequestId NUMBER PRIMARY KEY,
4 Branch VARCHAR2 (15),
5 Account_Type VARCHAR2 (15)
6 CONSTRAINT ch_acctype CHECK
7 (account_type IN ('type1', 'type2')),
8 Title VARCHAR2 (4),
9 FirstName VARCHAR2 (15),
10 LastName VARCHAR2 (15),
11 Birthday DATE, -- DEFAULT (MM - DD - YYYY),
12 WorkPhone NUMBER (10),
13 HomePhone NUMBER (10),
14 Address VARCHAR2 (30),
15 State VARCHAR2 (15),
16 Zip NUMBER (10),
17 Email VARCHAR2 (30),
18 Status VARCHAR2 (10) DEFAULT 'Entered'
19 );
Table created.
SQL> insert into accountrrequest (requestid, account_type) values (1, 'type3');
insert into accountrrequest (requestid, account_type) values (1, 'type3')
*
ERROR at line 1:
ORA-02290: check constraint (SCOTT.CH_ACCTYPE) violated
SQL> insert into accountrrequest (requestid, account_type) values (1, 'type1');
1 row created.
SQL>
此外,默认的“格式”无法按照您的方式进行设置,因此我在第 11 行对其进行了注释。默认值可以是例如sysdate
,但这在这里没有意义,因为我认为没有人是“今天”出生的,那一天您将向 table 中插入行。如果是这样,你会
Birthday DATE DEFAULT TRUNC(SYSDATE),
此外,在这种情况下,它不是一个接受某些值的“变量”——它是一个列。
最后,table 名字好像打错了。真的吗AccountRrequest
(在“Rr”请求中有 2 个“R”?)
有两种方法。
- 首先,您可以使用
CHECK
约束来限制值;
CREATE TABLE AccountRequest(
RequestId NUMBER PRIMARY KEY,
Branch VARCHAR2(15),
Account_Type VARCHAR2(15),
Title VARCHAR2(4),
FirstName VARCHAR2(15),
LastName VARCHAR2(15),
Birthday DATE,
WorkPhone VARCHAR2(10),
HomePhone VARCHAR2(10),
Address VARCHAR2(30),
State VARCHAR2(15),
Zip NUMBER(10),
Email VARCHAR2(30),
Status VARCHAR2(10) DEFAULT 'Entered',
CONSTRAINT AccountRequest__Acount_Type__CHK
CHECK ( Account_Type IN ( 'value1', 'value2' ) )
);
- 或者,您可以将 acceptable 值放在另一个 table 中并使用引用约束。
CREATE TABLE account_types (
account_type VARCHAR2(15),
CONSTRAINT account_types__account_type__pk PRIMARY KEY (account_type)
);
INSERT INTO Account_Types ( Account_Type ) VALUES ( 'value1' );
INSERT INTO Account_Types ( Account_Type ) VALUES ( 'value2' );
CREATE TABLE AccountRequest(
RequestId NUMBER PRIMARY KEY,
Branch VARCHAR2(15),
Account_Type VARCHAR2(15) NOT NULL,
Title VARCHAR2(4),
FirstName VARCHAR2(15),
LastName VARCHAR2(15),
Birthday DATE,
WorkPhone VARCHAR2(10),
HomePhone VARCHAR2(10),
Address VARCHAR2(30),
State VARCHAR2(15),
Zip NUMBER(10),
Email VARCHAR2(30),
Status VARCHAR2(10) DEFAULT 'Entered',
CONSTRAINT AccountRequest__Acount_Type__FK
FOREIGN KEY ( Account_Type ) REFERENCES Account_Types (Account_Type)
);
注意:您可能不想对 phone 数字使用 NUMBER
数据类型;尽管它们由数字字符组成,但它们通常以 0
开头,而 NUMBER
列不会存储它。
注意:DATE
是一种二进制数据类型,ALWAYS 具有年、月、日、小时、分钟和秒组件,并且NOT 是否存储任何格式。您不能使用 DEFAULT
设置格式。