虽然在Stack Overflow中有很多关于这个问题的问题,但我不能正确地解决它,有谁可以帮助我解决这个问题,假设有两个存储过程,
CREATE PROCEDURE `procOne`(stName varchar(7),fullItemCode varchar(12), fullLedNo varchar(12))
BEGIN
set @x = concat('
SELECT ID, Uprice FROM ',stName,'
where Uprice > 0 and FulItmCode="',fullItemCode,'" and FullLedgerNo = "',fullLedNo,'" order by Dat desc limit 1;
');
PREPARE stmt FROM @x;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END和
CREATE PROCEDURE `prcTwo`()
BEGIN
CREATE TEMPORARY TABLE tmpStore (
ID int(10),
Uprice decimal(18,2)
)
insert into tmpStore exec procOne(@param1, @param2)
select * from tempStore;
DROP TABLE tmpStore;
END我已经尝试过了,但在尝试保存prcTwo时出现以下错误
ERROR 1064: You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use near
'insert into tmpStore exec procOne 'St_BFG','SCI019', 'BIO-JVS-30' output
sele' at line 9 SQL Statement: CREATE DEFINER=user1@localhost PROCEDURE
prcTwo() BEGIN CREATE TEMPORARY TABLE tmpStore ( ID int(10), Uprice
decimal(18,2) ) insert into tmpStore exec procOne 'St_BFG','SCI019',
'BIO-JVS-30' output select * from tempStore; DROP TABLE tmpStore; END发布于 2012-02-24 19:57:33
过程不返回值,您必须将procOne声明为函数:
CREATE FUNCTION `procOne`(stName varchar(7),fullItemCode varchar(12), fullLedNo varchar(12))
RETURNS INTEGER
BEGIN
set @x = concat('
SELECT ID, Uprice FROM ',stName,'
INTO @var1, @var2
WHERE Uprice > 0
AND FulItmCode="',fullItemCode,'"
AND FullLedgerNo = "',fullLedNo,'"
ORDER BY Dat DESC limit 1;
');
PREPARE stmt FROM @x;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
RETURN @var1;
END 请注意,函数每次调用只能返回单个值。
发布于 2012-02-24 19:52:42
像这样使用out参数
CREATE PROCEDURE abc(IN id INTEGER, OUT text VARCHAR(255))
BEGIN
SET text = 'asd';
END您可以像这样调用此过程:
SET @outvar = '';
CALL abc(1, @outvar);则'asd‘将保存在@outvar中
发布于 2012-02-24 19:55:44
正如上面提到的,我不完全理解你在做什么。将你的信息逐字记录下来,下面的内容似乎能达到预期的效果。
CREATE PROCEDURE `prcTwo`()
BEGIN
CALL procOne(@param1, @param2);
END在您的操作过程中,您遗漏了一些分号。以下是已更正错误的prcTwo过程
CREATE PROCEDURE `prcTwo`()
BEGIN
CREATE TEMPORARY TABLE tmpStore (
ID int(10),
Uprice decimal(18,2)
);
INSERT INTO tmpStore CALL procOne(@param1, @param2) ;
SELECT * FROM tempStore;
DROP TABLE tmpStore;
ENDhttps://stackoverflow.com/questions/9430260
复制相似问题