【问题标题】:Working with dbms_lob.copy and error ORA-06502:使用 dbms_lob.copy 和错误 ORA-06502:
【发布时间】:2016-10-15 18:04:47
【问题描述】:

dbms_lob.copy一起工作我有点迷茫

CREATE OR REPLACE PROCEDURE Ex_PRC IS
 dest_lob CLOB;
 src_lob  CLOB;
BEGIN

  SELECT F_CLOB INTO dest_lob
  FROM EX_EMPLOYEE
  WHERE id = 1;

dbms_lob.copy (dest_lob, src_lob, 30, 1, 1);
  COMMIT;
END;

/

我有错误 numeric or value error invalid lob locator specified ora-22275

我跟进了这个SO 的答案,因为我需要的是拆分 blob 并移动它们。但我不明白他为什么使用dbms_lob.createtemporary

【问题讨论】:

  • 传递给包 DBMS_LOB 的 LOB 不能是由 EMPTY_CLOB() 初始化的变量,因为这不会创建有效的 lob 定位器。它必须通过从数据库中选择 clob 或使用 DBMS_LOB.CREATETEMPORARY 来初始化
  • @mohsen.b 你能举个例子让我看看吗?
  • 请查看以下关于 scott 架构的示例
  • 作为答案发布并删除评论请@mohsen.b

标签: oracle


【解决方案1】:
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;
/

【讨论】:

  • 好的,谢谢你的例子,当我回到我的办公室时会测试它
猜你喜欢
  • 2020-03-10
  • 1970-01-01
  • 1970-01-01
  • 2015-06-11
  • 1970-01-01
  • 2014-04-25
  • 2019-10-01
  • 1970-01-01
相关资源
最近更新 更多