我想在DB2数据库中为UPDATE
和DELETE
操作编写一个存储过程。
我可以通过在过程中直接提供值来实现这一点,但我希望通过传递动态值来实现这一点。
我的表格结构是-
create table emp2 (int_1 int, char_1 char(10))
下面是我的UPDATE
操作的存储过程,我可以运行它,但是它的行为不符合预期。即使在调用存储过程时传递了正确的参数,更改也不会反映在DB中。
CREATE OR REPLACE PROCEDURE "DB2INST1"."UPDATE_1" (IN int_1 int, IN
char_1 char(10)) SPECIFIC UPDATE_1
LANGUAGE SQL
DYNAMIC RESULT SETS 1
BEGIN
update emp2 set char_1=char_1 where int_1=int_1;
END;
这是我的DELETE
操作存储过程,我可以成功运行它,但它删除了数据库表中的所有行,而不是删除单行:
CREATE OR REPLACE PROCEDURE "DB2INST1"."DELETE_1" (IN int_1 int)
SPECIFIC DELETE_1
LANGUAGE SQL
DYNAMIC RESULT SETS 1
BEGIN
delete from emp2 where int_1=int_1;
END;
请提供通过在DB2数据库中传递动态值为UPDATE
和DELETE
操作创建存储过程的语法。
1条答案
按热度按时间iyzzxitl1#
问题是您没有限定同名的列和参数。
根据References to SQL parameters, SQL variables, and global variables:
也就是说,以下更改所有表行的语句显然是等效的:
如果希望使用相同的列名和参数名(这里使用例程名
UPDATE_1
进行参数限定),则需要将此语句重写为以下语句。fiddle