mysql存储过程出错
一直用oracle和sqlserver实在不会用MYsql谁帮我看看下面这段问题出在哪createPROCEDURE`ngcs`.`sp_GetPageRecord`(I...
一直用oracle和sqlserver 实在不会用MYsql 谁帮我看看下面这段问题出在哪
create
PROCEDURE `ngcs`.`sp_GetPageRecord` (
IN TableName VARCHAR (100),
IN PrimaryKey VARCHAR (50),
IN Col1 VARCHAR (2000) = '*',
IN WhereSql VARCHAR (1000) = '',
IN Sort VARCHAR (200) = '',
IN PageSize INT = 10,
IN CurrPage INT = 1,
IN IsDesc BIT = 0
) 展开
create
PROCEDURE `ngcs`.`sp_GetPageRecord` (
IN TableName VARCHAR (100),
IN PrimaryKey VARCHAR (50),
IN Col1 VARCHAR (2000) = '*',
IN WhereSql VARCHAR (1000) = '',
IN Sort VARCHAR (200) = '',
IN PageSize INT = 10,
IN CurrPage INT = 1,
IN IsDesc BIT = 0
) 展开
2个回答
展开全部
mysql> create PROCEDURE sp_GetPageRecord( IN TableName VARCHAR(100), IN Primar
yKey VARCHAR(50), IN Col1 VARCHAR(255) , IN WhereSql VARCHAR(255) , IN Sort V
ARCHAR(200) , IN PageSize INT , IN CurrPage INT, IN IsDesc BIT(1) ) BEGIN END;
Query OK, 0 rows affected (0.00 sec)
当然首先要确认下MySQL版本。MySQL从5.0版本开始支持存储过程
一、VARCHAR类型最多支持255个字符,超过255个字符可以考虑用TEXT变量。TEXT变量支持最大到65536个字节。
二、不支持参数中的DEFAULT值。也就是说 = ...这样的要去掉。
三、必须要有过程体,过程体的开始与结束使用BEGIN与END进行标识。
四、BIT类型支持1-64位的存储。
五、存储过程中SELECT ... INTO var_list中var_list不能用存储过程的参数。
六、下面需要注意的是DELIMITER //和DELIMITER ;两句,DELIMITER是分割符的意思,因为MySQL默认以";"为分隔符,如果我们没有声明分割符,那么编译器会把存储过程当成SQL语句进行处理,则存储过程的编译过程会报错,所以要事先用DELIMITER关键字申明当前段分隔符,这样MySQL才会将";"当做存储过程中的代码,不会执行这些代码,用完了之后要把分隔符还原。
七、存储过程根据需要可能会有输入、输出、输入输出参数,这里有一个输出参数s,类型是int型,如果有多个参数用","分割开。
参数
MySQL存储过程的参数用在存储过程的定义,共有三种参数类型,IN,OUT,INOUT,形式如:
CREATE PROCEDURE([[IN |OUT |INOUT ] 参数名 数据类形...])
IN 输入参数:表示该参数的值必须在调用存储过程时指定,在存储过程中修改该参数的值不能被返回,为默认值
OUT 输出参数:该值可在存储过程内部被改变,并可返回
INOUT 输入输出参数:调用时指定,并且可被改变和返回
在mysql命令提示符下逐行输入下面的语句。
delimiter //
create procedure `demo_out_total`(IN tbl_name varchar(255), IN whereClause varchar(255), OUT
total_tbl int)
BEGIN
DECLARE t_status int default 0;
DECLARE v_sql VARCHAR(500);
DECLARE continue HANDLER FOR SQLSTATE '23000' SET t_status = 1;
DECLARE continue HANDLER FOR SQLEXCEPTION SET t_status = 2;
set v_sql = CONCAT('select count(*) into @total from ',tbl_name, ' where ',whereClause, '
;');
select v_sql;
SET @total = 0;
SET @v_sql = v_sql;
PREPARE record FROM @v_sql;
EXECUTE record;
DEALLOCATE PREPARE record;
select @total;
set total_tbl = @total;
END;
//
/* sp demo_out_total2 use curson */
create procedure `demo_out_total2`(IN tbl_name varchar(255), IN whereClause varchar(255), OUT total_tbl int)
BEGIN
DECLARE t_status int default 0;
DECLARE c_total CURSOR for SELECT total from tmptable ;
DECLARE continue HANDLER FOR SQLSTATE '23000' SET t_status = 1;
DECLARE continue HANDLER FOR SQLEXCEPTION SET t_status = 2;
set @v_sql = 'drop table tmptable if exist tmptable;';
PREPARE record FROM @v_sql;
EXECUTE record;
DEALLOCATE PREPARE record;
set @v_sql = CONCAT('create table tmptable as select count(*) total from ',tbl_name,' where ',whereClause,';');
PREPARE record FROM @v_sql;
EXECUTE record;
DEALLOCATE PREPARE record;
OPEN c_total;
FETCH c_total INTO total_tbl;
CLOSE c_total;
END;
//
delimiter ;
set @tbl_name = 'tb2';
set @whereClause = 'tid= 237';
set @total_tbl = 0;
call demo_out_total(@tbl_name,@whereClause,@total_tbl);
select @total_tbl;
详见MySQL存储过程详解:
http://wenku.baidu.com/link?url=_W2ft5HNybWw5fBTPIFWEx-tkDyAs3gyKMT4KLOOfDbqog902bRMk2F2bCMAD-gAbNvgADf0wGk0s43QSoA2_Ci3ztQOKdO25uS85BJSdHK
MySQL存储程序入门指南:
http://www.cnblogs.com/wxb-km/archive/2012/11/18/2775780.html
MySQL create procedure语句参考:
http://dev.mysql.com/doc/refman/5.6/en/create-procedure.html
http://dev.mysql.com/doc/refman/5.6/en/cursors.html
http://dev.mysql.com/doc/refman/5.6/en/sql-syntax-prepared-statements.html
MySQL数据类型存储要求:
http://dev.mysql.com/doc/refman/5.6/en/storage-requirements.html
yKey VARCHAR(50), IN Col1 VARCHAR(255) , IN WhereSql VARCHAR(255) , IN Sort V
ARCHAR(200) , IN PageSize INT , IN CurrPage INT, IN IsDesc BIT(1) ) BEGIN END;
Query OK, 0 rows affected (0.00 sec)
当然首先要确认下MySQL版本。MySQL从5.0版本开始支持存储过程
一、VARCHAR类型最多支持255个字符,超过255个字符可以考虑用TEXT变量。TEXT变量支持最大到65536个字节。
二、不支持参数中的DEFAULT值。也就是说 = ...这样的要去掉。
三、必须要有过程体,过程体的开始与结束使用BEGIN与END进行标识。
四、BIT类型支持1-64位的存储。
五、存储过程中SELECT ... INTO var_list中var_list不能用存储过程的参数。
六、下面需要注意的是DELIMITER //和DELIMITER ;两句,DELIMITER是分割符的意思,因为MySQL默认以";"为分隔符,如果我们没有声明分割符,那么编译器会把存储过程当成SQL语句进行处理,则存储过程的编译过程会报错,所以要事先用DELIMITER关键字申明当前段分隔符,这样MySQL才会将";"当做存储过程中的代码,不会执行这些代码,用完了之后要把分隔符还原。
七、存储过程根据需要可能会有输入、输出、输入输出参数,这里有一个输出参数s,类型是int型,如果有多个参数用","分割开。
参数
MySQL存储过程的参数用在存储过程的定义,共有三种参数类型,IN,OUT,INOUT,形式如:
CREATE PROCEDURE([[IN |OUT |INOUT ] 参数名 数据类形...])
IN 输入参数:表示该参数的值必须在调用存储过程时指定,在存储过程中修改该参数的值不能被返回,为默认值
OUT 输出参数:该值可在存储过程内部被改变,并可返回
INOUT 输入输出参数:调用时指定,并且可被改变和返回
在mysql命令提示符下逐行输入下面的语句。
delimiter //
create procedure `demo_out_total`(IN tbl_name varchar(255), IN whereClause varchar(255), OUT
total_tbl int)
BEGIN
DECLARE t_status int default 0;
DECLARE v_sql VARCHAR(500);
DECLARE continue HANDLER FOR SQLSTATE '23000' SET t_status = 1;
DECLARE continue HANDLER FOR SQLEXCEPTION SET t_status = 2;
set v_sql = CONCAT('select count(*) into @total from ',tbl_name, ' where ',whereClause, '
;');
select v_sql;
SET @total = 0;
SET @v_sql = v_sql;
PREPARE record FROM @v_sql;
EXECUTE record;
DEALLOCATE PREPARE record;
select @total;
set total_tbl = @total;
END;
//
/* sp demo_out_total2 use curson */
create procedure `demo_out_total2`(IN tbl_name varchar(255), IN whereClause varchar(255), OUT total_tbl int)
BEGIN
DECLARE t_status int default 0;
DECLARE c_total CURSOR for SELECT total from tmptable ;
DECLARE continue HANDLER FOR SQLSTATE '23000' SET t_status = 1;
DECLARE continue HANDLER FOR SQLEXCEPTION SET t_status = 2;
set @v_sql = 'drop table tmptable if exist tmptable;';
PREPARE record FROM @v_sql;
EXECUTE record;
DEALLOCATE PREPARE record;
set @v_sql = CONCAT('create table tmptable as select count(*) total from ',tbl_name,' where ',whereClause,';');
PREPARE record FROM @v_sql;
EXECUTE record;
DEALLOCATE PREPARE record;
OPEN c_total;
FETCH c_total INTO total_tbl;
CLOSE c_total;
END;
//
delimiter ;
set @tbl_name = 'tb2';
set @whereClause = 'tid= 237';
set @total_tbl = 0;
call demo_out_total(@tbl_name,@whereClause,@total_tbl);
select @total_tbl;
详见MySQL存储过程详解:
http://wenku.baidu.com/link?url=_W2ft5HNybWw5fBTPIFWEx-tkDyAs3gyKMT4KLOOfDbqog902bRMk2F2bCMAD-gAbNvgADf0wGk0s43QSoA2_Ci3ztQOKdO25uS85BJSdHK
MySQL存储程序入门指南:
http://www.cnblogs.com/wxb-km/archive/2012/11/18/2775780.html
MySQL create procedure语句参考:
http://dev.mysql.com/doc/refman/5.6/en/create-procedure.html
http://dev.mysql.com/doc/refman/5.6/en/cursors.html
http://dev.mysql.com/doc/refman/5.6/en/sql-syntax-prepared-statements.html
MySQL数据类型存储要求:
http://dev.mysql.com/doc/refman/5.6/en/storage-requirements.html
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询