mysql 存储过程的问题

2016-02-19 09:48 3 1 收藏

关注图老师设计创意栏目可以让大家能更好的了解电脑,知道有关于电脑的更多有趣教程,今天给大家分享mysql 存储过程的问题教程,希望对大家能有一点小小的帮助。

【 tulaoshi.com - 编程语言 】

一开始用phpMyAdmin来执行,后来出现一堆错误,后来去掉了begin,end之后可以正常执行,但要执行存储过程,在phpMyAdmn中不行,而在mysql命令行文本框中就可以。
接下来又遇到更难的问题,在存储过程中加入预处理语句,更不行了,在mysql命令行文本框下执行同样,下面的运行记录,给大家参考,能否有高手来帮助。
代码如下:

mysql CREATE PROCEDURE catalog_get_products_in_category(
- IN inCategoryId INT, IN inShortProductDescriptionLength INT,
- IN inProductsPerPage INT, IN inStartItem INT)
- begin
- SELECT p.product_id, p.name,IF(LENGTH(p.description) = inShortProductD
escriptionLength, p.description,
- CONCAT(LEFT(p.description, inShortProductDescriptionLength),'...')) AS
description, p.price, p.discounted_price, p.thumbnail
- FROM product p INNER JOIN product_category pc ON p.product_id = pc.pro
duct_id
- WHERE pc.category_id = inCategoryId
- ORDER BY p.display DESC
- LIMIT inStartItem;inProductsPerPage;
- end$$
ERROR 1064 (42000): 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 'inSta
rtItem;inProductsPerPage;
end' at line 10

//原本的存储过程语句
EATE PROCEDURE catalog_get_products_in_category(
IN inCategoryId INT, IN inShortProductDescriptionLength INT,
IN inProductsPerPage INT, IN inStartItem INT)
BEGIN
PREPARE statement FROM
"SELECT p.product_id, p.name,IF(LENGTH(p.description) = ?, p.description,
CONCAT(LEFT(p.description, ?),'...')) AS description, p.price, p.discounted_price, p.thumbnail
FROM product p INNER JOIN product_category pc ON p.product_id = pc.product_id
WHERE pc.category_id = ?
ORDER BY p.display DESC
LIMIT ?, ?";
SET @p1 = inShortProductDescriptionLength;
SET @p2 = inShortProductDescriptionLength;
SET @p3 = inCategoryId;
SET @p4 = inStartItem;
SET @p5 = inProductsPerPage;
EXECUTE statement USING @p1, @p2, @p3, @p4, @p5;
END$$

mysql delimiter $$
mysql CREATE PROCEDURE catalog_get_products_in_category(
- IN inCategoryId INT, IN inShortProductDescriptionLength INT,
- IN inProductsPerPage INT, IN inStartItem INT)
- BEGIN
- PREPARE statement FROM
- "SELECT p.product_id, p.name,IF(LENGTH(p.description) = ?, p.descript
ion,
" CONCAT(LEFT(p.description, ?),'...')) AS description, p.price, p.disco
unted_price, p.thumbnail
" FROM product p INNER JOIN product_category pc ON p.product_id = pc.pro
duct_id
" WHERE pc.category_id = ?
" ORDER BY p.display DESC
" LIMIT ?, ?";
- SET @p1 = inShortProductDescriptionLength;
- SET @p2 = inShortProductDescriptionLength;
- SET @p3 = inCategoryId;
- SET @p4 = inStartItem;
- SET @p5 = inProductsPerPage;
- EXECUTE statement USING @p1, @p2, @p3, @p4, @p5;
- END$$
ERROR 1314 (0A000): PREPARE is not allowed in stored procedures

上面有两个存储过程,一个不用预处理语句,一个用了预处理语句,
之后,向作者发过邮件,没有答复,又给mysql官方发过邮件,同样没答复。现今只能求助诸位高人。

来源:https://www.tulaoshi.com/n/20160219/1592232.html

延伸阅读
1.在Oracle中,数据表别名不能加as,如: select a.appname from appinfo a;-- 正确 select a.appname from appinfo as a;-- 错误 也许,是怕和oracle中的存储过程中的关键字as冲突的问题吧 2.在存储过程中,select某一字段时,后面必须紧跟into,如果select整个记录,利用游标的话就另当别论了。 select af.keyn...
1、实例 代码如下: DELIMITER // DROP PROCEDURE IF EXISTS `test`.`p_getvalue` // CREATE DEFINER=`root`@`localhost` PROCEDURE `p_getvalue`( in id varchar(20),out s varchar(20) ) begin if (length(id)=11) then select 'A_B_C_D' into s; elseif(length(id)=8) then select 'A_B_C' into s; elseif(length(id)=5) then sele...
标签: PHP
MySql5.0以后均支持存储过程,最近有空,研究了一把这个。 格式:
标签: MySQL mysql数据库
MySql5.0以后均支持存储过程,最近有空,研究了一把这个。 格式: CREATE PROCEDURE 过程名 ([过程参数[,...]]) [特性 ...] 过程体 CREATE FUNCTION 函数名 ([函数参数[,...]]) RETURNS 返回类型 [特性 ...] 函数体 过程参数: [ IN | OUT | INOUT ] 参数名 参数类型 函数参数: 参数名 参数类型 返回类型:...
标签: ASP
  一、先介绍一下什么是存储过程 存储过程是利用SQL Server所提供的Tranact-SQL语言所编写的程序。Tranact-SQL语言是SQL Server提供专为设计数据库应用程序的语言,它是应用程序和SQL Server数据库间的主要程序式设计界面。它好比Oracle数据库系统中的Pro-SQL和Informix的数据库系统能够中的Informix-4GL语言一样。这类语言主要提供以...

经验教程

633

收藏

70
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部