Maven: PL/SQL script with sql-maven-plugin throws error PLS-00103

匿名 (未验证) 提交于 2019-12-03 08:41:19

问题:

I'm trying to use the sql-maven-plugin to execute a PL/SQL script on an Oracle 11 database. Although the script is valid PL/SQL (as far as I can tell), the execution gives me a PLS-00103 error:

The SQL script: (drop_all_tables.sql)

BEGIN    EXECUTE IMMEDIATE 'DROP TABLE MY_TABLE';    EXCEPTION    WHEN OTHERS THEN       IF SQLCODE != -942 THEN          RAISE;       END IF; END;

And my plugin configuration:

<plugin>             <groupId>org.codehaus.mojo</groupId>             <artifactId>sql-maven-plugin</artifactId>             <version>1.5</version>              <dependencies>                 <dependency>                     <groupId>oracle</groupId>                     <artifactId>jdbc</artifactId>                     <version>11.2.0.2.0</version>                 </dependency>             </dependencies>             <executions>                 <execution>                     <id>create-schema</id>                     <phase>process-test-resources</phase>                     <goals>                         <goal>execute</goal>                     </goals>                     <configuration>                         <driver>oracle.jdbc.driver.OracleDriver</driver>                         <url>${jdbc.url}</url>                         <username>${jdbc.username}</username>                         <password>${jdbc.password}</password>                         <autocommit>true</autocommit>                         <srcFiles>                             <srcFile>src/main/resources/sql/drop_all_tables.sql</srcFile>                         </srcFiles>                     </configuration>                 </execution>             </executions>         </plugin>

And this is the output from the Maven execution:

[ERROR] Failed to execute:  BEGIN EXECUTE IMMEDIATE 'DROP TABLE MY_TABLE'; [INFO] ------------------------------------------------------------------------ [ERROR] BUILD ERROR [INFO] ------------------------------------------------------------------------ [INFO] ORA-06550: line 2, column 43: PLS-00103: Encountered the symbol "end-of-file" when expecting one of the following:     ( begin case declare end exception exit for goto if loop mod    null pragma raise return select update while with    <an identifier> <a double-quoted delimited-identifier>    <a bind variable> << continue close current delete fetch lock    insert open rollback savepoint set sql execute commit forall    merge pipe purge

回答1:

I guess the plugin is splitting the sql script by semicolons and trying to execute each part independently. The first statement would be

BEGIN     EXECUTE IMMEDIATE 'DROP TABLE MY_TABLE';

Which is incomplete as far as oracle is concerned. The plugin does have two configuration parameters to change this behaviour, delimiter and delimiterType. By changing the configuration like below and separating your BEGIN blocks by a / on a line by itself you should be able to execute this script.

<configuration>     <delimiter>/</delimiter>     <delimiterType>row</delimiterType> </configuration>


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!