mysql - 如何在mysql中存储存储过程的返回值

标签 mysql stored-procedures

虽然 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

最佳答案

像这样使用输出参数

CREATE PROCEDURE abc(IN id INTEGER, OUT text VARCHAR(255))
BEGIN 
    SET text = 'asd';
END

你可以这样调用这个过程:

SET @outvar = '';
CALL abc(1, @outvar);

'asd' 将保存在@outvar 中

关于mysql - 如何在mysql中存储存储过程的返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9430260/

相关文章:

java - 如何使用存储过程进行选择

sql-server - SQL Server 中带有条件 Where 子句的存储过程

mysql - Angularjs 日期格式化和排序

php - 如何用 Zend_Db 引用列名?

mysql - Spring Boot加载时清除MySQL表数据

sql-server - 存储过程生成工具

mysql - 是否可以从 Ruby 调用 MySQL 存储过程?

mysql - 统计某个类别和月份/年份的已发布帖子数量

php - 如何从不同的文件访问函数内的变量?

c# - 使用存储过程仅在实体中删除