mysql 存儲(chǔ)過程的問題
更新時(shí)間:2009年06月05日 23:57:46 作者:
最近我接觸了一本php 與 mysql,老外寫的一本書,書中有個(gè)tshirtshop網(wǎng)店代碼,其中操作數(shù)據(jù)庫(kù)的大多用的是mysql存儲(chǔ)過程
一開始用phpMyAdmin來執(zhí)行,后來出現(xiàn)一堆錯(cuò)誤,后來去掉了begin,end之后可以正常執(zhí)行,但要執(zhí)行存儲(chǔ)過程,在phpMyAdmn中不行,而在mysql命令行文本框中就可以。
接下來又遇到更難的問題,在存儲(chǔ)過程中加入預(yù)處理語(yǔ)句,更不行了,在mysql命令行文本框下執(zhí)行同樣,下面的運(yùn)行記錄,給大家參考,能否有高手來幫助。
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
//原本的存儲(chǔ)過程語(yǔ)句
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
上面有兩個(gè)存儲(chǔ)過程,一個(gè)不用預(yù)處理語(yǔ)句,一個(gè)用了預(yù)處理語(yǔ)句,
之后,向作者發(fā)過郵件,沒有答復(fù),又給mysql官方發(fā)過郵件,同樣沒答復(fù)?,F(xiàn)今只能求助諸位高人。
接下來又遇到更難的問題,在存儲(chǔ)過程中加入預(yù)處理語(yǔ)句,更不行了,在mysql命令行文本框下執(zhí)行同樣,下面的運(yùn)行記錄,給大家參考,能否有高手來幫助。
復(fù)制代碼 代碼如下:
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
//原本的存儲(chǔ)過程語(yǔ)句
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
上面有兩個(gè)存儲(chǔ)過程,一個(gè)不用預(yù)處理語(yǔ)句,一個(gè)用了預(yù)處理語(yǔ)句,
之后,向作者發(fā)過郵件,沒有答復(fù),又給mysql官方發(fā)過郵件,同樣沒答復(fù)?,F(xiàn)今只能求助諸位高人。
您可能感興趣的文章:
- mysql 讓一個(gè)存儲(chǔ)過程定時(shí)作業(yè)的代碼
- mysql中用于數(shù)據(jù)遷移存儲(chǔ)過程分享
- mysql 查詢數(shù)據(jù)庫(kù)中的存儲(chǔ)過程與函數(shù)的語(yǔ)句
- MSSQL存儲(chǔ)過程學(xué)習(xí)筆記一 關(guān)于存儲(chǔ)過程
- MySQL 存儲(chǔ)過程的基本用法介紹
- MySQL存儲(chǔ)過程例子(包含事務(wù),輸出參數(shù),嵌套調(diào)用)
- mysql 存儲(chǔ)過程中變量的定義與賦值操作
- mysql中存儲(chǔ)過程、函數(shù)的一些問題
- MySql的存儲(chǔ)過程學(xué)習(xí)小結(jié) 附pdf文檔下載
相關(guān)文章
django2.2版本連接mysql數(shù)據(jù)庫(kù)的方法
這篇文章主要介紹了django2.2版本如何連接mysql數(shù)據(jù)庫(kù),本文圖文并茂給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-10-10適合新手的mysql日期類型轉(zhuǎn)換實(shí)例教程
Mysql作為一款開元的免費(fèi)關(guān)系型數(shù)據(jù)庫(kù),用戶基礎(chǔ)非常龐大,下面這篇文章主要給大家介紹了關(guān)于mysql日期類型轉(zhuǎn)換的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-08-08探討:sql插入空,默認(rèn)1900-01-01 00:00:00.000的解決方法詳解
本篇文章是對(duì)sql插入空,默認(rèn)1900-01-01 00:00:00.000的解決方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06MySQL8.0.3 RC版即將發(fā)布 先來看看有哪些變化
MySQL8.0.3 RC版即將發(fā)布,這篇文章主要介紹了MySQL8.0.3 RC版的一些新變化,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-09-09linux mysql忘記密碼的多種解決或Access denied for user ''root''@''local
linux mysql忘記密碼的多種解決方法。2009-07-07