Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Prepared Statement does not retrieve the exact result of the sql

I am trying read the Oracle table information from my application. To get the table description, I execute this query on my application:

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

Here is the code block that executes query:

        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 + "]!");
        }

When I run the sql directly on the database I get this result:

  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 

When I run my application, it returns the result like this:

  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" ) 

The result that my application returns has fewer information. I need to know if table is parallel or not but, my application can not give me that information.

I am trying to figure out why the results of the query differs and How can I retrieve parallel information.

like image 698
seckinozden Avatar asked Nov 08 '22 12:11

seckinozden


1 Answers

Try execute

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;
/

before you statement in java and see if results change.

like image 59
Evgeniy K. Avatar answered Nov 14 '22 22:11

Evgeniy K.