Reputation: 965
I have a problem trying to run this script where I got the error:
ORA-00001: unique constraint (constraint_name) violated
So, the thing is can't insert date into the table, and other error is:
ORA-01438: value larger than specified precision allowed for this column
CREATE TABLE TEST
( TEST_ID INT NOT NULL,
COMPONENTS VARCHAR2(30) NOT NULL,
MATTER VARCHAR2(2) NOT NULL,
LIC NUMBER(9, 2),
MIC NUMBER(9, 2),
UIP NUMBER(9, 2),
CONSTRAINT TEST_pk PRIMARY KEY (TEST_ID));
--SEQUENCE TEST_ID
CREATE SEQUENCE SEQ_TEST_ID
START WITH 1
INCREMENT BY 1
MINVALUE 1
MAXVALUE 9999;
--INSERTING VALUE TO TABLE
INSERT ALL
INTO TEST (TEST_ID,COMPONENTS, MATTER, LIC, MIC, UIP) VALUES (SEQ_TEST_ID.NEXTVAL,'Food waste','OG','50.50','39.00','13.00')
INTO TEST (TEST_ID,COMPONENTS, MATTER, LIC, MIC, UIP) VALUES (SEQ_TEST_ID.NEXTVAL,'Paper' ,'OG','05.50','19.00','32.50')
INTO TEST (TEST_ID,COMPONENTS, MATTER, LIC, MIC, UIP) VALUES (SEQ_TEST_ID.NEXTVAL,'Cardboard' ,'OG','00.00','00.00','10.00')
INTO TEST (TEST_ID,COMPONENTS, MATTER, LIC, MIC, UIP) VALUES (SEQ_TEST_ID.NEXTVAL,'Plastic' ,'OG','03.00','04.00','00.00')
INTO TEST (TEST_ID,COMPONENTS, MATTER, LIC, MIC, UIP) VALUES (SEQ_TEST_ID.NEXTVAL,'Textiles' ,'OG','03.00','06.00','04.00')
INTO TEST (TEST_ID,COMPONENTS, MATTER, LIC, MIC, UIP) VALUES (SEQ_TEST_ID.NEXTVAL,'Ruber' ,'OG','03.00','00.00','01.00')
INTO TEST (TEST_ID,COMPONENTS, MATTER, LIC, MIC, UIP) VALUES (SEQ_TEST_ID.NEXTVAL,'Leather' ,'OG','03.00','02.50','01.00')
INTO TEST (TEST_ID,COMPONENTS, MATTER, LIC, MIC, UIP) VALUES (SEQ_TEST_ID.NEXTVAL,'Yard waste' ,'OG','00.00','00.00','15.00')
INTO TEST (TEST_ID,COMPONENTS, MATTER, LIC, MIC, UIP) VALUES (SEQ_TEST_ID.NEXTVAL,'Wood' ,'OG','03.00','05.50','02.50')
INTO TEST (TEST_ID,COMPONENTS, MATTER, LIC, MIC, UIP) VALUES (SEQ_TEST_ID.NEXTVAL,'Misc. Organic','OG','03.00','04.00','00.00')
INTO TEST (TEST_ID,COMPONENTS, MATTER, LIC, MIC, UIP) VALUES (SEQ_TEST_ID.NEXTVAL,'Glass' ,'IG','05.50','05.50','08.00')
INTO TEST (TEST_ID,COMPONENTS, MATTER, LIC, MIC, UIP) VALUES (SEQ_TEST_ID.NEXTVAL,'Tin Cans' ,'IG','00.50','00.50','05.00')
INTO TEST (TEST_ID,COMPONENTS, MATTER, LIC, MIC, UIP) VALUES (SEQ_TEST_ID.NEXTVAL,'Aluminum' ,'IG','03.00','03.00','00.50')
INTO TEST (TEST_ID,COMPONENTS, MATTER, LIC, MIC, UIP) VALUES (SEQ_TEST_ID.NEXTVAL,'Other metals' ,'IG','00.00','00.00','02.50')
INTO TEST (TEST_ID,COMPONENTS, MATTER, LIC, MIC, UIP) VALUES (SEQ_TEST_ID.NEXTVAL,'Drit,ash,etc' ,'IG','20.50','15.50','05.00')
SELECT * FROM DUAL;
Upvotes: 0
Views: 508
Reputation: 27
you can increaseur sequence cache size to 200,the default is 20.
alter sequence SEQ_TEST_ID cache 200;
try agian.
Upvotes: 1
Reputation: 10648
The error message is because of extra parentheses in int()
.
SQL> create table foo(f int());
create table foo(f int())
*
ERROR at line 1:
ORA-00907: missing right parenthesis
SQL> create table foo(f int);
Table created.
SQL>
Btw. the question has nothing to do with PL/SQL, it is a plain Oracle SQL issue.
Upvotes: 0
Reputation: 4538
If you are creating table in oracle, then AUTO_INCREMENT
is not supported.
Create the table using MSW_ID
as number and create a sequence to use its value in your table as.
CREATE TABLE MSW
( MSW_ID number,
COMPONENTS VARCHAR2(15) NOT NULL,
MATTER VARCHAR2(2) NOT NULL,
LIC NUMBER(4, 2),
MIC NUMBER(4, 2),
UIP NUMBER(4, 2),
CONSTRAINT NSW_pk PRIMARY KEY (MSW_ID));
You can learn more on sequences here;
CREATE SEQUENCE SEQ_MSW_ID
START WITH 1
INCREMENT BY 1
MINVALUE 1
MAXVALUE 99999999999;
and then you insert query becomes
INSERT INTO MSW ( MSW_ID, COMPONENTS, MATTER, LIC, MIC, UIP) VALUES
(SEQ_MSW_ID.NEXTVAL, 'Food waste' ,'OG','50.50','39.00','13.00'); --> semicolon
INSERT INTO MSW ( MSW_ID, COMPONENTS, MATTER, LIC, MIC, UIP) VALUES
(SEQ_MSW_ID.NEXTVAL, 'Paper' ,'OG','05.50','19.00','32.50'); --> semicolon
.
.
.
INSERT INTO MSW ( MSW_ID, COMPONENTS, MATTER, LIC, MIC, UIP) VALUES
(SEQ_MSW_ID.NEXTVAL, 'Drit,ash,etc' ,'IG','20.50','15.50','05.00'); --> semicolon
Or use insert all as a single statement as
INSERT ALL
INTO MSW ( MSW_ID, COMPONENTS, MATTER, LIC, MIC, UIP) VALUES
(SEQ_MSW_ID.NEXTVAL, 'Food waste' ,'OG','50.50','39.00','13.00')
INTO MSW ( MSW_ID, COMPONENTS, MATTER, LIC, MIC, UIP) VALUES
(SEQ_MSW_ID.NEXTVAL, 'Paper' ,'OG','05.50','19.00','32.50')
.
.
.
INTO MSW ( MSW_ID, COMPONENTS, MATTER, LIC, MIC, UIP) VALUES
(SEQ_MSW_ID.NEXTVAL, 'Drit,ash,etc' ,'IG','20.50','15.50','05.00')
SELECT * FROM DUAL; --> semicolon
Upvotes: 0