PL/SQL 中获取CLOB字段的具体内容
2018-06-21 本文已影响13人
乘风破浪的姐姐
经常会遇到表中的字段定义的数据类型为clob,如下图,request_param字段是clob类型存储的是一个json格式的报文。
image.png
oracle中的clob类型字段不能直接显示出来,那么想要获取上述clob里的具体内容,该怎么处理呢?
借助Oracle系统dbms_lob中substr方法
格式为:select dbms_lob.substr(clobField) from table
image.png
但是使用上述方法会存在一个问题:字段里存储的报文过长时,会显示不全。
所以就需要其他方多处理,这里使用java连接oracle,写了一个方式,只需要传递一个参数,即select clobField from table的结果即可。
pom.xml文件中加入连接数据库所需包:
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>11.2.0.3.0</version>
</dependency>
创建数据连接类 DbcpConnection
package com.cccis.jmeter.util.help;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
/**
* Created by Sundy on 2018/6/21.
*/
public class DbcpConnection{
//数据库驱动名字
private static String jdbcName = "oracle.jdbc.driver.OracleDriver";
//数据库协议地址
private static String dbUrl = "jdbc:oracle:thin:@192.168.200.25:1521:orcl";
//数据库用户名
private static String dbUser = "apd_v362_test";
//数据库密码
private static String dbPassword = "apd_v362_test";
public DbcpConnection(){}
public static Connection getConnection(){
Connection conn =null;
try {
Class.forName(jdbcName);
conn = DriverManager.getConnection(dbUrl, dbUser, dbPassword);
} catch (SQLException e) {
e.printStackTrace();
}catch (ClassNotFoundException e) {
e.printStackTrace();
}
return conn;
}
}
新增DBUtil工具类:
package com.cccis.jmeter.util.help;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.Reader;
import java.sql.*;
/**
* Created by Sundy on 2018/6/21.
*/
public class DBUtil {
public static String ClobConvert(String sql) {
Connection conn = DbcpConnection.getConnection();
PreparedStatement pstmt = null;
String result=null;
try {
pstmt = conn.prepareStatement(sql);
ResultSet rs = pstmt.executeQuery();
while (rs.next()) {
Clob clob = (Clob) rs.getObject(1);
result = ClobToString(clob);
}
} catch (SQLException e) {
e.printStackTrace();
}
return result;
}
public static String ClobToString(Clob clob) {
String reString = "";
try {
Reader is = null;// 得到流
is = clob.getCharacterStream();
BufferedReader br = new BufferedReader(is);
String s = br.readLine();
StringBuffer sb = new StringBuffer();
while (s != null) {// 执行循环将字符串全部取出付值给StringBuffer由StringBuffer转成STRING
sb.append(s);
s = br.readLine();
}
reString = sb.toString();
} catch (IOException e) {
e.printStackTrace();
}catch (SQLException e) {
e.printStackTrace();
}
return reString;
}
public static void main(String[] args) {
String ss = null;
ss = ClobConvert("select request_param from t_interface_log l where l.business_no='CN062114485333' and l.interface_code='ClaimInfoSync'");
System.out.println(ss);
}
}
上述测试结果为:
image.png
ok了,成功将数据库中clob字段的具体内容取出。
后续可以在jmeter接口测试时,将上述工程打包后,在BeanShell内直接调用。例如:
image.png