# Cannot execute Oracle stored procedure

**URL:** <https://forum.liquibase.org/t/cannot-execute-oracle-stored-procedure/2327>\
**Category:** General Discussion\
**Created:** [July 23, 2013, 12:12pm UTC](https://forum.liquibase.org/t/cannot-execute-oracle-stored-procedure/2327 "2013-07-23T12:12:00Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![ewa.murawska](https://avatars.discourse-cdn.com/v4/letter/e/97f17d/32.png) [@ewa.murawska](https://forum.liquibase.org/u/ewa.murawska)\
**Post date:** [July 23, 2013, 12:12pm UTC](https://forum.liquibase.org/t/cannot-execute-oracle-stored-procedure/2327/1 "2013-07-23T12:12:00Z")

</div>

Hi,  
I am new to Liquibase and trying to get my head around it.  
I’d like Liquibase to execute an existing stored procedure on Oracle 11g, but I’m getting an error.  
This is an existing, well tested stored proc and I can run it with no problems from SQLDeveloper.  
Does Liquibase support execution of stored procs in Oracle?  
  
Here is my test.xml file:

> \<?xml version="1.0" encoding="UTF-8"?\>  
> \<databaseChangeLog  
> &nbsp; xmlns=“[Liquibase | Liquibase XML Schema Definitions](http://www.liquibase.org/xml/ns/dbchangelog)”  
> &nbsp; xmlns:xsi=“[http://www.w3.org/2001/XMLSchema-instance](http://www.w3.org/2001/XMLSchema-instance)”  
> &nbsp; xsi:schemaLocation=“[Liquibase | Liquibase XML Schema Definitions](http://www.liquibase.org/xml/ns/dbchangelog)  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-2.0.xsd](http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-2.0.xsd)”  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; logicalFilePath=“test.xml”\>  
> &nbsp;&nbsp;&nbsp;   
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exec ODS.UTIL\_PKG.TRUNCATE(‘MY\_TABLE’);   
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   
> &nbsp;&nbsp;&nbsp;

  
But I have also tried running in through the include sql file, with the same effect, i.e. error.  
  
The trace is:  

> Executing the Liquibase command ‘update’ in the schema ‘ods’  
> INFO 7/23/13 2:46 PM:liquibase: Successfully acquired change log lock  
> INFO 7/23/13 2:46 PM:liquibase: Reading from ods.DATABASECHANGELOG  
> INFO 7/23/13 2:46 PM:liquibase: Reading from ods.DATABASECHANGELOG  
> SEVERE 7/23/13 2:46 PM:liquibase: Change Set test.xml::1::user failed.&nbsp; Error: Error executing SQL exec ODS.DDL\_UTL\_PKG.TRUNCATE(‘MY\_TABLE’): ORA-00900: invalid SQL statement  
>   
> liquibase.exception.DatabaseException: Error executing SQL exec ODS.DDL\_UTL\_PKG.TRUNCATE(‘MY\_TABLE’): ORA-00900: invalid SQL statement  
>   
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at liquibase.executor.jvm.JdbcExecutor.execute(JdbcExecutor.java:62)  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at liquibase.executor.jvm.JdbcExecutor.execute(JdbcExecutor.java:104)  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at liquibase.database.AbstractDatabase.execute(AbstractDatabase.java:1091)  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at liquibase.database.AbstractDatabase.executeStatements(AbstractDatabase.java:1075)  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at liquibase.changelog.ChangeSet.execute(ChangeSet.java:317)  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at liquibase.changelog.visitor.UpdateVisitor.visit(UpdateVisitor.java:27)  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at liquibase.changelog.ChangeLogIterator.run(ChangeLogIterator.java:58)  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at liquibase.Liquibase.update(Liquibase.java:114)  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at liquibase.integration.commandline.Main.doMigration(Main.java:825)  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at liquibase.integration.commandline.Main.main(Main.java:134)  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:60)  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at java.lang.reflect.Method.invoke(Method.java:611)  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at org.birch.cryptomainia.DecryptArgv.callTarget(Unknown Source)  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at org.birch.cryptomainia.DecryptArgv.main(Unknown Source)  
> Caused by: java.sql.SQLSyntaxErrorException: ORA-00900: invalid SQL statement  
>   
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:445)  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:396)  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:879)  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:450)  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:192)  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:531)  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at oracle.jdbc.driver.T4CStatement.doOall8(T4CStatement.java:193)&nbsp; at oracle.jdbc.driver.T4CStatement.executeForRows(T4CStatement.java:1033)  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1329)  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at oracle.jdbc.driver.OracleStatement.executeInternal(OracleStatement.java:1909)  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at oracle.jdbc.driver.OracleStatement.execute(OracleStatement.java:1871)  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at oracle.jdbc.driver.OracleStatementWrapper.execute(OracleStatementWrapper.java:318)  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at liquibase.executor.jvm.JdbcExecutor$1ExecuteStatementCallback.doInStatement(JdbcExecutor.java:92)  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at liquibase.executor.jvm.JdbcExecutor.execute(JdbcExecutor.java:55)  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; … 15 more  
> INFO 7/23/13 2:46 PM:liquibase: Successfully released change log lock  
> Liquibase Update Failed: Error executing SQL exec ODS.DDL\_UTL\_PKG.TRUNCATE(‘MY\_TABLE’): ORA-00900: invalid SQL statement  
>   
> SEVERE 7/23/13 2:46 PM:liquibase: Error executing SQL exec ODS.DDL\_UTL\_PKG.TRUNCATE(‘MY\_TABLE’): ORA-00900: invalid SQL statement  
>   
> liquibase.exception.MigrationFailedException: Migration failed for change set test.xml::1::user:  
> &nbsp;&nbsp;&nbsp;&nbsp; Reason: liquibase.exception.DatabaseException: Error executing SQL exec ODS.DDL\_UTL\_PKG.TRUNCATE(‘MY\_TABLE’): ORA-00900: invalid SQL statement  
> :  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Caused By: Error executing SQL exec ODS.DDL\_UTL\_PKG.TRUNCATE(‘MY\_TABLE’): ORA-00900: invalid SQL statement  
> :  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Caused By: ORA-00900: invalid SQL statement

  
etc, etc…  
  
I will greatly appretiate some help.  
Thanks.  
  
– tinyboson

---

<div class="post-metadata">

**Author:** ![un1374555567687r13id](https://avatars.discourse-cdn.com/v4/letter/u/eada6e/32.png) [@un1374555567687r13id](https://forum.liquibase.org/u/un1374555567687r13id)\
**Post date:** [July 23, 2013, 12:12pm UTC](https://forum.liquibase.org/t/cannot-execute-oracle-stored-procedure/2327/2 "2013-07-23T12:12:00Z")

</div>

I have actually changed the code to the following and it seems to call the SP. Seems like I need the begin-end block.  
  
\<?xml version="1.0" encoding="UTF-8"?\>  
\<databaseChangeLog  
&nbsp; xmlns=“[http://www.liquibase.org/xml/ns/dbchangelog](http://www.liquibase.org/xml/ns/dbchangelog)”  
&nbsp; xmlns:xsi=“[http://www.w3.org/2001/XMLSchema-instance](http://www.w3.org/2001/XMLSchema-instance)”  
&nbsp; xsi:schemaLocation=“[http://www.liquibase.org/xml/ns/dbchangelog](http://www.liquibase.org/xml/ns/dbchangelog)  
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; [http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-2.0.xsd](http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-2.0.xsd)”  
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; logicalFilePath=“test.xml”\>  
&nbsp;&nbsp;&nbsp;   
**&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \<![CDATA[  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BEGIN  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ODS.UTIL\_PKG.TRUNCATE('MY\_ **** TABLE');  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; END;  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ]]\>**  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   
&nbsp;&nbsp;&nbsp;

---

<div class="post-metadata">

**Author:** ![un1374562163113r46id](https://avatars.discourse-cdn.com/v4/letter/u/a8b319/32.png) [@un1374562163113r46id](https://forum.liquibase.org/u/un1374562163113r46id)\
**Post date:** [July 23, 2013, 12:12pm UTC](https://forum.liquibase.org/t/cannot-execute-oracle-stored-procedure/2327/3 "2013-07-23T12:12:00Z")

</div>

I guess Execution will not support, It will create the procedure only… can you try to use below tag  
  
\<?xml version="1.0" encoding="UTF-8"?\>  
\<databaseChangeLog  
&nbsp; xmlns=“[http://www.liquibase.org/xml/ns/dbchangelog](http://www.liquibase.org/xml/ns/dbchangelog)”  
&nbsp; xmlns:xsi=“[http://www.w3.org/2001/XMLSchema-instance](http://www.w3.org/2001/XMLSchema-instance)”  
&nbsp; xsi:schemaLocation=“[http://www.liquibase.org/xml/ns/dbchangelog](http://www.liquibase.org/xml/ns/dbchangelog)  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-2.0.xsd](http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-2.0.xsd)”  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; logicalFilePath=“test.xml”\>  
&nbsp;&nbsp;&nbsp;   
&nbsp;&nbsp;&nbsp; &nbsp; &nbsp;&nbsp;&nbsp;   
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; \<![CDATA[  
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; exec ODS.UTIL\_PKG.TRUNCATE('MY\_TABLE');   
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ]]\>  
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;   
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;   
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;   
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;   
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; \<![CDATA[  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; select \* from dual;  
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ]]\>  
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;   
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;   
&nbsp;&nbsp;&nbsp;

---

<div class="post-metadata">

**Author:** ![Abhay.Singh](https://sea2.discourse-cdn.com/flex020/user_avatar/forum.liquibase.org/abhay.singh/32/933_2.png) [@Abhay.Singh](https://forum.liquibase.org/u/Abhay.Singh)\
**Post date:** [February 28, 2023, 11:37am UTC](https://forum.liquibase.org/t/cannot-execute-oracle-stored-procedure/2327/4 "2023-02-28T11:37:06Z")

</div>

Use

\< sqlFile  
path=“xxx.sql”  
relativeToChangelogFile=“true”  
stripComments=“true”  
splitStatements=“false”  
endDelimiter=“/”  
dbms=“oracle”  
/\>

and .sql file should have

BEGIN  
package.function();  
END;  
/
