代码之家  ›  专栏  ›  技术社区  ›  rapt

在DbVisualizer中创建HSQLDB过程

  •  1
  • rapt  · 技术社区  · 8 年前

    我试图创建以下简单的 HSQLDB 过程,由DbVisualizer客户端执行。

    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 .

    我如何避开这个问题?

    1 回复  |  直到 8 年前
        1
  •  1
  •   rapt    8 年前

    在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命令可以临时更改语句 分隔符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命令将分隔符设置回;对于 脚本中的其余命令。