2011-09-28 16 views
8

Estoy tratando de usar el sql-maven-plugin para ejecutar una secuencia de comandos PL/SQL en una base de datos Oracle 11. Aunque el guión es válida PL/SQL (por lo que puedo decir), la ejecución me da una PLS-00103 error:Maven: la secuencia de comandos PL/SQL con sql-maven-plugin arroja el error PLS-00103

La secuencia de comandos SQL: (drop_all_tables.sql)

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

Y mi plug-in configuración:

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

Y esta es la salida de la ejecución Maven:

[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 
+0

El resultado del código en su mensaje de error Maven no coincide exactamente con el código que publicó en la parte superior de su hilo. – APC

+0

Oh, lo siento mucho, edité el nombre de la tabla para ser genérico, olvidé hacerlo en el resultado del error - hecho ahora :) – Guillaume

+0

el punto es que el código que estás * ejecutando * es diferente de lo que * eres mostrándonos *. ¿Cómo espera que interpretemos un error de sintaxis si no nos muestra el código real? – APC

Respuesta

11

supongo que el plug-in está dividiendo el script sql con punto y coma e intentando ejecutar cada parte de forma independiente. La primera instrucción sería

BEGIN 
    EXECUTE IMMEDIATE 'DROP TABLE MY_TABLE'; 

que está incompleto en lo que se refiere a Oracle. El complemento tiene dos parámetros de configuración para cambiar este comportamiento, delimiter y delimiterType. Al cambiar la configuración de la siguiente manera y separar sus bloques BEGIN por / en una línea por sí mismo, debería poder ejecutar esta secuencia de comandos.

<configuration> 
    <delimiter>/</delimiter> 
    <delimiterType>row</delimiterType> 
</configuration> 
+0

Gracias, eso puede funcionar, y yo Ciertamente lo verificará, pero he encontrado una forma alternativa de hacer lo que quería sin tener que usar PL/SQL. Agregué continúe a la sección de configuración de mi plugin Maven, y el SQL ahora es la TABLA DE DESCARGAS mucho más simple MY_TABLE; – Guillaume

+0

Agregaría eso como una respuesta, pero no puedo agregar una respuesta a mi pregunta por ahora, ya que soy un novato aquí :) – Guillaume

+0

La respuesta (configuración maven) funciona, y el guión es correcto – Ralph

Cuestiones relacionadas