Suppose I have schemas A and B.
In schema A I would like to call package X in schema B. However, there exists a package B in schema A.
A:
package B
B:
package X
When I call from schema A:
begin b.x.foo(); end
it looks for procedure X in package B, i.e. A.B.X(), and gets an error.
How can I fully qualify the call to force B to be considered a schema name?
update:
- It does seem there’s no way to scope the reference to refer to
b.x.foo. CREATE SYNONYM B_X for B.Xworks.B_X.foo()calls the procedure in schema B.
I don’t think you can. From the PL/SQL User’s Guide:
“The name resolution rules for PL/SQL and SQL are similar. You can avoid the few differences if you follow the capture avoidance rules. For compatibility, the SQL rules are more permissive than the PL/SQL rules. SQL rules, which are mostly context sensitive, recognize as legal more situations and DML statements than the PL/SQL rules.
The second bullet above applies. Since the object “B” exists in schema A, that’s what the reference resolves to.