I keep getting a primary key violation in the following code. If I drop the primary key in the Times
table, the everything populates as expected but I have to have a primary key. In my CASE
statement, I tried to remove the sale_day
field but then received a violation for inserting a NULL
in the primary key. In my cursor, you will see reference to a Sales
table, this table contains the sale_date
field that populates the sale_day
field in the Times
table. I am lost on how to proceed.
SQL> CREATE TABLE Times (
2 sale_day DATE NOT NULL,
3 day_type VARCHAR2(50) NOT NULL,
4 PRIMARY KEY (sale_day));
Table created.
SQL>
SQL>
SQL> CREATE OR REPLACE PROCEDURE Time_Procedure
2 AS
3 l_sale_date date;
4 temp_value varchar2(5);
5 CURSOR c1 IS SELECT SALE_DATE FROM SALES;
6
7 BEGIN
8 OPEN c1;
9 LOOP
10 FETCH c1 INTO l_sale_date;
11 EXIT WHEN c1%NOTFOUND;
12 SELECT to_char(to_date(l_sale_date), 'DY') into temp_value from dual;
13 CASE
14 WHEN l_sale_date LIKE '%-JAN-01' OR l_sale_date LIKE '%-JAN-21' OR l_sale_date LIKE '%-FEB-18' OR l_sale_date LIKE '%-MAY-28'
15 OR l_sale_date LIKE '%-JUL-04' OR l_sale_date LIKE '%-SEP-03' OR l_sale_date LIKE '%-OCT-08' OR l_sale_date LIKE '%-NOV-11'
16 OR l_sale_date LIKE '%-NOV-22' OR l_sale_date LIKE '%-DEC-25' THEN
17 INSERT INTO Times values(l_sale_date,'Holiday');
18 WHEN temp_value='MON' OR temp_value ='TUE' OR temp_value='WED' OR temp_value='THU' OR temp_value='FRI' THEN
19 INSERT INTO Times values (l_sale_date,'Weekday');
20 ELSE
21 INSERT INTO Times values (l_sale_date, 'Weekend');
22 END CASE;
23 END LOOP;
24 CLOSE c1;
25 END;
26 /
Procedure created.
SQL>
SQL> /* Populate table*/
SQL>
SQL> BEGIN
2 Time_Procedure;
3 END;
4 /
BEGIN
*
ERROR at line 1:
ORA-00001: unique constraint (SDEV350USER.SYS_C0013043) violated
ORA-06512: at "SDEV350USER.TIME_PROCEDURE", line 19
ORA-06512: at line 2