Oracle中执行远端DBMS_LOB包中过程

简单描述执行远端的DBMS_LOB包的一些问题。

由于LOB的定位符无法跨数据库链使用,因此访问远端LOB对象的时候,需要调用远端的DBMS_LOB包中的过程,但是测试发现,即使调用远端的DBMS_LOB包中的过程,仍然可能出现问题。

SQL> CREATE TABLE T_LOB (ID NUMBER, CONTENTS CLOB);

表已创建。

SQL> DECLARE

2     V_LOB CLOB;

3  BEGIN

4     INSERT INTO T_LOB

5     VALUES (1, EMPTY_CLOB())

6     RETURN  CONTENTS INTO V_LOB;

7     FOR I IN 1..100 LOOP

8        DBMS_LOB.WRITEAPPEND(V_LOB, 32767, LPAD('A', 32767, 'A'));

9     END LOOP;

10  END;

11  /

PL/SQL过程已成功完成。

SQL> COMMIT;

提交完成。

SQL> SELECT DBMS_LOB.GETLENGTH(CONTENTS) FROM T_LOB;

DBMS_LOB.GETLENGTH(CONTENTS)

----------------------------

3276700

SQL> SELECT * FROM V$VERSION;

BANNER

----------------------------------------------------------------

Oracle Database10gEnterpriseEdition Release10.2.0.3.0 - 64bi

PL/SQL Release 10.2.0.3.0 - Production

CORE    10.2.0.3.0      Production

TNS for Linux: Version 10.2.0.3.0 - Production

NLSRTL Version 10.2.0.3.0 - Production

SQL> SELECT * FROM GLOBAL_NAME;

GLOBAL_NAME

----------------------------------------------------------------------------

TESTZJ

本栏目更多精彩内容:http://www.bianceng.cn/database/Oracle/

如果在远端数据库中,通过数据库链获取这个LOB字段的长度,直接通过DBMS_LOB.GETLENGTH肯定是行不通的:

SQL> SELECT * FROM GLOBAL_NAME;

GLOBAL_NAME

----------------------------------------------------------------------------------

TEST08

SQL> SELECT * FROM V$VERSION;

BANNER

----------------------------------------------------------------

Oracle Database10gEnterpriseEdition Release10.2.0.3.0 - 64bi

PL/SQL Release 10.2.0.3.0 - Production

CORE    10.2.0.3.0      Production

TNS for Linux: Version 10.2.0.3.0 - Production

NLSRTL Version 10.2.0.3.0 - Production

SQL> CREATE DATABASE LINK TESTZJ

2  CONNECT TO TEST

3  IDENTIFIED BY TEST

4  USING '172.25.13.231/TESTZJ';

Database link created.

SQL> SELECT COUNT(*) FROM T_LOB@TESTZJ;

COUNT(*)

----------

1

SQL> SELECT DBMS_LOB.GETLENGTH(CONTENTS) FROM T_LOB@TESTZJ;

SELECT DBMS_LOB.GETLENGTH(CONTENTS) FROM T_LOB@TESTZJ

*

ERROR at line 1:

ORA-22992: cannot use LOB locators selected from remote tables

尝试调用远端的DBMS_LOB包,但是仍然会导致错误的产生:

SQL> SELECT DBMS_LOB.GETLENGTH@TESTZJ(CONTENTS) FROM T_LOB@TESTZJ;

SELECT DBMS_LOB.GETLENGTH@TESTZJ(CONTENTS) FROM T_LOB@TESTZJ

*

ERROR at line 1:

ORA-22992: cannot use LOB locators selected from remote tables

按道理来说,虽然T_LOB是远端对象,但是DBMS_LOB调用的也是远端过程,LOB定位符的使用并没有跨越数据库,因此应该是可以得到结果的。

时间: 2024-11-16 12:39:53

Oracle中执行远端DBMS_LOB包中过程的相关文章

android中主活动中启动另外一个包中的活动,出现崩溃

问题描述 android中主活动中启动另外一个包中的活动,出现崩溃 在MainActivity中通过点击按钮启动另外一个包中的活动,点击是就出现崩溃,请各位大神指导一下,该怎么处理.谢谢 解决方案 一定是没在mainfest里注册 解决方案二: 请把代码和错误贴出来,这样才可能帮到你. ps:可能之一是被启动的Activity未在AndroidManifest.xml中注册

PHP 中执行排序与 MySQL 中排序_php技巧

此文首发在 InfoQ 中文站.作者:明灵(dragon) , Fenng . Note:要转载的朋友请注意注明这篇文章的第一作者!这篇文章是dragon 朋友来邮探讨后他做的一个总结.在 DB 中排序还是在 应用程序中排序是个很有趣的话题,dragon 第一份邮件中其实已经总结的很好了,我添加了一点建议而已.现在放上来,与大家共享.这篇文章也投稿到了 InfoQ 中文站 . Q:列出在 PHP 中执行排序要优于在 MYSQL 中排序的原因?给一些必须在MYSQL中排序的实例? A:通常来说,执

执行可运行jar包时读取jar包中的文件

可运行的jar包,都会在META-INF\MANIFEST.MF中设置Main-Class. 那么如何在jar包中读取其中的某个文件呢? 注意:是在可运行的jar包中读取该jar包中的文件,也就是说读取jar包中文件的这段代码在该jar包中  TestUrl类内容如下: Java代码   import java.io.IOException;   import java.io.InputStream;   import java.net.MalformedURLException;   impo

AS3 中的package(包)应用实例代码_Flash as3

包(package)的概念在AS2中就已经存在,它表示硬盘中的一个目录结构,该目录结构是用来分类存贮各种类文件的.在AS3中这个概念仍旧可以理解为是一个路径,或是目录结构,包的名称也就是你的类所在的目录位置. 如果类文件和fla文件保存在同一个目录位置中,那么就不需要为"包"指定一个名字.比如:我们先建立这样一个 MyMsg.as 类定义文件,文件中输入以下的代码: package {     public class MyMsg {          public function 

android jar 调用jar-关于Android工程引用jar包中的方法

问题描述 关于Android工程引用jar包中的方法 public class MainActivity extends Activity { private String a; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); new Test(a); } class

我是新人,怎样实现中mfc中实现对自己DLL中回调函数的接收

问题描述 我是新人,怎样实现中mfc中实现对自己DLL中回调函数的接收 我在消息函数中执行自己的DLL中的函数.正确的话是系统会执行该函数的响应函数,可在MFC中我的响应函数未被执行,这是为什么?? 解决方案 有什么提示错误?dll没有正确加载? 解决方案二: 没有提示什么,只是我调试根本没有进入过响应函数,程序还可以正常运行 解决方案三: 没有提示什么,只是我调试根本没有进入过响应函数,程序还可以正常运行

oracle 包,函数,过程,块的创建和执行及在java中执行(转)

  SQL> create or replace procedure sp_guocheng1 is--如果有这个名字就替换  2  begin--执行部分  3  insert into guocheng values('liyifeng','liyifeng');  4  end;  5  /  --执行的意思 Procedure created     显示错误SQL> show error;Errors for PROCEDURE LIYIFENG.SP_GUOCHENG1: LINE

PL/SQL --> 动态SQL调用包中函数或过程

      动态SQL主要是用于针对不同的条件或查询任务来生成不同的SQL语句.最常用的方法是直接使用EXECUTE IMMEDIATE来执行动态SQL语句字符串或字符串变量.但是对于系统自定义的包或用户自定的包其下的函数或过程,不能等同于DDL以及DML的调用,其方式稍有差异.如下见本文的描述.       有关动态SQL的描述,请参考:           PL/SQL --> 动态SQL           PL/SQL --> 动态SQL的常见错误   1.动态SQL调用包中过程不正确

《IP组播(第1卷)》一2.11 交换机中的数据包复制过程

2.11 交换机中的数据包复制过程 几乎所有设备上要求能够支持的组播转发都是开放标准的,由IETF之类的组织起草的标准.但网络设备中数据包的实际转发行为则没有对应的开放标准.对于单播数据包传输也是如此.每个厂商,或者有时是每条产品线,实施的转发机制是区分每个平台的标准. IP组播转发的核心内容是数据包复制过程.数据包复制指的是在物理上复制某个数据包,并把复制的数据包从转发路径上的目的接口发送出去. 在每个平台上,复制过程的区别在于网络设备是在哪里完成的复制.Cisco的每个网络平台在处理这个过程