Oracle 7.3.3 - 7.3.4
I was working on the problem when user called remote stored procedure (user - Oracle 7.3.3, procedure -- Oracle 7.3.4) using db_link. The code is like the next:
DECLARE
v_emply NUMBER(5) := 11111;
v_var1 number(2) := 111
v_sqlcode number(8);
v_sqlerrm varchar2(256);

BEGIN
CHECK_MSG@db_LINK.WORLD(v_emply,v_var1,v_sqlcode,v_sqlerrm);
END;

The return error code was:PLS-00905: object is invalid;
DB_LINK connected to user VIEWUSER. This user did not have direct EXECUTE privilege on the called procedure. EXECUTE privilege was given thru the role. I gave direct EXECUTE privilege. It did not help. So I gave direct execute privilege to all procedures that were called inside of CHECK_MSG. It also did not help -- the same error code. So I recompiled all of those stored procs. The same result. Then I gave direct privilege on all tables that are accessed thru the stored procedure and after that procedure started to work. I can understand everything except of the last step. Does anybody can explain to me why I should perform that last step?