MySql: 在声明语句前如何调用存储过程

3

在声明游标之前,我需要调用存储过程。该存储过程会填充一个表格,然后游标将循环遍历这些表格行。但是Workbench不允许在declare语句之前调用存储过程或其他任何内容。

create definer=`root`@`%` procedure `usp_tesst`()
begin
declare ordid int;
declare packid int;
declare cstmid int;
declare deltimespanid int;
declare dstrcid int;
declare pcstatus tinyint(1);
declare deliverytime datetime;

declare maxdate datetime;
declare temppackcount int default(0);

    call usp_createtemppackages;

-- it says there is a syntax error in here

    declare crs cursor for 
                select  * from temppackages....

我应该如何称呼这个sp?

1
我知道这是老问题,但我也遇到了同样的问题。似乎我们不能在声明之前编写程序。那么我们该怎么做呢? - KD.S.T.
2个回答

1

存储过程中的DECLARE语句必须放在第一位。

考虑以下几种方案 - 1)在调用usp_tesst之前先调用usp_createtemppackages;2)将usp_createtemppackages功能整合到usp_tesst中;3)移除游标并使用其他方式迭代表格(这也可能提高性能,因为游标有点慢)。


0
您可以按照以下方式完成您所需的操作:
...
declare maxdate datetime;
declare temppackcount int default(0);

/*call usp_createtemppackages;*/

-- it says there is a syntax error in here
    declare crs cursor for 
                select  * from temppackages....

call usp_createtemppackages;
...

SQL Fiddle演示


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接