Главная страница | назад





Article #19507: Oracle database link, cursor, ORA-03106: fatal two-task communication protocol error

 Question and Answer Database
FAQ: FAQ4507B — Oracle database link, cursor, ORA-03106: fatal two-task communication protocol error
Category: Database (Oracle)
Platform: All-32Bit
Product: All-CBuilder, BC++5.x, C++Builder1.0, C++Builder3.x, C++Builder4.x, Delphi2.x, Delphi3.x, Delphi4.x, VdBase7.x,
Question:
Why am I receiving the Oracle error ORA-03106: "fatal two-task
communication protocol error" when using an Oracle database link
and Oracle cursors?
Answer:
SQL> print rc1
ERROR:
ORA-03106: fatal two-task communication protocol error
ORA-02063: preceding line from MARSLNK
As indicated in the SQL Plus output above this problem can be
reproduced without using the BDE and/or BDE clients (Delphi,
BCB, etc.).
The example SQL Plus output shows examples show the creation
of an Oracle database link, synonym, stored procedure, package,
package body, along with the execution and "printing" of the
Oracle cursor data.
===========================
create public database link MARSLNK using 'srvr_tcp.borland.world'
===========================
EXECUTE PROCEDURE AND FETCH DATA FROM CURSORS VIA SQL*PLUS:
variable rctl refcursor;
execute cursortest_4(:rctl);
print rctl
variable rc1 refcursor;
execute cursortest_2(:rc1);
print rc1
===========================
create or replace procedure cursortest_4 (rc1 in out DMOD.rctl) AS
begin
open rc1 for
SELECT CUSTOMER_N, NAME
FROM IDXCUSTM
ORDER BY UPPER(NAME);
end;
===========================
create or replace procedure cursortest_2
(rc1 in out cursorpack.rctl) AS
begin
open rc1 for
SELECT *
FROM IDXCUSTM;
end;
===========================
create or replace package cursorpack IS
type rctl is ref cursor return IDXCUSTM%rowtype;
end;
===========================
create or replace PACKAGE DMOD
IS
type rctl is ref cursor;
end;
===========================
Log in to the Oracle server as the administrator to create the
public database link:
SQL*Plus: Release 3.3.4.0.0 — Production on Thu Oct 22 16:36:15 1998
Copyright (c) Oracle Corporation 1979, 1996. All rights reserved.
Connected to:
Oracle7 Server Release 7.3.4.0.0 — Production
With the distributed, replication and parallel query options
PL/SQL Release 2.3.4.0.0 — Production
SQL> CREATE PUBLIC DATABASE LINK MARSLNK USING 'srvr_tcp.borland.world';
Database link created.
===========================
Log into the Oracle server as user to create the synonym, packages
and procedures followed by execution of the procedures and
printing/fetching the cursor rows:
SQL*Plus: Release 3.3.4.0.0 — Production on Thu Oct 22 16:40:35 1998
Copyright (c) Oracle Corporation 1979, 1996. All rights reserved.
Connected to:
Oracle7 Server Release 7.3.4.0.0 — Production
With the distributed, replication and parallel query options
PL/SQL Release 2.3.4.0.0 — Production
SQL> CREATE SYNONYM IDXCUSTM FOR IDXCUST@MARSLNK;
Synonym created.
SQL> create or replace PACKAGE DMOD
2
2 IS
3
3 type rctl is ref cursor;
4
4 end;
5 /
Package created.
SQL> create or replace package cursorpack IS
2
2 type rctl is ref cursor return IDXCUSTM%rowtype;
3
3 end;
4 /
Package created.
SQL> create or replace procedure cursortest_2
2
2 (rc1 in out cursorpack.rctl) AS
3
3 begin
4
4 open rc1 for
5
5 SELECT *
6
6 FROM IDXCUSTM;
7
7 end;
8 /
Procedure created.
SQL> create or replace procedure cursortest_4 (rc1 in out DMOD.rctl) AS
2
2 begin
3
3 open rc1 for
4
4 SELECT CUSTOMER_N, NAME
5
5 FROM IDXCUSTM
6
6 ORDER BY UPPER(NAME);
7
7 end;
8 /
Procedure created.
SQL> variable rctl refcursor;
SQL> execute cursortest_4(:rctl);
PL/SQL procedure successfully completed.
SQL> print rctl
ERROR:
ORA-03106: fatal two-task communication protocol error
ORA-02063: preceding line from MARSLNK
no rows selected
SQL> variable rc1 refcursor;
SQL> execute cursortest_2(:rc1);
PL/SQL procedure successfully completed.
SQL> print rc1
ERROR:
ORA-03106: fatal two-task communication protocol error
ORA-02063: preceding line from MARSLNK
no rows selected
SQL>
7/13/99 10:49:35 AM

Last Modified: 01-SEP-99