Hii All,
I'm trying to drop a table dynamically irrespective of its existence in a procedure. Its working fine when table exists but when table doesn't exist I'm facing following error
ORA-00942: table or view does not exist
I made use of pragma exception_init and modified my code as below
Create or replace Procedure sp_FSASA_FEEDUPLOAD_process
(
p_test_dir in varchar2,
p_feed_file_name in varchar2
)
is
l_exttable_str varchar2(32000) ;
l_log_file constant varchar2(200) := 'logfile_rgh.log';
l_table_doesnt_exist Exception;
pragma exception_init(l_table_doesnt_exist,-00492);
Begin
Begin
execute immediate 'drop table FSASA_FEEDUPLOAD_EXT purge' ;
Exception
when l_table_doesnt_exist then
null;
End;
l_exttable_str := 'Create table FSASA_FEEDUPLOAD_EXT ';
l_exttable_str := l_exttable_str||' ( ';
l_exttable_str := l_exttable_str||' Category_No varchar2(1), ';
l_exttable_str := l_exttable_str||' Financial_Category varchar2(300), ';
l_exttable_str := l_exttable_str||' GFCID number, ';
l_exttable_str := l_exttable_str||' Balance number(34,14), ';
l_exttable_str := l_exttable_str||' Refernce_no varchar2(20), ';
l_exttable_str := l_exttable_str||' Account_no varchar2(20), ';
l_exttable_str := l_exttable_str||' ce_trans_id varchar2(20) ';
l_exttable_str := l_exttable_str||' ) ';
l_exttable_str := l_exttable_str||' Organization external ';
l_exttable_str := l_exttable_str||' ( ';
l_exttable_str := l_exttable_str||' type oracle_loader ';
l_exttable_str := l_exttable_str||' default directory '||p_test_dir;
l_exttable_str := l_exttable_str||' Access parameters ';
l_exttable_str := l_exttable_str||' ( ';
l_exttable_str := l_exttable_str||' records delimited by newline ';
l_exttable_str := l_exttable_str||'BADFILE '||q'[']'||p_test_dir||q'[']'||':'||q'[']'||'feed.bad '||q'[']' ;
l_exttable_str := l_exttable_str||'LOGFILE '||q'[']'||p_test_dir||q'[']'||':'||q'[']'||':feed.log '||q'[']' ;
l_exttable_str := l_exttable_str||q'[FIELDS TERMINATED BY X'09']';
l_exttable_str := l_exttable_str||' missing field values are null ';
l_exttable_str := l_exttable_str||')location('||q'[']'||p_feed_file_name||q'[']';
l_exttable_str := l_exttable_str||')' ;
l_exttable_str := l_exttable_str||' )Reject limit unlimited ';
dbg_print(l_log_file,'l_exttable_str : '||l_exttable_str);
execute immediate l_exttable_str;
End;
But still I'm unable to get rid of it. Pls help me.
1)I need to drop it as I need to immediately create table with different file name and from different path.
2)The last thing I don't like to do is to check the table name in USER_OBJECTS and then drop.
3)Also suggest me whether creating an external table dynamically is correct approach or not.
4)Till now we were using utl_file for reading feed file but I'm much interested in using EXTERNAL TABLE concept.
5)As the filename and path gets changed I need to create my external table at runtime.
please suggest me whether I can alter my filename and path at runtime