HSQLDB:如果已存在,则创建存储过程时出错

时间:2014-12-07 17:36:15

标签: sql stored-procedures syntax-error hsqldb

我有一个addresses表,并希望将以下查询放在HSQLDB数据库中的存储过程中:

SELECT      *
FROM        addresses a
WHERE       a.address_id = ?

这是我最好的尝试(在阅读HSQLDB docs on procs之后):

CREATE PROCEDURE IF NOT EXISTS sp_get_address_by_id()
    BEGIN ATOMIC
        SELECT      *
        FROM        addresses a
        WHERE       a.address_id = @address_id
    END

显然,目的是创建程序,除非它已经存在。但是当我运行这个时,我得到了:

Error: unexpected token: BEGIN required: ( : line: 2
SQLState:  42581
ErrorCode: -5581

这里发生了什么?我该怎么做才能解决这个问题?我的程序的其余部分是否正确写入(特别是它如何接受输入并返回输出)?

1 个答案:

答案 0 :(得分:3)

在您给出的示例中,您有一个输入参数address_id。它应该与表地址的address_id列的类型相同。输出参数和地址表中的列一样多。您需要指定每个类型,并且它们应对应于各列的类型。

CREATE PROCEDURE sp_get_address_by_id(IN address_id INT, OUT address VARCHAR(100), OUT city VARCHAR(25), OUT country VARCHAR(25), OUT postaleCode VARCHAR(10)) 
   READS SQL DATA
   BEGIN ATOMIC
     SELECT a.address, a.city, a.country, a.postaleCode 
     INTO address, city, country, postaleCode 
     FROM addresses a 
     WHERE a.address_id = address_id;
   END

如果您遇到困难,请告诉我。我很乐意提供帮助。

希望它有用!