Here's some simple variations
-- db1
SQL> create or replace
2 package pkg is
3 type my_obj is record ( x1 int, y1 int);
4 function f return my_obj;
5 procedure p1(r in out my_obj);
6 procedure p2(x1 in out int, y1 in out int);
7 end;
8 /
Package created.
SQL>
SQL> create or replace
2 package body pkg is
3 function f return my_obj is
4 r my_obj;
5 begin
6 r.x1 := 12;
7 r.y1 := 12;
8 return r;
9 end;
10
11 procedure p1(r in out my_obj) is
12 begin
13 r.x1 := 12;
14 r.y1 := 12;
15 end;
16
17 procedure p2(x1 in out int, y1 in out int) is
18 begin
19 x1 := 12;
20 y1 := 12;
21 end;
22
23 end;
24 /
Package body created.
and then on the other db
SQL> create or replace
2 procedure my_proc is
3 l_obj pkg.my_obj@db11;
4
5 l_x int;
6 l_y int;
7 begin
8 l_obj := pkg.f@db11;
9
10 pkg.p1@db11(l_obj);
11
12 pkg.p2@db11(l_obj.x1,l_obj.y1);
13
14 pkg.p2@db11(l_x,l_y);
15 end;
16 /
Procedure created.
SQL> sho err
No errors.
SQL>
SQL> exec my_proc
PL/SQL procedure successfully completed.