儲存過程之多項結果集遊標處理
以下的文章主要介紹的是MySQL遊標的使用筆記,其可以用在儲存過程的SQL語句,其主要型別主要有以下幾種,以下就是對其詳細介紹,相信如果你掌握了這項技術,會在以後的學習或是工作中帶來很大的幫助。
1、 無返回結果語句,如:INSERT,UPDATE,DROP, DELETE等
2、 select語句返回單行變數並可傳給本地變數(select ..into)
3、 返回多行結果集的select語句,並可使用MySQL遊標迴圈處理
注意,儲存過程返回的多行結果集,可以被客戶端程式(如php)所接收,但要在一個儲存過程中接收另一個儲存過程的結果集是不可能的,一般解決辦法是存入臨時表供其它過程共用
4、 prepare語句
以下主要講述遊標及prepare部分
遊標
定義
- DECLARE cursor_name CURSOR FOR SELECT_statement;
遊標操作
OPEN 開啟遊標
- OPEN cursor_name;
FETCH獲取遊標當前指標的記錄,並傳給指定變數列表,注意變數數必須與MySQL遊標返回的欄位數一致,要獲得多行資料,使用迴圈語句去執行FETCH
- FETCH cursor_name INTO variable list;
CLOSE關閉遊標
- CLOSE cursor_name ;
注意:MySQL的遊標是向前只讀的,也就是說,你只能順序地從開始往後讀取結果集,不能從後往前,也不能直接跳到中間的記錄.
一個完整的例子:
定義本地變數
- DECLARE o varchar(128);
定義遊標
- DECLARE ordernumbers CURSOR
- FOR
- SELECT callee_name FROM account_tbl where acct_timeduration=10800;
- DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_more_departments=1;
- SET no_more_departments=0;
開啟遊標
- OPEN ordernumbers;
迴圈所有的行
- REPEAT
-
-- Get order number
- FETCH ordernumbers INTO o;
- update account set allMoneyallMoney=allMoney+72,lastMonthConsumelastMonthConsume=lastMonthConsume-72 where NumTg[email protected];
迴圈結束
- UNTIL no_more_departments
- END REPEAT;
關閉遊標
- CLOSE ordernumbers;
以上的相關內容就是對MySQL遊標使用筆記的介紹,望你能有所收穫。
變數定義:
declare variable_name [,variable_name...] datatype [defaultvalue];
其中,datatype為mysql的資料型別,如:int, float, date, varchar(length)
例:
declare l_int int unsigned default 4000000; declare l_numericnumeric(8,2) default 9.95; declare l_date date default'1999-12-31'; declare l_datetime datetime default '1999-12-3123:59:59'; declare l_varchar varchar(255) default 'this will not bepadded';
變數賦值
set 變數名 = 表示式值 [,variable_name = expression ...]
引數
mysql儲存過程的引數用在儲存過程的定義,共有三種引數型別,in,out,inout
create procedure|function([[in |out |inout ] 引數名 資料類形...])
in 輸入引數
表示該引數的值必須在呼叫儲存過程時指定,在儲存過程中修改該引數的值不能被返回,為預設值
out 輸出引數
該值可在儲存過程內部被改變,並可返回
inout 輸入輸出引數
呼叫時指定,並且可被改變和返回
建儲存過程:
語法:
create procedure p()
begin
end
create procedure productpricing()
begin
selectavg(pro_price) as priceaverage
from products;
end;
# begin…end之間是儲存過程的主體定義
# mysql的分界符是分號(;)
呼叫儲存過程的方法是:
# call加上過程名以及一個括號
# 例如呼叫上面定義的儲存過程
call productpricing();
相關推薦
儲存過程之多項結果集遊標處理
http://dev.mysql.com/doc/refman/5.1/zh/stored-procedures.html#cursors 以下的文章主要介紹的是MySQL遊標的使用筆記,其可以用在儲存過程的SQL語句,其主要型別主要有以下幾種,以下就是對其詳細介紹,相信如果你掌握了這項技術,會在以後的學習或
oracle呼叫儲存過程和函式返回結果集
在程式開發中,常用到返回結果集的儲存過程,這個在MySQL和sql server 裡比較好處理,直接返回查詢結果就可以了,但在Oracle裡面 要 out 出去,就多了一個步驟,對於不熟悉的兄弟們還得出上一頭汗:),這裡我簡單介紹一下,以供參考, 1 定義包
Oracle儲存過程中多層巢狀遊標的用法
Oracle sql指令碼程式碼 CREATE OR REPLACE PROCEDURE P_DELETE_QK (pId in NUMBER, deep in NUMBER) AS -- pId = 分類ID deep = 深度,層級 on
在SQL中直接使用儲存過程查詢返回的結果集
在實際使用儲存過程是,有時我們希望先判斷儲存過程的返回結果集是否有記錄,然後走不同的業務邏輯,這是就需要在SQL語句中直接讀取到儲存過程的返回結果集,方式如下: 先按照儲存過程結果集定義一個變數 declare @tbl table(門診號 varchar(20), 住院號
如何將儲存過程執行後的結果集放入臨時表
如果能夠得到儲存過程結果集的表結構insert into #tmp exec sp_who 否則select * into #tmp from OPENROWSET('SQLOLEDB','SERVER=server;uid=sa;pwd=sapwd;Database=mas
mybaties呼叫mysql儲存過程。儲存過程返回多個select結果集。
先看需求,直接上圖 從圖中看出,需要12條普通的SELECT語句,所以就放到儲存過程中 儲存過程如下: DROP PROCEDURE IF EXISTS proc_report; DELIMITER $ CREATE PROCEDURE proc_report( OUT d_norma
mysql儲存過程之迴圈遍歷查詢結果集
-- 建立儲存過程之前需判斷該儲存過程是否已存在,若存在則刪除 DROP PROCEDURE IF EXISTS init_reportUrl; -- 建立儲存過程 CREATE PROCEDURE init_reportUrl() BEGIN -- 定義變數 DECLARE s int
SSM-Mybatis呼叫Oracle儲存過程返回結果集(遊標)示例
1.建立一個包 此處建立一個包,是為了建立儲存過程時,用遊標作為out輸出引數時宣告為遊標型別用的. --建立一個包 create or replace package types as type empListCursor is ref cursor
Java獲取儲存過程返回的多個結果集
第一步:寫你的儲存過程 delimiter // create procedure test_proc () begin select * from test_table1 where id=1; select * from test_table
jdbc取mysql儲存過程多個結果集
先來返回結果格式: [ [ {"name":"分管公司1","id":"1000"}, {"name":"分管公司2","id":"1001"}, {"name":"分管公司3","id":"1014"},
java獲取儲存過程返回的結果集(多個結果集)
在.net中,DataSet可以自動接收多個結果集,形成DataTable陣列。 使用JAVA時,也想要實現這個效果,百度一頓查詢,終於找到解決的辦法。 核心方法:CallableStatement ResultSet 具體實現程式碼: import java.s
mysql儲存過程之返回多個值
mysql儲存函式只返回一個值。要開發返回多個值的儲存過程,需要使用帶有INOUT或OUT引數的儲存過程。咱們先來看一個orders表它的結構:mysql> desc orders; +----------------+-------------+------+----
oracle 儲存過程之 open 遊標 for with t2 as ()
在專案中見到這樣的儲存過程程式碼: procedure procedure_name (out_param out cursorType, out_param2 out cursorType, in_param in cursorType )
MySQL儲存過程之遊標的使用
示例:把表中status為0所對應的age值改為99(當然有更簡單的方法,這裡主要是為了學習MySQL儲存過程中游標的使用) 先建表如下: /* 在test庫下建立testb表 */ CREATE
gitlab+jenkins+maven+docker持續集成(十)——參數化構建過程之多環境tag構建
gitlab+jenkins+maven+docker持續集成(十)——參數化構建過程之多環境tag構建同一個項目,要構建到不同的環境,而且對應的分支或tag也不相同,這裏就要用到jenkins的參數化構建過程 中的Git Parameter和Choice Parameter, 先看下效果實現過程構建過程:G
[SQL]sql server中如何直接查詢存儲過程EXEC返回的結果集?
arc div lec rom 結果 In varchar SQ type Declare @T Table (iDay VARCHAR(4),iNum DECIMAL(18,2),yuxiang DECIMAL(18,9))
多個結果集 union
使用 後來 兩個 當前時間 rec 查詢 union和 計劃 判斷 之前物流發布計劃的展示是按照失效時間降序排列的.但是後來我們需要讓沒有過期的發布計劃升序排列,過期了的發布計劃降序排列.這種要求如果要在一個查詢裏實現的話我暫時還沒有思路,所以我使用union拼接兩個查詢結
sql中連線多個結果集查詢符合要求的欄位
1.sql中將查詢到的結果集作為一個表去連線多個結果集查詢想要的欄位,適用於查詢複雜邏輯的欄位; 舉例: select dd.base_grade_value,count(distinct dd.userid) from (select cc.school_id,bb.us
Java之判斷ResultSet結果集是否為空
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
MySQL儲存過程之while、repeat迴圈
一、while迴圈 CREATE DEFINER=`root`@`localhost` PROCEDURE `PRO_WHILE`() BEGIN DECLARE i INT DEFAULT 0; WHILE (i<10) DO /*當滿足條件的時候執行此程式碼塊*/ BE