2016-07-12 3 views
5

Я пытаюсь прочитать информацию таблицы Oracle из своего приложения. Для того, чтобы получить описание таблицы, я выполнить этот запрос в моем приложении:Подготовленный отчет не получает точный результат sql

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

Результат, который возвращает мое приложение, содержит меньше информации. Мне нужно знать, является ли таблица параллельной или нет, но мое приложение не может предоставить мне эту информацию.

Я пытаюсь понять, почему результаты запроса различаются и как я могу получить параллельную информацию.

+0

Ограничения JDBC DDL, может быть? – fge

+0

Исправьте меня, если я ошибаюсь. Я не получаю информацию ddl непосредственно над JDBC. Чтобы получить информацию ddl, я выполняю запрос и читаю результат. Я не думаю, что ограничения JDBC DDL имеют какое-либо отношение к этой проблеме. – seckinozden

ответ

1

Попробуйте выполнить

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 и посмотреть, если изменение результатов.

+0

Спасибо за ответ @Evgeniy K. Я попробовал, но ничего не изменилось :( – seckinozden

+0

Привет, @Evgeniy K. Ваш ответ - решение моей проблемы. Я нахожу, что есть фрагмент кода, который устанавливает параметры сеанса во время выполнения мое приложение. Я обновил эту часть кода. Теперь я могу получить полное описание таблицы, как я ожидал. Спасибо за вашу помощь :) – seckinozden

Смежные вопросы