** When a public synonym has been created for an object, the synonym should be used instead of . . can be resolved in SQL*PLUS but not in PL/SQL. Since synonym is owned by 'PUBLIC', one can argue . can not be resolved in PL/SQL. It is not clear how SQL*PLUS interprete .. SQL> conn jyang/jyang@athena Connected. SQL> grant select on test1 to scott; Grant succeeded. SQL> drop public synonym test1_syn; drop public synonym test1_syn * ERROR at line 1: ORA-01432: public synonym to be dropped does not exist SQL> create public synonym test1_syn for test1; Synonym created. SQL> SQL> conn scott/tiger@athena Connected. SQL> desc jyang.test1 Name Null? Type ----------------------------------------- -------- ---------------------------- C1 VARCHAR2(2) C2 NUMBER(1) SUMC2 NUMBER(5) SQL> desc jyang.test1_syn Name Null? Type ----------------------------------------- -------- ---------------------------- C1 VARCHAR2(2) C2 NUMBER(1) SUMC2 NUMBER(5) SQL> desc test1_syn Name Null? Type ----------------------------------------- -------- ---------------------------- C1 VARCHAR2(2) C2 NUMBER(1) SUMC2 NUMBER(5) SQL> SQL> set serveroutput on SQL> declare 2 x number; 3 begin 4 select count(1) into x from jyang.test1; 5 dbms_output.put_line('count jyang.test1= '||x); 6 select count(1) into x from test1_syn; 7 dbms_output.put_line('count test1_syn= '||x); 8 end; 9 / count jyang.test1= 23 count test1_syn= 23 PL/SQL procedure successfully completed. SQL> SQL> declare 2 x number; 3 begin 4 select count(1) into x from jyang.test1_syn; 5 dbms_output.put_line('count jyang.test1_syn= '||x); 6 end; 7 / select count(1) into x from jyang.test1_syn; * ERROR at line 4: ORA-06550: line 4, column 35: PL/SQL: ORA-00942: table or view does not exist ORA-06550: line 4, column 1: PL/SQL: SQL Statement ignored SQL> SQL> conn jyang/jyang@athena Connected. SQL> drop public synonym test1_syn; Synonym dropped. SQL> create public synonym test1_syn for jyang.test1; Synonym created. SQL> SQL> conn scott/tiger@athena Connected. SQL> desc jyang.test1_syn Name Null? Type ----------------------------------------- -------- ---------------------------- C1 VARCHAR2(2) C2 NUMBER(1) SUMC2 NUMBER(5) SQL> desc test1_syn Name Null? Type ----------------------------------------- -------- ---------------------------- C1 VARCHAR2(2) C2 NUMBER(1) SUMC2 NUMBER(5) SQL> SQL> set serveroutput on SQL> declare 2 x number; 3 begin 4 select count(1) into x from test1_syn; 5 dbms_output.put_line('count test1_syn= '||x); 6 end; 7 / count test1_syn= 23 PL/SQL procedure successfully completed. SQL> declare 2 x number; 3 begin 4 select count(1) into x from jyang.test1_syn; 5 dbms_output.put_line('count jyang.test1_syn= '||x); 6 end; 7 / select count(1) into x from jyang.test1_syn; * ERROR at line 4: ORA-06550: line 4, column 35: PL/SQL: ORA-00942: table or view does not exist ORA-06550: line 4, column 1: PL/SQL: SQL Statement ignored SQL> SQL> conn jyang/jyang@athena Connected. SQL> drop public synonym test1_syn; Synonym dropped. SQL> SQL> spool off