Calling a CLOB Locator Fails With ORA-22275 [ID 161530.1]


 修改时间 22-JUL-2009     类型 PROBLEM     状态 PUBLISHED 

In this Document
  Symptoms
  Changes
  Cause
  Solution


Applies to:

PL/SQL
This problem can occur on any platform.

Symptoms

Running PLSQL code containing call to EMPTY_CLOB() fails with

ORA-22275: invalid LOB locator specified

Changes

Sample user "scott" must be installed on the test machine running the code shown below.
The user "scott" can be installed by connecting as SYS or SYSTEM user an run the following scripts to be found on the RDBMS Server depending on operating system
  • Linux / Unix : $ORACLE_HOME/rdbms/admin/utlsampl.sql
  • Windows     : %ORACLE_HOME%\rdbms\admin\utlsampl.sql

Cause

A LOB that is passed to package DBMS_LOB cannot be a variable initialized by EMPTY_CLOB() as this does not create a valid lob locator.
It must either be initialized by selecting the clob from the database or by using DBMS_LOB.CREATETEMPORARY

Solution

Example how to avaid the ORA-22275

connect scott/tiger

set serveroutput on

create or replace procedure test_clob (p_clob_res out clob) is
  cursor c_tabs is
  select ename from emp;
  v_clob clob;
  amt integer := 0;
begin
  dbms_lob.createtemporary(v_clob,true,dbms_lob.session);
  for r_tabs in c_tabs
  loop
    dbms_lob.writeappend(v_clob,length(r_tabs.ename)+1,r_tabs.ename||' ');
    amt := amt + length(r_tabs.ename);
  end loop;
  p_clob_res := v_clob;
end test_clob;
/

create or replace procedure call_clob is
  p_clob clob;
  my_buff varchar2 (2000);
  amt binary_integer := 2000;
begin
  test_clob(p_clob);
  my_buff := dbms_lob.substr(p_clob,amt,1);
  dbms_output.put_line(my_buff);
end call_clob;
/

begin
  call_clob();
end;
/

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/11411056/viewspace-734475/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/11411056/viewspace-734475/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值