1. 程式人生 > >mysql儲存過程limit入參問題

mysql儲存過程limit入參問題

1、mysql的高版本(5.5),儲存過程中的limit可以使用變數,如下:select * from student limit iStart,iNum;

2、mysql的低版本(5.1),儲存過程中的limit不能使用變數,編譯報錯,如下:You have an error in your SQL syntax, ...near iStart,iNum

3、怎麼解決低版本的問題?
可以使用執行動態sql語句,把整個sql語句傳給儲存過程。靜態sql語句,編譯的時候是sql的語句結構就已經確定下來。而動態sql語句,是在執行的時候,才知道sql的語句結構。注意:繫結變數也是靜態sql語句,sql語句結構確定下來了,等著填空。動態sql語句如下:


DROP PROCEDURE IF EXISTS `dmu_exedynamicsql_bypage`;
DELIMITER ;;
CREATE DEFINER=`root`@`%` PROCEDURE `dmu_exedynamicsql_bypage`(_qrySql MEDIUMTEXT, out _totalCount int)
BEGIN
  set @qrySql = _qrySql;
  prepare stmt from @qrySql;
  execute stmt;
  deallocate prepare stmt; -- 釋放掉預處理段

  set _totalCount =0;
  select FOUND_ROWS() into _totalCount;


END
;;
DELIMITER ;

注意:DELIMITER ;;的意思。mysql中預設分號; 是一個執行的結束,而儲存過程中包含多個語句,分號間隔,這些語句是一起執行的,怎麼解決這個問題?

DELIMITER ;; 告訴mysql 下面的語句一起執行,直到遇到兩個分號;;  上面的儲存過程執行完之後,DELIMITER ; 把分隔符切換為單個分號;

相關推薦

mysql儲存過程limit問題

1、mysql的高版本(5.5),儲存過程中的limit可以使用變數,如下:select * from student limit iStart,iNum; 2、mysql的低版本(5.1),儲存

MySql儲存過程中傳和不傳以及java中呼叫程式碼

資料庫表結構 1.mysql不傳參寫儲存過程 create procedure product() -- product為儲存過程名稱 begin select * from book; end 呼叫此儲存過程為 CALL product

PL/SQL測試存在CLOB型別儲存過程時,為NULL

    今天有一儲存過程呼叫時報錯, 想dubeg下查詢問題 . 但是由於一入參為CLOB型別(如果為VARCHAR2,只支援2000長度),利用PL/SQL自身的測試功能測試時,v_doc 填入引數在執行方法是不會被傳進去,所以這個引數會為null. 測試方式:

MySql儲存過程limit

最近做專案用到了MySql資料庫,感覺還是蠻好用的,但是有同事前幾天寫儲存過程的時候老調不通,我看了看後發現把limit語句後面帶的引數隨便改成一個數字就除錯通過了,不知道是MySql當初就這麼設計的還是一個bug。後來在網上找到一個方法可以通過傳引數的方法解決該問題:

mysql儲存過程以"陣列"形式實現表間複製 並實現回滾

這個程式碼是我需要實現,前端稽核某個稽核後,這個資料會在另一個頁面中呈現,涉及到兩個資料庫表。一下內容是用於測試的程式碼。 前端進行處理,將id封裝成陣列後提交到Java後臺,"陣列"使用 - 來分隔,是因為入參時,我使用了逗號,但是測試失敗了,就改用-或空格 在點提交後

Mysql儲存過程2:變量定義與數傳遞

變量定義 color ted lec mysq 傳遞 參數傳遞 fault 可選 #儲存過程 中的變量定義 declare 變量名 類型 可選類型 -- 跟建表差不多 create procedure p() begin declare age int de

mysql 儲存過程limit

1、mysql的高版本(5.5),儲存過程中的limit可以使用變數,如下:select * from student limit iStart,iNum; 2、mysql的低版本(5.1),儲存過程中的limit不能使用變數,編譯報錯,如下:You have an error in your SQL sy

Mysql儲存過程8:repeat循環

local cal 其他 host ted query code class pan 語法: repeat SQL until 條件 end repeat; 就是相當於其他語言中的: do{ # }while(); mys

Mysql儲存過程4:mysql變量設置

from 默認 pan procedure weight use mysql變量 sql 寫法 默認全局變量是兩個@@開頭, 可用show variables查看所有默認變量: @@user #declare定義變量只能用在儲存過程中 #declare 變量名 數據類型

Mysql儲存過程3:if語句

sql語句 inpu arguments ted div mysql then for clas --if/else語句 if 條件 then SQL語句 else SQL語句elseifSQL語句 end if; create procedure test1( n

MySQL 儲存過程-原理、語法、函數詳細說明

exp sql 十六進制 作用範圍 安全機制 系統管理員 rtrim 編程 xtra Mysql儲存過程是一組為了完成特定功能的SQL語句集,經過編譯之後存儲在數據庫中,當需要使用該組SQL語句時用戶只需要通過指定儲存過程的名字並給定參數就可以調用執行它了,簡而言之就是一組

MySQL儲存過程

date 算數運算 else 使用 not 流程控制語句 posit 表達 gin 儲存過程 本文章原創,轉載需註明出處. 前提: 在大型數據庫中 來源: 為了完成特定功能的SQL語句集 定義: 儲存在數據庫中, 用戶通過指定儲存過程的名字並給出參數(帶有參數的)來執

MySQL儲存過程和函式的區別與優缺點

為什麼要使用儲存過程和函式 資料庫物件儲存過程和函式,是用來實現一組關於表操作的SQL語句程式碼當做一個整體來執行。一個完整的操作會包含多條SQL語句,在執行過程中需要根據前面的SQL語句來執行結果有選擇的執行後面的SQL語句。 儲存過程和函式可以簡單的理解為一條或多條SQL語句的集合

spring data jpa 如何呼叫mysql儲存過程

  A:首先定義儲存過程依賴的jpa表:     @Entity     @Table(name="evenmngt_childthingtree_tmp")//資料庫中的表名     @Name

mysql儲存過程迴圈 while/repeat/loop

先把語句結束符設定成// mysql> DELIMITER // while 條件 do … end while mysql> create procedure proce_while() -> begin -> de

mysql儲存過程引數輸入輸出IN/OUT/INOUT

mysql儲存過程中,IN用來輸入引數,OUT用來輸出引數,INOUT輸入和輸出。 IN引數 建立儲存過程 mysql> delimiter // mysql> create procedure proce1(IN count int) ->

mysql 儲存過程示例

在mysql的test庫中執行如下sql: -- ---------------------------- -- Table structure for user -- ---------------------------- DROP TABLE IF EXISTS `user`; CREAT

mysql儲存過程舉例:100以內的整數除以2、4、6、8的結果,相加等於多少

學習儲存過程:首先知道它是幹嘛的,  概念:將一組sql語句,完成一個特定的功能,稱之為儲存過程, 寫儲存過程:只能建立、替換、刪除 DROP PROCEDURE IF EXISTS sum; -- procedure 存在則先刪除 create procedure `su

mysql儲存過程遊標檢視select結果集

mysql中使用select(或者使用print未嘗試)檢視引數 DELIMITER $ create PROCEDURE myPro() BEGIN    DECLARE  id varchar(64);   -- id     DE

MySQL--儲存過程的迴圈語句程式碼筆記--while、repeat和loop

mysql> delimiter $$ mysql> create table testB -> ( -> id int(6) not null -> ) $$ Query OK, 0 rows affected (0.86 sec) mysq