【问题标题】:Creating HSQLDB Procedure in DbVisualizer在 DbVisualizer 中创建 HSQLDB 过程
【发布时间】:2018-05-28 22:23:39
【问题描述】:

我正在尝试通过 DbVisualizer 客户端创建以下简单的 HSQLDB 过程。

DROP PROCEDURE IF EXISTS my_procedure;
CREATE PROCEDURE my_procedure(OUT my_output INTEGER, IN my_input INTEGER)
        MODIFIES SQL DATA -- NO SQL
        BEGIN ATOMIC
                SET my_output = my_input;
        END

错误信息:

[CREATE - 0 rows, 0.001 secs]  [Code: -5590, SQL State: 42590]  unexpected end of statement:  required: ; : line: 3
[END - 0 rows, 0.000 secs]  [Code: -5581, SQL State: 42581]  unexpected token: END
... 2 statement(s) executed, 0 rows affected, exec/fetch time: 0.001/0.000 sec  [0 successful, 2 errors]

它看起来像there is a problem; 的解释,但我在HSQLDB 中找不到与MySQl delimiter 等效的任何内容。

我该如何解决这个问题?

【问题讨论】:

    标签: mysql sql stored-procedures hsqldb dbvisualizer


    【解决方案1】:

    在 DbVisualizer 中,我可以使用 DbVisualizer 特定的分隔符。

    @delimiter ++;
    
    DROP PROCEDURE IF EXISTS my_procedure;
    CREATE PROCEDURE my_procedure(OUT my_output INTEGER, IN my_input INTEGER)
            MODIFIES SQL DATA -- NO SQL
            BEGIN ATOMIC
                    SET my_output = my_input;
            END
    ;
    ++
    @delimiter ;++
    

    来自Dbvisualizer documentation

    使用@delimiter 命令

    使用@delimiter 命令可以临时更改语句 分隔符 DbVisualizer 用于分隔语句并发送它们 一个一个到数据库。在复杂语句之前使用它,并且 如果脚本包含其他语句,则在语句之后。 这是一个例子:

    @delimiter ++;
    CREATE OR REPLACE FUNCTION HELLO (p1 IN VARCHAR2) RETURN VARCHAR2
    AS
    BEGIN
     RETURN 'Hello ' || p1;
    END;
    ++
    @delimiter ;++
    @call ${returnValue||(null)||String||noshow dir=out}$ = HELLO('World');
    @echo returnValue = ${returnValue}$;
    

    第一个 @delimiter 命令将分隔符设置为 ++,以便 默认 ;分隔符可以在 CREATE 的函数体中使用 陈述。然后使用 ++ 分隔符来结束 CREATE 语句, 另一个 @delimiter 命令将分隔符设置回 ;为了 脚本中的剩余命令。

    【讨论】:

      猜你喜欢
      • 2018-07-27
      • 2017-09-15
      • 1970-01-01
      • 2015-04-25
      • 1970-01-01
      • 2015-02-05
      • 1970-01-01
      • 2012-05-07
      • 2014-04-07
      相关资源
      最近更新 更多