Я пытаюсь создать таблицу с ограничением по дате, которая сделает значение даты MM/YY для даты истечения срока действия кредитной карты. Когда я пытаюсь создать таблицу ниже я получаю сообщение об ошибке:Создание таблицы с датой проверки кода - Oracle PL SQL
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;
'CHECK TO_CHAR (exp_date, 'MM/YY'),' не имеет смысла. Вам нужно сравнить результат вызова 'to_char()' с _something_ (как и с другими ограничениями). Также: ваш параметр '11/19' не является допустимой датой. Подробнее о том, как написать правильный лимит даты, см. В руководстве: https://docs.oracle.com/cd/E11882_01/server.112/e41084/sql_elements003.htm#SQLRF51062 –