1 必须保证在一个事务内处理:JDBC connection autocommit connsetAutoCommit(false);
2 插入记录用empty_clob()函数带入空CLOB字段:Insert into table with CLOB column as empty_clob();
3 用select把空CLOB对象查出,注意必须带for update子句来告知数据库接下来要修改该记录,否则SQL语句会返回错误告诉你没有for update子句:Select clob column with “for update” option like “select clob_field from clob_table where rowid=1 for update”;
4 将返回的CLOB字段对象由JDK的Clob转换成Oracle 库的CLOB对象:Turn the return from javasqlClob to OraclesqlCLOB:
Clob clob = (Clob)rsgetClob("clob_field");
oraclesqlCLOB tmpclob = (oraclesqlCLOB)clob;
5 用字符串填充该CLOB对象:
BufferedWriter bw = new BufferedWriter(tmpclobgetCharacterOutputStream());
bwwrite(clobClValueArrayget(i)toString());
bwflush();
bwclose();
6 用结构化语句对象PreparedStatement实现DML *** 作:
PreparedStatement pstmt1 = connprepareStatement(“update clob_table set clob_field= Where rowid=1”);
pstmt1setClob(1, tmpclob);
pstmt1execute();
7 把事务提交实现CLOB字段 *** 作。Commit the update: conncommit();
8.读取CLOB内容也很简单:
PreparedStatement pstmt = connprepareStatement("select clob_field from clob_table where rowid=1");
ResultSet rs = pstmtexecuteQuery();
Clob clob = (Clob)rsgetClob("clob_field");
String str;
if(null != clob){
str = clobgetSubString((long)1, cloblength());
}
假设表有A,B两列,代码如下
select A,LISTAGG(B, ',') WITHIN GROUP(ORDER BY B) B from table group by A上面SQL文可将B列横向输出,以逗号分割,输出顺序按B的值升序排列
在oracle中可以使用函数来换行。
在oracle中有两个函数,分别是:wmsyswmconcat和scottlistagg可以实现行列转换,这也是我们日常开发及运维工作中经常用得到的两个函数。wmconcat是oracle10g推出的一个行列转换函数,而scottlistagg是oracle11g中推出的,两者作用一样,但使用上稍有差异。
以上就是关于listagg oracle怎么处理clob字段全部的内容,包括:listagg oracle怎么处理clob字段、oracle 数据库sql高手来看看,如何纵向转横向、oracle生成1-12的行等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)