Пожалуйста, помогите мне написать хранимую процедуру в Db2.
CREATE PROCEDURE assedt
BEGIN
SELECT ASSETNUM FROM ASSET
END
Я попробовал приведенный выше код, он выдает ошибку, как показано ниже:
Error report - DB2 SQL Error: SQLCODE=-104, SQLSTATE=42601, SQLERRMC=SELECT ASSETNUM;ROCEDURE p1 BEGIN
;, DRIVER=4.12.55
Кажется, вам не хватает двоеточия после «P1». Должно быть "P1:" Проверьте этот сайт для примера примера
Следующая красная книга: http://www.redbooks.ibm.com/abstracts/sg248326.html?Открыть написана для Db2 для IBM i (не zOS, не LUW), но глава 2 представляет собой отличное введение в процедурный SQL DB2 и применима к другим DB2. Надеюсь, это поможет.
Ответы только на ссылки становятся бесполезными, когда ссылки устаревают; пожалуйста, рассмотрите возможность добавления важных моментов из вашей ссылки в свой ответ.
Извините, я не понимаю, что вы имеете в виду. Я попробовал ссылку, и она открывается правильно. Во всяком случае, я отредактировал ответ, изменив ссылку.
Пожалуйста, прочтите этот ответ
Спасибо @мустаччо. Я понял вашу точку зрения и учту ее в следующий раз. Учитывая поставленный вопрос, я думаю, что пользователь может извлечь пользу из книги, на которую ссылаются, которая совершенно неизвестна за пределами мира IBM i (iSeries или AS/400), но во второй главе есть очень простое для понимания процедурное объяснение Db2, то есть действует на других платформах Db2.
Пример:
create table test_table (numcol integer);
insert into test_table values (1);
CREATE OR REPLACE procedure assedt (out out_var integer)
language sql
p1: begin
declare l_var integer;
select max(numcol) into l_var from test_table;
set out_var = l_var + 1;
end p1;
begin
declare g_var integer;
call assedt( g_var );
insert into test_table values (g_var);
end;
select * from test_table;
Объяснение, согласно предложению G_V: эта процедура, несколько стилизованная под ваш оригинал, берет максимальное значение из test_table, увеличивает его и возвращает в параметре out (а-ля Oracle nextval()). Анонимный блок после процедуры выполняет процедуру, захватывает новый максимум, а затем вставляет его обратно в таблицу test_table вне процедуры. Это дает вам представление о взаимодействии между сохраненным кодом и анонимным кодом, а также о том, как вы можете передавать значения и параметры. Надеюсь это поможет.
Хотя хорошо, что вы публикуете практический пример, было бы неплохо дать некоторое объяснение того, что он делает или почему.
Возможный дубликат Синтаксис SQL DB2 9.7, что я делаю неправильно?