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'