首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Liquibase create view总是收到错误:

Liquibase create view总是收到错误:
EN

Stack Overflow用户
提问于 2018-06-05 04:06:02
回答 3查看 1.8K关注 0票数 1

我们在Liquibase 3.6.1命令行上有一个简单的create view测试用例:

我们正在尝试了解如何解决这个错误:

SQL 00933:

命令未正确结束

我们试过了

  1. <sql>
  2. <createview>

下面是一个简单的测试用例。

以下是changelog:

代码语言:javascript
复制
<databaseChangeLog
    xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext"
    xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.1.xsd
    http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd">

        <changeSet author="jim" id="test1">
                <createView  viewName="VIEW_TEST" replaceIfExists="true" >
                        select table_name FROM user_tables ORDER BY table_name;
                </createView>
        </changeSet>
    </databaseChangeLog>

命令

代码语言:javascript
复制
time ./liquibase  --changeLogFile=../changelog/test.xml --url=jdbc:oracle:thin:@//localhost:1521/ORCL --username "sys as sysdba" --password oracle --logLevel debug update

我们总是得到这样的异常:(仅供参考,我们也尝试了<sql>相同的结果)

代码语言:javascript
复制
    ➜  liquibase-3.6.1 time ./liquibase  --changeLogFile=../changelog/test.xml --url=jdbc:oracle:thin:@//localhost:1521/ORCL --username "sys as sysdba" --password oracle --logLevel debug update
    Starting Liquibase at Mon, 04 Jun 2018 12:52:44 PDT (version 3.6.1 built at 2018-04-11 08:41:04)
    **Unexpected error running Liquibase: ORA-00933: SQL command not properly ended**
     [Failed SQL: CREATE OR REPLACE VIEW SYS.VIEW_TEST AS select table_name FROM user_tables ORDER BY table_name;]
    liquibase.exception.MigrationFailedException: Migration failed for change set ../changelog/test.xml::test1::jim:
         Reason: liquibase.exception.DatabaseException: ORA-00933: SQL command not properly ended
     **[Failed SQL: CREATE OR REPLACE VIEW SYS.VIEW_TEST AS select table_name FROM user_tables ORDER BY table_name;]**
        at liquibase.changelog.ChangeSet.execute(ChangeSet.java:637)
        at liquibase.changelog.visitor.UpdateVisitor.visit(UpdateVisitor.java:53)
        at liquibase.changelog.ChangeLogIterator.run(ChangeLogIterator.java:78)
        at liquibase.Liquibase.update(Liquibase.java:202)
        at liquibase.Liquibase.update(Liquibase.java:179)
        at liquibase.integration.commandline.Main.doMigration(Main.java:1205)
        at liquibase.integration.commandline.Main.run(Main.java:191)
        at liquibase.integration.commandline.Main.main(Main.java:129)
    Caused by: liquibase.exception.DatabaseException: ORA-00933: SQL command not properly ended
     [Failed SQL: CREATE OR REPLACE VIEW SYS.VIEW_TEST AS select table_name FROM user_tables ORDER BY table_name;]
        at liquibase.executor.jvm.JdbcExecutor$ExecuteStatementCallback.doInStatement(JdbcExecutor.java:356)
        at liquibase.executor.jvm.JdbcExecutor.execute(JdbcExecutor.java:57)
        at liquibase.executor.jvm.JdbcExecutor.execute(JdbcExecutor.java:125)
        at liquibase.database.AbstractJdbcDatabase.execute(AbstractJdbcDatabase.java:1229)
        at liquibase.database.AbstractJdbcDatabase.executeStatements(AbstractJdbcDatabase.java:1211)
        at liquibase.changelog.ChangeSet.execute(ChangeSet.java:600)
        ... 7 common frames omitted
    **Caused by: java.sql.SQLSyntaxErrorException: ORA-00933: SQL command not properly ended**

        at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:450)
        at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:399)
        at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:1017)
        at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:655)
        at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:249)
        at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:566)
        at oracle.jdbc.driver.T4CStatement.doOall8(T4CStatement.java:202)
        at oracle.jdbc.driver.T4CStatement.doOall8(T4CStatement.java:45)
        at oracle.jdbc.driver.T4CStatement.executeForRows(T4CStatement.java:933)
        at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1075)
        at oracle.jdbc.driver.OracleStatement.executeInternal(OracleStatement.java:1718)
        at oracle.jdbc.driver.OracleStatement.execute(OracleStatement.java:1678)
        at oracle.jdbc.driver.OracleStatementWrapper.execute(OracleStatementWrapper.java:332)
        at liquibase.executor.jvm.JdbcExecutor$ExecuteStatementCallback.doInStatement(JdbcExecutor.java:352)
        ... 12 common frames omitted

For more information, please use the --logLevel flag
    ./liquibase --changeLogFile=../changelog/test.xml  --username "sys as sysdba"  4.61s user 0.27s system 238% cpu 2.048 total
EN

回答 3

Stack Overflow用户

发布于 2018-06-08 00:35:52

解决方案是删除视图末尾的分号,这样就可以工作了:

票数 2
EN

Stack Overflow用户

发布于 2018-06-05 04:23:22

日志显示您正在尝试在SYS方案中创建视图。这是不允许的。

  1. 为您的应用程序创建(如果尚未创建)架构。
  2. 在您的COOL_APP中使用此模式。像COOL_APP.VIEW_TEST.

一样

票数 1
EN

Stack Overflow用户

发布于 2018-06-05 06:30:52

您的sql语句是否正确?

代码语言:javascript
复制
   <changeSet author="jim" id="test1">
            <createView  
                         replaceIfExists="true" 
                         viewName="VIEW_TEST">
                    select * FROM table_name ORDER BY table_column;
            </createView>
    </changeSet>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50688021

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档