使用CC Exp Date创建表 - Oracle PL SQL

时间:2015-11-17 20:58:43

标签: oracle date stored-procedures credit-card

我正在尝试创建一个具有日期约束的表,该表将使信用卡到期日期的日期值为MM / YY。当我尝试创建下表时,我收到错误:

  CONSTRAINT exp_check CHECK TO_CHAR(exp_date,'MM/YY'),
                       *
  ERROR at line 19: 
  ORA-00906: missing left parenthesis 


 Create table Orders    
 (o_id int NOT NULL,
 c_id int NOT NULL,
 p_id int NOT NULL,
 s_id int NOT NULL,
 order_date date DEFAULT sysdate,
 o_qty number NOT NULL,
 order_total number NOT NULL,
 card_type varchar2(50) NOT NULL,
 cc_number varchar2(50) NOT NULL,
 exp_date date NOT NULL,
 shipping_date date,
 shipping_status varchar2(50) DEFAULT 'Not Shipped Yet',
  UNIQUE (o_ID, c_ID, p_ID),
  CONSTRAINT order_ID PRIMARY KEY (O_ID),
 CONSTRAINT fk_cust_id FOREIGN KEY (C_ID) REFERENCES customers(C_ID),
 CONSTRAINT fk_ship_id FOREIGN KEY (S_ID) REFERENCES shipping(S_ID),
 CONSTRAINT qty_check CHECK (o_qty >= 0),
 CONSTRAINT exp_check CHECK TO_CHAR(exp_date,'MM/YY'),
 CONSTRAINT s_check CHECK (shipping_status IN 
 ('Not shipped yet', 'Shipped', 'Delivered'))
 ); 

一旦我能够创建表,我将创建一个执行存储过程,执行以下命令:

  SET SERVEROUTPUT ON;
  DECLARE
  i_result varchar2(100);
BEGIN
  place_order(2200,1,'Regular','VISA','1111-1111-2222-3333',11/19,1040,i_result);
 END;

2 个答案:

答案 0 :(得分:0)

date总有一天。月,年,小时,分钟和秒。您可以存储该月初的午夜日期并验证exp_date = trunc(exp_date, 'MM')。当您向用户显示值时,您可以使用to_char表达式以您希望的格式显示它。

或者,您可以以MM/YY格式存储字符串,并且您的检查约束可以对该字符串进行各种验证(即前两个字符是1到12之间的数字,第四个和第五个字符是a数字在15到25之间等。)

答案 1 :(得分:0)

正如其他人所说,Oracle中的DATE值始终包含YEAR,MONTH,DAY,HOURS,MINUTES和SECONDS字段。我想你想要做的是在EXP_DATE列中存储到期日的最后一天/小时/分钟/秒,例如如果卡上显示的到期时间是' 07/19'您希望在EXP_DATE字段中存储31-JUL-2019 23:59:59,这是该卡有效的最后一秒。然后,当您想要以通常的MM / YY格式显示到期日期时,您只需使用TO_CHAR格式化它,例如, TO_CHAR(EXP_DATE, 'MM/YY')

祝你好运。