我有一个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
这里发生了什么?我该怎么做才能解决这个问题?我的程序的其余部分是否正确写入(特别是它如何接受输入并返回输出)?
答案 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
如果您遇到困难,请告诉我。我很乐意提供帮助。
希望它有用!