Stored procedures 在下面的db2存储过程中。我想设置id fetch from db的值,并在第二次插入查询中使用
我无法将数据存储在db中,因为select query无法从db中设置值,以便在另一个查询中使用。有人能帮助编写这个存储过程吗?我无法找到它为什么不存储在db2 for stock and Roadway表中。只存储在cabinet表中的数据。以下是一个示例案例,供您参考Stored procedures 在下面的db2存储过程中。我想设置id fetch from db的值,并在第二次插入查询中使用,stored-procedures,db2,Stored Procedures,Db2,我无法将数据存储在db中,因为select query无法从db中设置值,以便在另一个查询中使用。有人能帮助编写这个存储过程吗?我无法找到它为什么不存储在db2 for stock and Roadway表中。只存储在cabinet表中的数据。以下是一个示例案例,供您参考 将下面另存为proc001作为纯文本文件 将下面另存为repo.sh,运行“chmod 777 repo.sh”,然后执行它 Repo.sh的三条select语句返回如下: 如上所述,可以从列中设置值,并在第二次插入时使用它
希望这能有所帮助。“无法存储数据”或“无法从db设置值”不是对问题的正确描述。您收到的完整错误消息是什么?无法存储在库存和过道表@MarkBarinstein中。我没有得到任何错误,只有CAB数据得到了存储的数据,这表明问题出在表列和参数名称的相同名称中。如果您不记得例程中使用的标识符解释规则,请为参数名称使用一些前缀,例如
p_mypar
,而不是mypar
。
CREATE OR REPLACE PROCEDURE INSERT_LOCATION(
IN stockId VARCHAR (36),
IN locationName VARCHAR (50),
IN createdBy VARCHAR (25),
IN createdTstamp TIMESTAMP,
IN shipTo BIGINT,
IN aisleId VARCHAR (36),
IN aisleName VARCHAR(25),
IN cabinetId VARCHAR(36),
IN cabinetName VARCHAR(25),
IN shelfStart SMALLINT,
IN shelfEnd SMALLINT,
IN columnStart SMALLINT,
IN columnEnd SMALLINT
)
BEGIN
IF NOT EXISTS (SELECT STOCKLOCATIONID
FROM EVMIDB.CI_STOCKLOC
WHERE SHIPTO = shipTo
and LOCATIONNAME= locationName ) THEN
INSERT INTO EVMIDB.CI_STOCKLOC
(STOCKLOCATIONID
,SHIPTO
,LOCATIONNAME
,CREATEDBY
,CREATEDTIMESTAMP)
VALUES (stockId
,shipTo
,locationName
,createdBy
,createdTstamp);
ELSE
SET stockId=(SELECT STOCKLOCATIONID
FROM EVMIDB.CI_STOCKLOC
WHERE SHIPTO = shipTo
AND LOCATIONNAME= locationName
FETCH FIRST 1 ROWS ONLY);
END IF;
IF(aisleId !='') THEN
IF NOT EXISTS (SELECT AISLEID
FROM EVMIDB.CI_AISLE
WHERE SHIPTO = shipTo
AND AISLENAME= aisleName ) THEN
INSERT INTO EVMIDB.CI_AISLE(
AISLEID
,SHIPTO
,AISLENAME
,STOCKLOCATIONID)
values (aisleId
,shipTo
,aisleName
,stockId);
ELSE
SET aisleId=(SELECT AISLEID
FROM EVMIDB.CI_AISLE
WHERE SHIPTO = shipTo
and AISLENAME= aisleName
FETCH FIRST 1 ROWS ONLY);
END IF;
END IF;
IF(cabinetId !='') THEN
INSERT INTO EVMIDB.CI_CABINET
(CABINETID
,SHIPTO
,CABINETNAME
,SHELFSTARTRANGE
,SHELFENDRANGE
,COLUMNSTARTRANGE
,COLUMNENDRANGE
,AISLEID)
values cabinetId,
shipTo,
cabinetName,
shelfStart,
shelfEnd,
columnStart,
columnEnd,
aisleId);
END IF;
END
drop procedure s1.p001@
create procedure s1.p001(
IN num smallint default null
)
language sql
begin
if not exists (select c1 from s1.t2) then
set num=(select c1 from s1.t1);
end if;
if not exists (select c1 from s1.t2) then
insert into s1.t2 (c1) values (num);
end if;
if not exists (select c1 from s1.t3) then
insert into s1.t3 (c1) values (3);
end if;
end
@
#!/bin/sh
db2 -v "drop db db1"
db2 -v "create db db1"
db2 -v "connect to db1"
db2 -v "create table s1.t1 (c1 int)"
db2 -v "create table s1.t2 (c1 int)"
db2 -v "create table s1.t3 (c1 int)"
db2 -v "insert into s1.t1 values (1)"
# create stored procedure
db2 -td@ -vf proc001
# execute it
db2 -v "call S1.P001()"
db2 -v "select * from s1.t1"
db2 -v "select * from s1.t2"
db2 -v "select * from s1.t3"
db2 -v "terminate"
select * from s1.t1
==> 1
select * from s1.t2
==> 1
select * from s1.t3
==> 3