| Oracle FAQ | Your Portal to the Oracle Knowledge Grid | |
Home -> Community -> Usenet -> c.d.o.server -> Exceptions in stored procedure using DB link
Hi Everyone,
I have a problem with communication between 2 Oracle
servers. The first Oracle server (ORA) has stored
procedure GET_VHDKV which is accessing to another
Oracle server (ORA_VHDKV). ORA selects data from
2 tables of server ORA_VHDKV and converts them to
one table at the server ORA. Stored procedure uses
database link. All works fine except one event:
when ORA_VHDKV does not respond and GET_VHDKV is
executed, stored procedure GET_VHDKV does not
respond until ORA_VHDKV server is not running. Then
it generate an error
ORA-02068: following severe error from ORA_VHDKV
ORA-03113: end-of-file on communication channel
Why stored procedure does not generate an exception
when ORA_VHDKV does not respond? Why waits until
ORA_VHDKV is responding?
There is a code of stored procedure:
FUNCTION GET_VHDKV(D1 DATE, D2 DATE)
RETURN INTEGER IS
FLAG CHAR;
VALID CHAR;
ERR INTEGER;
I_REC VHDKV.AIARCTABLE_at_ORA_VHDKV%ROWTYPE;
REL_REC VHD.REL%ROWTYPE;
ERRMSG VARCHAR2(250);
CURSOR C1 IS
SELECT * FROM VHDKV.AIARCTABLE_at_ORA_VHDKV WHERE RTIME>D1 AND RTIME<D2
UNION
SELECT * FROM VHDKV.CIARCTABLE_at_ORA_VHDKV WHERE RTIME>D1 AND RTIME<D2;
CURSOR C2(STATNO_ NUMBER, VTYPE_ CHAR, INPUTNO_ NUMBER) IS
SELECT * FROM VHD.REL WHERE VTYPE=VTYPE_ AND ((STATNO=STATNO_ AND
INPUTNO=INPUTNO_) OR
(ALTSTATNO=STATNO_ AND
ALTINPUTNO=INPUTNO_));
OPEN C1;
LOOP
FETCH C1 INTO I_REC;
EXIT WHEN C1%NOTFOUND;
--DBMS_OUTPUT.PUT_LINE(I_REC.IDST || ' ' || I_REC.IDTP || ' ' ||
I_REC.IDLN || ' ' || I_REC.ATIME || ' ' || I_REC.RTIME);
OPEN C2(I_REC.IDST, TO_CHAR(I_REC.IDTP), I_REC.IDLN);
LOOP
FETCH C2 INTO REL_REC;
EXIT WHEN C2%NOTFOUND;
BEGIN
DBMS_OUTPUT.PUT_LINE('Before ARCEXC: ' || SQLERRM(SQLCODE));
ERR:=SQLCODE;
INSERT INTO VHD.ARCEXC VALUES (REL_REC.ADR1, REL_REC.ADR2,
I_REC.RTIME, FLAG, SIGN(BITAND(I_REC.PROP, 4)), I_REC.RVALUE, ERR);
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('After ARCEXC: ' || SQLERRM(SQLCODE));
NULL;
Robert Reich
reich_at_poh.cz
Received on Fri Aug 06 1999 - 04:44:30 CDT
![]() |
![]() |