Reputation: 1
Ok So I a looking at oracle for school and am having a lot of issues getting my database to create. I am using SQL developer. I am getting multiple errors for my inserts. Looking through I do not see anything wrong with the script. Can someone look it over and tell me what I did wrong? I am new here so go easy on me.
`DROP TABLE ENROLLMENT CASCADE CONSTRAINTS PURGE;
DROP TABLE COURSE_SECTION CASCADE CONSTRAINTS PURGE;
DROP TABLE COURSE CASCADE CONSTRAINTS PURGE;
DROP TABLE TERM CASCADE CONSTRAINTS PURGE;
DROP TABLE STUDENT CASCADE CONSTRAINTS PURGE;
DROP TABLE FACULTY CASCADE CONSTRAINTS PURGE;
DROP TABLE LOCATION CASCADE CONSTRAINTS PURGE;
CREATE TABLE Location
(Locid NUMBER (5) Primary Key,
Bldg_code VARCHAR2 (10) NOT NULL,
Room VARCHAR2 (6) NOT NULL,
Capacity NUMBER (5)
);
INSERT INTO Location VALUES
(53, BUS, 424, 45);
INSERT INTO Location VALUES
(54, BUS, 402, 35);
INSERT INTO Location VALUES
(55, BUS, 433, 100);
`
Upvotes: 0
Views: 95
Reputation: 6486
BUS has to be 'BUS':
INSERT INTO Location VALUES
(53, 'BUS', 424, 45);
INSERT INTO Location VALUES
(54, 'BUS', 402, 35);
INSERT INTO Location VALUES
(55, 'BUS', 433, 100);
When you pass a numeric value to a varchar2 column oracle convert it to varchar2 automatically:
First session:
SQL> conn hr/hr
Connected.
SQL> create table table_for_mine(
2 id varchar2(20)
3 );
Table created.
SQL> insert into table_for_mine values (123);
1 row created.
Second session:
SQL> conn / as sysdba
SQL> l
1* SELECT distinct member LOGFILENAME FROM V$LOGFILE
SQL> /
LOGFILENAME
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/orcl/redo01.log
/u01/app/oracle/oradata/orcl/redo03.log
/u01/app/oracle/oradata/orcl/redo02.log
SQL> execute DBMS_LOGMNR.ADD_LOGFILE('/u01/app/oracle/oradata/orcl/redo01.log');
PL/SQL procedure successfully completed.
SQL> execute DBMS_LOGMNR.ADD_LOGFILE('/u01/app/oracle/oradata/orcl/redo02.log');
PL/SQL procedure successfully completed.
SQL> execute DBMS_LOGMNR.ADD_LOGFILE('/u01/app/oracle/oradata/orcl/redo03.log');
PL/SQL procedure successfully completed.
SQL> execute DBMS_LOGMNR.START_LOGMNR (options => dbms_logmnr.dict_from_online_catalog);
PL/SQL procedure successfully completed.
SQL> select sql_redo from v$logmnr_contents where table_name = 'TABLE_FOR_MINE' and sql_redo like 'insert%';
SQL_REDO
--------------------------------------------------------------------------------
insert into "HR"."TABLE_FOR_MINE"("ID") values ('123');
SQL> execute DBMS_LOGMNR.END_LOGMNR();
PL/SQL procedure successfully completed.
As you can see, Oracle added single quotes to your numeric value and wrote it to the online redo log file. So if there is a blackout, next time Oracle startups he will execute this command:
insert into "HR"."TABLE_FOR_MINE"("ID") values ('123');
And it doesn't matter if you passed just the numeric value: 123 or the string value: '123'
Upvotes: 0
Reputation: 919
Your VARCHAR2 values need to be in single quotes:
insert into location values
(53, 'BUS', '424', 45);
etc...
Upvotes: 1