HSQLDB:如果它已经存在

问题描述:

错误创建存储过程我有一个addresses表,并希望把下面的查询在存储过程中我的HSQLDB数据库中: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 

这是怎么回事?我能做些什么来解决这个问题?我的程序的其余部分是否正确写入(特别是如何接受输入和返回输出)?

在您给出的示例中,您有一个输入参数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 

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

希望它有用!

+0

如果您不想使用OUT参数并且只想像其他任何默认存储过程一样使用结果集,该怎么办? – Karthik 2016-07-27 07:49:45