我需要在Oracle中定義一些變量,以便在我們的應用程序的數據庫安裝腳本中進一步使用。基本上,我們的安裝程序現在的工作方式是讀取腳本文件並通過Java中的JDBC調用每個腳本文件。我需要讓Oracle在數據庫端進行變量替換,因爲需要引用它們的過程,觸發器,創建語句等(就像「CREATE TABLE & & MYSCHEMA.TBL_NAME ...」一樣)。從Java調用Oracle「DEFINE」
我遇到的問題是,define語句從Java(例如)調用時,它拋出一個錯誤:
private static void testDefineVariables() {
String url = "jdbc:oracle:thin:@localhost:1521:LOCALDEV";
String username = "SYSTEM";
String password = "manager42";
Connection conn = null;
Statement stmt = null;
try {
conn = DriverManager.getConnection(url, username, password);
stmt = conn.createStatement();
//Execute the sql
stmt.execute("DEFINE MYSCHEMA='TESTSCHEMA'");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally {
try {
if(stmt != null)
stmt.close();
if(conn != null)
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
的錯誤是:
java.sql.SQLSyntaxErrorException: ORA-00900: invalid SQL statement
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:439)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:395)
at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:802)
at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:436)
at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:186)
at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:521)
at oracle.jdbc.driver.T4CStatement.doOall8(T4CStatement.java:194)
at oracle.jdbc.driver.T4CStatement.executeForRows(T4CStatement.java:1000)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1307)
at oracle.jdbc.driver.OracleStatement.executeInternal(OracleStatement.java:1882)
at oracle.jdbc.driver.OracleStatement.execute(OracleStatement.java:1847)
at oracle.jdbc.driver.OracleStatementWrapper.execute(OracleStatementWrapper.java:301)
我使用的是甲骨文11g R2數據庫與ojdbc6-11.2.0.1.0.jar JDBC驅動程序配合使用。我能夠從sqldeveloper工具以及SQLPlus控制檯成功執行語句,但不能從Java應用程序執行語句。我是否需要在數據庫驅動程序上配置其他屬性?我可以通過此驅動程序進行此類通話嗎?
我知道有些人可能會建議在Java端使用變量綁定,但這不是一種選擇。腳本需要從SQL接口和安裝程序都可執行。除此之外還有其他一些原因,我不會介紹。
我也希望能得到這與SQL-Maven的插件工作,但在此基礎上JIRA那是不可能的:
Add Oracle SQLPlus syntax for substitution variables
如果任何人有任何意見或不知道如何得到這個工作,我將不勝感激。
謝謝。我有這種感覺,但我不確定。 – Steve 2012-07-09 20:55:29