Recently I faced one of familiar Oracle error
ORA-00942: table or view does not exist
I got it in while compiling procedure, because eventually I found it became invalid state.
I tried to create new directory and give read/write permission on it and change inside procedure, but it still was INVALID. But instead
inside procedure I put hard code path of that directory it was success.
Like:
create or replace procedure `procedure_name`
(
`variable` IN varchar2
)
AS
`variable` varchar2(2000) := '/../../dir';
begin
select ... into `variable` from dba_directories whhere directnory_name = '...';
....
....
end;
/
But it is not make sense. Then after google I found to overcome that issue, all I need to grant ALL on dba_directories to user not only READ, WRITE.
As SYS
grant all on dba_diretories to `user`'
then I was able to compile successfully original procedure, no longer need to manipulate procedure.
SQL> set linesize 300
SQL> col object_name for a50
SQL> col owner for a30
SQL> select owner, object_name, object_type from dba_objects where status = 'INVALID'; 2
OWNER OBJECT_NAME OBJECT_TYPE
---------------------- -------------------------------- -----------------
`USER` `PROCEDURE_NAME` PROCEDURE
SQL> alter procedure `user`.`precedure_name` compile;
Procedure altered.
SQL> select owner, object_name, object_type from dba_objects where status = 'INVALID';
no rows selected