2014-12-07 4 views
2

У меня есть 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 

Что здесь происходит? Что я могу сделать, чтобы исправить это? Является ли остальная часть моей процедуры написана правильно (особенно в том, как она принимает входные и выходные данные)?

ответ

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 

Если вы застряли на шаге, пожалуйста, дайте мне знать. Я буду очень рад помочь.

Надеюсь, это полезно!

+0

Что делать, если вы не хотите использовать параметры OUT и хотите, чтобы результат был установлен как любые другие хранимые процедуры по умолчанию? – Karthik

Смежные вопросы