Ich versuche, die Oracle-Tabelleninformationen aus meiner Anwendung zu lesen. Um die Tabellenbeschreibung zu erhalten, führe ich diese Abfrage auf meiner Anwendung:Prepared Statement ruft nicht das genaue Ergebnis des SQL
SELECT DBMS_METADATA.GET_DDL('TABLE', 'CONTRACT_TABLE' ,'SCHEMA_NAME') FROM DUAL
Hier ist der Code-Block, die Abfrage ausführt:
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 + "]!");
}
Wenn ich die SQL direkt auf der Datenbank ausgeführt bekomme ich dieses Ergebnis :
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
Wenn ich meine Anwendung ausführen, gibt es das Ergebnis wie folgt aus:
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")
Das Ergebnis, das meine Anwendung zurückgibt, enthält weniger Informationen. Ich muss wissen, ob Tabelle parallel ist oder nicht, aber meine Anwendung kann mir diese Information nicht geben.
Ich versuche herauszufinden, warum die Ergebnisse der Abfrage unterscheidet und wie kann ich parallele Informationen abrufen.
JDBC DDL Einschränkungen, vielleicht? – fge
Korrigieren Sie mich Wenn ich falsch liege. Ich bekomme keine ddl Informationen direkt über JDBC. Um die ddl-Informationen zu erhalten, führe ich eine Abfrage aus und lese das Ergebnis. Ich glaube nicht, dass JDBC DDL-Einschränkungen etwas mit diesem Problem zu tun haben. – seckinozden