I noticed a problem since upgrading to Liquibase 3.5.1 (from 3.4.2) and I traced the problem to CORE-2626.
I need to disable liquibase.useProcedureSchema but I am unclear on where to specify this. I have tried the liquibase.properties file, and also tried specifying a <databaseChangeLog> <property> like:
- <?xml version="1.0" encoding="utf-8" standalone="no"?>
- <databaseChangeLog
- xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.5.xsd">
- <!-- Need to disable this feature: https://liquibase.jira.com/browse/CORE-2626 -->
- <property name="liquibase.useProcedureSchema" value="false" dbms="oracle"/>
Alas, it does not seem to be having an impact.
As a side note, this feature does not work for Oracle packages -- the package may be qualified, but the inside procedures should not be. When you have code like:
- <changeSet author="me" id="foo_package" runOnChange="true">
- <createProcedure>
- <![CDATA[
- CREATE OR REPLACE PACKAGE "FOO" IS
- PROCEDURE bar
- (p_one IN VARCHAR2);
- PROCEDURE baz
- (p_date IN DATE);
It is getting transformed into:
- CREATE OR REPLACE PACKAGE "FOO" IS
- PROCEDURE SCHEMA.bar
- (p_one IN VARCHAR2);
- PROCEDURE baz
- (p_date IN DATE);
which is invalid. The schema may be applied to the package, but not the owning procedures. (Interesting how it only impacts the first procedure too.)
I highly recommend revisiting this "feature" with respect to Oracle PL/SQL packages.