Note that there are some explanatory texts on larger screens.

plurals
  1. PORunning Oracle sql script from java gives SQLSyntaxErrorException: ORA-00900: invalid SQL statement
    primarykey
    data
    text
    <p>I am using Oracle 11g, I am executing Oracle sql script through java code. My SQL script may contain SQL statements(DDL or DML) or PL/SQL blocks, so I don't want to parse the script in my java code but used <a href="https://stackoverflow.com/a/3055008/948268">This solution</a> to execute complete script at once. Following is the sample code, where <a href="http://www.jajakarta.org/ant/ant-1.6.1/docs/en/manual/api/org/apache/tools/ant/taskdefs/SQLExec.html" rel="nofollow noreferrer">SQLExec</a> class is in <code>ant jar</code>.</p> <p>This solution worked for most cases except that if sql script contains <code>create or replace trigger</code> it fails with <strong>java.sql.SQLSyntaxErrorException: ORA-00900: invalid SQL statement</strong>. I have also specified snippet of sql script which fails.</p> <p>Please note that if I run same script through SQL Developer, it runs fine.</p> <p><strong>Following is the Java code:</strong></p> <pre><code>private void executeSql(String sqlFilePath) { final class SqlExecuter extends SQLExec { public SqlExecuter() { Project project = new Project(); project.init(); setProject(project); setTaskType("sql"); setTaskName("sql"); } } SqlExecuter executer = new SqlExecuter(); executer.setSrc(new File(sqlFilePath)); executer.setDriver(args.getDriver()); executer.setPassword(args.getPwd()); executer.setUserid(args.getUser()); executer.setUrl(args.getUrl()); executer.execute(); } </code></pre> <p><strong>SQL Script snippet:</strong></p> <pre><code>...... ...... CREATE OR REPLACE TRIGGER MY_TRG BEFORE INSERT ON MY_TABLE FOR EACH ROW BEGIN :NEW.MYNUMBER := MY_SEQUENCENUM.NEXTVAL; END; </code></pre> <p><strong>Following is the Exception trace:</strong></p> <pre><code>Exception in thread "main" java.sql.SQLSyntaxErrorException: ORA-00900: invalid SQL statement at org.apache.tools.ant.taskdefs.SQLExec.execute(SQLExec.java:398) at com.kuldeep.OracleConnectionTest.executeSql(OracleConnectionTest.java:160) at com.kuldeep.OracleConnectionTest.main(OracleConnectionTest.java:25) Caused by: 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) at org.apache.tools.ant.taskdefs.SQLExec.execSQL(SQLExec.java:499) at org.apache.tools.ant.taskdefs.SQLExec.runStatements(SQLExec.java:470) at org.apache.tools.ant.taskdefs.SQLExec$Transaction.runTransaction(SQLExec.java:664) at org.apache.tools.ant.taskdefs.SQLExec$Transaction.access$000(SQLExec.java:627) at org.apache.tools.ant.taskdefs.SQLExec.execute(SQLExec.java:370) </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload