怎样在PL/SQL中将行联结到单个CLOB

 
   | |

导读:专家针对怎样在PL/SQL中将行联结到单个CLOB这个问题在文中给出了详细的解答。

关键词:Oracle Oracle PL/SQL CLOB

正在加载数据... 【TechTarget中国原创】我怎么合并多个varchar2行到一个CLOB类型的列?例如:创建表A (keys number, text CLOB);创建表B……

【TechTarget中国原创】问:我怎么合并多个varchar2行到一个CLOB类型的列?

  例如:创建表A (keys number, text CLOB);
        创建表B(keys number, text varchar2(100));


insert into B values (1, 'How do I '); insert into B values (2, ' merge multiple rows '); insert into B values (3, ' into one row of type CLOB? ');

  在将表B插入表A并从表A中获取之后,我想查看下列结果:


keys  text
----- -------
1     How do I
        merge multiple rows
          into one row of type CLOB?

  我写了下面的内容,但我还不确定怎样使用dbms_lob.writeAppend()。

DECLARE
  TYPE A_table_type IS TABLE OF A%ROWTYPE
  INDEX BY PLS_INTEGER;
  t_A A_table_type;
  CURSOR c1
  SELECT text FROM B WHERE keys BETWEEN 1 AND 3;
  BEGIN
  OPEN c1;
    LOOP --Fetch a configured set of rows at once
        FETCH c1
        BULK COLLECT INTO t_A LIMIT l_ROW_LIMIT;
        EXIT WHEN t_A.COUNT = 0;
          --For each set of rows fetched...
          FOR x IN 1 ..  t_A.COUNT LOOP
          dbms_lob.writeAppend(?????)

  答:假设你只要表A中的一行,哪一个CLOB是联结B中的行的?这里有一种方法。

  我建议你将这个问题拆分成几个简单的问题。一个问题就是如何将文本值联结到单个CLOB。我写了个单机函数执行这一操作:


create or replace
function assemble_clob(p_from in number, p_to in number)
return clob
is
  v_clob clob;  -- inner one
begin
  for rec in (
      select keys, text 
      from b 
      where keys between p_from and p_to)
  loop
    if (rec.keys = p_from) then  -- first item
      v_clob := rec.text;
    else  -- subsequent item
      v_clob := v_clob || CHR(10) || rec.text;  -- prepend newline
    end if;
  end loop;
  return (v_clob);
end assemble_clob;
/

  现在我可以在SQL中用到它:


insert into a (keys, text) values (1, assemble_clob(1, 3));

  注意现在插入语句变简单了。查询表A,我得到以下结果:


SQL> column text format a30
SQL> select * from a;
      KEYS TEXT
---------- ------------------------------
         1 How do I
             merge multiple rows
               into one row of type CLOB?

 
查看全文
 
 
 
 
 

Oracle PL/SQL

 
对于一个有相关IT经验的人来说,从头学起PL/SQL该选什么样的书?一本好书对于学习一门新技术究竟有多大的影响?专家Dan Clamage给出了解答。
 
开发人员会发现Toad有两点功能很有价值:自动化设计器和ER图工具。自动化设计器提供了一种RAD方法来创建Oracle数据库批文件的等价物。
 
Quest公司的Toad 10有四款针对Oracle产品的不同套件,它们可以帮助Oracle DBA和开发人员们更好地管理数据库和应用。
 
如何使用PL/SQL列出有特殊符号的行,PL/SQL专家将给出相应的建议,并教您如何使用translate、char和trunk函数。
 
触发器的类型有三种:DML——按照表中的DML语句触发;Instead-of——按照视图而不是DML语句触发;System——当系统事件发生时触发,比如关闭或启动系统。
 

登录TechTarget中国

关闭
本服务仅向TechTarget中国的会员开放,请登录或立即免费注册
电子邮件地址:
请输入您的电子邮件地址
密码:
下次自动登录