2016-07-12 22 views
5

tam sonucunu almaz Uygulamamdaki Oracle tablo bilgilerini okumaya çalışıyorum. tablo tanımını almak için, Başvurumdaki bu sorguyu çalıştırın: İşte Hazırlık Bildirimi, sql

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

yürütür kod bloğudur sorgusu:

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

Ben veritabanı üzerinde doğrudan sql çalıştırdığınızda bu sonucu elde :

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") 
0: Başvurumu çalıştırdığınızda

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 

, böyle bir sonuç verir

Uygulamamın getirdiği sonuç daha az bilgi içeriyor. Tablonun paralel olup olmadığını bilmem gerek ama benim uygulamam bana bu bilgiyi veremiyor.

Sorgunun sonuçlarının neden farklı olduğunu anlamaya çalışıyorum ve Paralel bilgileri nasıl alabilirim.

+0

JDBC DDL sınırlamaları, belki? – fge

+0

Düzelt Beni yanlış yapmam. JDBC üzerinden doğrudan ddl bilgisi almıyorum. Ddl bilgisini elde etmek için bir sorguyu çalıştırıp sonucu okurum. JDBC DDL sınırlamalarının bu sorunla ilgili bir şey olduğunu düşünmüyorum. – seckinozden

cevap

1

java size deyimi önce

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

yürütmek ve eğer sonuç değişimi görmek deneyin.

+0

Cevap @Evgeniy K. için teşekkürler Ben denedim ama hiçbir şey değişti :( – seckinozden

+0

Merhaba tekrar @Evgeniy K. Cevabım benim sorunumun çözümü.Örnekleme sırasında oturum parametrelerini ayarlar bir kod parçası olduğunu bulmak Uygulamam Kodun bir kısmını güncelledim.Şimdi tam tablo açıklamasını beklediğim gibi alabiliyorum.Yardımınız için teşekkürler :) – seckinozden