yangtingkun
===========================================================
在远端和本地存储过程间传递数组
===========================================================

简单描述一下在远端存储过程和本地存储过程之间传递数组的方法。


对于本地的存储过程直接,直接传递数组是很容易的:

SQL> CREATE OR REPLACE PACKAGE PA_TEST AS
2 TYPE T_NAME IS TABLE OF VARCHAR2(30);
3 END;
4 /

程序包已创建。

SQL> CREATE OR REPLACE PROCEDURE P_TEST (P_NAME OUT PA_TEST.T_NAME) AS
2 BEGIN
3 SELECT TABLE_NAME BULK COLLECT INTO P_NAME FROM USER_TABLES;
4 END;
5 /

过程已创建。

SQL> SET SERVEROUT ON SIZE 1000000
SQL> DECLARE
2 V_NAME PA_TEST.T_NAME;
3 BEGIN
4 P_TEST(V_NAME);
5 FOR I IN 1..V_NAME.COUNT LOOP
6 DBMS_OUTPUT.PUT_LINE(V_NAME(I));
7 END LOOP;
8 END;
9 /
T_BLOB
T
T_PK
MLOG$_T
MLOG$_T_BLOB
MLOG$_T_PK
T2
RUPD$_T_PK

PL/SQL 过程已成功完成。

不过同样的方法并不适应于远端存储过程调用:

SQL> SELECT * FROM GLOBAL_NAME;

GLOBAL_NAME
------------------------------------------------
YTK102.YTK_THINKPAD

SQL> CONN YANGTK/YANGTK@TEST1已连接。
SQL> CREATE DATABASE LINK YTK102.YTK_THINKPAD CONNECT TO YANGTK IDENTIFIED BY YANGTK USING 'YTK102';

数据库链接已创建。

SQL> CREATE OR REPLACE PACKAGE PA_TEST AS
2 TYPE T_NAME IS TABLE OF VARCHAR2(30);
3 END;
4 /

程序包已创建。

SQL> SET SERVEROUT ON SIZE 1000000
SQL> DECLARE
2 V_NAME PA_TEST.T_NAME;
3 BEGIN
4 P_TEST@YTK102.YTK_THINKPAD(V_NAME);
5 FOR I IN 1..V_NAME.COUNT LOOP
6 DBMS_OUTPUT.PUT_LINE(V_NAME(I));
7 END LOOP;
8 END;
9 /
P_TEST@YTK102.YTK_THINKPAD(V_NAME);
*
4 行出现错误:
ORA-06550:
4 , 2
:
PLS-00306:
调用 'P_TEST' 时参数个数或类型错误

ORA-06550:
4 , 2 :
PL/SQL: Statement ignored

对于远端存储过程,即使传递完全相同的集合数据类型,也是会报错的,这是由于变量的定义在本地,Oracle无法确定本地变量和远端变量是相同的。

对于这种情况,可以利用远端类型来进行变量的声明:

SQL> DECLARE
2 V_NAME PA_TEST.T_NAME@YTK102.YTK_THINKPAD;
3 BEGIN
4 P_TEST@YTK102.YTK_THINKPAD(V_NAME);
5 FOR I IN 1..V_NAME.COUNT LOOP
6 DBMS_OUTPUT.PUT_LINE(V_NAME(I));
7 END LOOP;
8 END;
9 /
T_BLOB
T
T_PK
MLOG$_T
MLOG$_T_BLOB
MLOG$_T_PK
T2
RUPD$_T_PK

PL/SQL 过程已成功完成。

yangtingkun 发表于:2007.10.13 22:56 ::分类: ( ORACLE ) ::阅读:(724次) :: 评论 (0)

发表评论
标题

在此添加评论
表情符号: smile laughing tongue angry crying sad wassat wink

称呼

邮箱地址(可选)

个人主页(可选)

 authimage


切换风格
新闻聚合
博客日历
文章归档...
最新发表...
最新评论...
最多阅读文章...
最多评论文章...
博客统计...
Blog信息
网站链接...