首页 > 解决方案 > 有什么方法可以设置一个变量以在 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'
);  

标签: sqloracleoracle11g

解决方案


有一种方法,称为检查约束(参见第 5 - 7 行)(设置为接受type1type2;其他值是不允许的):

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 行对其进行了评论。默认值可以是 eg sysdate,但在这里没有意义,因为我认为没有人是“今天”出生的,即您将在该表中插入行的那一天。如果是这样,你会

Birthday       DATE DEFAULT TRUNC(SYSDATE),

此外,在这种情况下,它不是接受某些值的“变量” - 它是column

最后,看起来表名有错字。真的AccountRrequest吗(“Rr”请求中有 2 个“R”?)


推荐阅读