我正在尝试通过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]
看来;
的解释存在问题,但是我在HSQLDB
中找不到任何相当于MySQl
delimiter
的东西。
我如何解决这个问题?
在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文档:
使用@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命令将定界符设置为 ,以便 默认 ;定界符可以在创建中的功能体内使用 陈述。然后,使用 定界符来结束创建语句, 另一个@delimiter命令将定界符设置为;为了 脚本中的剩余命令。