java - Prepared Statement 不检索 sql 的确切结果

标签 java oracle prepared-statement resultset

我正在尝试从我的应用程序中读取 Oracle 表信息。为了获取表描述,我在我的应用程序上执行了这个查询:

SELECT DBMS_METADATA.GET_DDL('TABLE', 'CONTRACT_TABLE' ,'SCHEMA_NAME') FROM DUAL

这是执行查询的代码块:

        PreparedStatement preparedStatement = null;
        ResultSet resultSet = null;

        String sql = "SELECT DBMS_METADATA.GET_DDL('TABLE', 'CONTRACT_TABLE' ,'SCHEMA_NAME') FROM DUAL";
        preparedStatement = connection.prepareStatement(sql);
        resultSet = preparedStatement.executeQuery();

        if (resultSet.next()) {
            Clob clob = resultSet.getClob(1);
            String str = clob.getSubString(1, (int)clob.length());
            return str;             
        } else {
            throw new DBPlatformException("Object not available [Schema: "
                    + schema + "].[Name: " + objectName + "]!");
        }

当我直接在数据库上运行 sql 时,我得到了这个结果:

  CREATE TABLE "SCHEMA_NAME"."CONTRACT_TABLE" 
   (  "CONTRACT_ID" NUMBER, 
  "START_DATE" DATE, 
  "END_DATE" DATE
   ) PCTFREE 0 PCTUSED 0 INITRANS 1 MAXTRANS 255 
 COMPRESS FOR QUERY HIGH  NOLOGGING 
  STORAGE(
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "TMP_SPACE" 
  PARTITION BY HASH ("CONTRACT_ID") 
 (PARTITION "P01" SEGMENT CREATION DEFERRED 
  TABLESPACE "TMP_SPACE" 
 COMPRESS FOR QUERY HIGH , 
 PARTITION "P02" SEGMENT CREATION DEFERRED 
  TABLESPACE "TMP_SPACE" 
 COMPRESS FOR QUERY HIGH , 
 PARTITION "P03" SEGMENT CREATION DEFERRED 
  TABLESPACE "TMP_SPACE" 
 COMPRESS FOR QUERY HIGH , 
 PARTITION "P04" SEGMENT CREATION DEFERRED 
  TABLESPACE "TMP_SPACE" 
 COMPRESS FOR QUERY HIGH , 
 PARTITION "P05" SEGMENT CREATION DEFERRED 
  TABLESPACE "TMP_SPACE" 
 COMPRESS FOR QUERY HIGH ) 
  PARALLEL 32 

当我运行我的应用程序时,它返回如下结果:

  CREATE TABLE "SCHEMA_NAME"."CONTRACT_TABLE" 
   (  "CONTRACT_ID" NUMBER, 
  "START_DATE" DATE, 
  "END_DATE" DATE
   ) 
  PARTITION BY HASH ("CONTRACT_ID") 
 (PARTITION "P01" , 
 PARTITION "P02" , 
 PARTITION "P03" , 
 PARTITION "P04" , 
 PARTITION "P05" ) 

我的应用程序返回的结果信息较少。我需要知道表是否平行,但我的应用程序无法提供该信息。

我试图找出查询结果不同的原因以及如何检索并行信息。

最佳答案

尝试执行

begin
  DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'STORAGE',TRUE);
  DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'TABLESPACE',TRUE);
  DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'SEGMENT_ATTRIBUTES',TRUE);
end;
/

在你用 java 声明之前,看看结果是否改变。

关于java - Prepared Statement 不检索 sql 的确切结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38323912/

相关文章:

java - Hibernate 4 调用 c3p0 中不支持的 setBinaryStream

java - 如何配置 shiro Realm 以连接到 struts2 应用程序中的 oracle 数据库

sql - 根据另一列值更新列值

java - 为什么我会收到准备好的语句的语法错误?

c++ - 如何将 std::shared_ptr 与 Mysql 准备好的语句一起使用?

java - JComponents 与 Graphics.draw

java - Java JDK中是否有并发列表?

php - 如何使用 store_result() 获取数据?

java - 禁用序列化缓存

sql-server - 将6000个表和数据从sql server复制到oracle ==>最快的方法?