1. 程式人生 > >基於MySQL遊標和儲存過程的迴圈插入

基於MySQL遊標和儲存過程的迴圈插入

/*我們有時候會遇到需要對 從A表查詢的結果集S_S 的記錄 進行遍歷並做一些操作(如插入),且這些操作需要的資料或許部分來自S_S集合*/
/*臨時儲存過程,沒辦法,不能直接在查詢視窗做這些事。*/
drop procedure if exists proc_tmp;
create procedure proc_tmp()
BEGIN
/*這種寫法也可以:DECLARE doneINT DEFAULT FALSE;*/
declare done int default 0;  /*用於判斷是否結束迴圈*/
declare hostId bigint; /*用於儲存結果集S_S的記錄(因為我這裡S_S的記錄只有一列且為bigint型別)*/

/*定義遊標*/
declare
idCur cursor
for select A.HostId from dev_host as A, sys_hostconfig as B where A.HostId != B.HostId; /*定義 設定迴圈結束標識done值怎麼改變 的邏輯*/ declare continue handler for not FOUND set done = 1; /*done = true;亦可*/ open idCur; /*開啟遊標*/ /* 迴圈開始 */ REPEAT /* 如果要fetch多列應該這樣寫,fetch cur/*對應下面的idCur*/ into rowId, rowName;但是注意rowId和rowName要先declare,且declare cur時也要select兩列,且這兩列和rowId、rowName對應 */ fetch
idCur into hostId; /*這部分可以看看書,還可以fetch多列(假設結果集S_S的記錄不是單列的話)*/
if not done THEN /*數值為非0,MySQL認為是true*/ insert into sys_hostconfig(HostId, AElecCap, BElecCap, CElecCap, RemElecCap, ATmpCap, BTmpCap, CTmpCap, BoxTmpCap, CreateTime) /*注意這裡用到了hostId和now()*/ values(hostId, 80, 80, 80, 500, 80, 80, 80, 80, NOW()); end
if; until done end repeat; close idCur; /*關閉遊標*/ END /* 迴圈結束 */ call proc_tmp(); drop procedure proc_tmp; /*刪除臨時儲存過程*/

相關推薦

基於MySQL遊標儲存過程迴圈插入

/*我們有時候會遇到需要對 從A表查詢的結果集S_S 的記錄 進行遍歷並做一些操作(如插入),且這些操作需要的資料或許部分來自S_S集合*/ /*臨時儲存過程,沒辦法,不能直接在查詢視窗做這些事。*/ drop procedure if exists proc_tmp; c

簡單瞭解一下oracle中的顯示遊標儲存過程

遊標   遊標主要分兩類動態和靜態遊標,靜態遊標是編譯時知道明確的select語句的遊標,靜態遊標分類兩種,顯示遊標和靜態遊標,這裡只說顯示遊標 顯示遊標 declare name emp.ename%type; sal emp.sal%type; --宣

MySQL檢視儲存過程詳解

一 mysql檢視 1 檢視的目的: 讓同一個資料庫被訪問時,對於不同的登入帳號,顯示不同的資料資訊 2 檢視的優點: 1)資料獨立: 一旦檢視結構確定,可以遮蔽表結構對使用者的影響 2)安全: 使用者只能看到檢視中的資料 3)簡單: 使用者不需要關心檢視中的資料如何查詢獲得,檢視中的資

Mysql檢視儲存過程

SQL裡面不帶引數的儲存過程與檢視的區別 1、儲存過程是程式化的sql可以實現一般sql不能實現的功能。 如:先檢索一個表得到一些資料,經過一定的編輯後更新到另外一個表中、這就可以用不帶引數的儲存過程實現。 2、檢視是虛擬表,不儲存資料,儲存的是sql,

mysql-遊標儲存過程遊標的使用--源自技術

一個完整的mysql遊標使用例子:定義本地變數DECLARE o varchar(128); 定義遊標DECLARE ordernumbers CURSOR  FOR  SELECT callee_name FROM account_tbl where acct_time

mysql函式儲存過程

mysql儲存過程是幹嘛的?函式又是幹嘛的? 忽然想解釋著兩個問題也有點頭大。不過想想也簡單。 剩下的事白話胡扯的,聽聽就行了不要當著,如果有什麼不合適的,或者是誤人子弟的請留言評論。馬上更正 首先我們說儲存過程是幹嘛的,為嘛要用儲存過程 如果沒學過程式語言java或C++

mysql儲存過程迴圈事務插入資料

DROP PROCEDURE IF EXISTS insertTUserStatement; create procedure insertTUserStatement(IN num int) begin declare i int; start transac

MySQL中的儲存過程遊標儲存函式

MySQL中的儲存過程 首先來看兩個問題: 1.什麼是儲存過程? 儲存過程(Stored Procedure)是在資料庫系統中,一組為了完成特定功能的SQL語句集,經編譯後儲存在資料庫中,使用者通過指定儲存過程的名字並給出引數(如果該儲存過程有引數的話)來執行它。 2.為什麼要使用儲

MYSQL儲存過程迴圈CURSOR(遊標)使用

遊標概述 概括來說,遊標是一種臨時的資料庫物件,即用來存放一個表中所有資訊或者表中的一部分資料資訊(副本)。遊標也可以用來指向資料的某一行,可以充當資料庫中的行指標。 最常見用途就是儲存查詢結果,便於後面使用,遊標中的結果集都是有select語句產生的(臨時的資料庫物件)。

MYSQL儲存過程迴圈遍歷插入資料

本示例通過 while...end while 迴圈控制遊標來實現插入表記錄。 DROP PROCEDURE IF exists pro_initCategoryForTradingEntity; create procedure pro_initCategoryForTr

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

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

學會使用MySQL中自定義函式儲存過程

一、快速瞭解什麼是儲存過程和函式?   儲存過程和函式是事先經過編譯並存儲在資料庫中的一段 SQL 語句的集合,呼叫儲存過程 和函式可以簡化應用開發人員的很多工作,減少資料在資料庫和應用伺服器之間的傳輸,對 於提高資料處理的效率是有好處的。   在對儲存過程或函式進行操作時,需要

MySQL基礎值 儲存過程函式

一、建立儲存過程和函式 什麼是建立儲存過程和函式?    就是將經常使用的一組SQL語句組合在一起,並將這些SQL語句當做一個整體儲存在MYSQL伺服器中。 建立儲存過程的語句是:CREATE  PROCEDURE   建立儲存函式的語句是:CREATE  FU

MySQL-SQLyog執行儲存過程儲存函式等

1.開啟SQLyog在目錄樹-函式(儲存過程)資料夾上右鍵,建立函式(建立儲存過程) 2.按照MySQL定義函式的規則,新定義一個函式:   3. 然後新建查詢編輯器,呼叫自定義的函式。 命令:SELECT function_name(params1, ...),函式名稱

MySQL 筆記8 -- 儲存過程索引

MySQL 筆記8 – 儲存過程和索引 MySQL 系列筆記是筆者學習、實踐MySQL資料庫的筆記 課程連結: MySQL 資料庫基礎入門教程 參考文件: MySQL 官方文件 SQL 教程 一、儲存過程 1、儲存過程 一組可程式設計的函式,

mysql 使用儲存過程定期插入一定的資料

delimiter $$ create procedure insertyonghu2() begin declare i varchar(20); declare j varchar(20); declare x int; set x=50; set i = 'li'; set j='xiaoto

MySQL中的儲存過程函式使用詳解

一.對待儲存過程和函式的態度 在實際專案中應該儘量少用儲存過程和函式,理由如下: 1.移植性差,在MySQL中的儲存過程移植到sqlsever上就不一定可以用了。 2.除錯麻煩,在db中報一個錯誤和在應用層報一個錯誤不是一個概念,那將是毀滅性打擊,直接一個error:1045什麼的更本毫無頭緒。 3.擴充套件

mybaits(查詢與別名、日誌框架顯示sql語句、物件屬性資料庫表字段不匹配resultMap使用、mysql資料查詢分頁、執行sql儲存過程、動態SQL語句)

主要是各種配置檔案,建議把整個專案搬到自己電腦上慢慢看。 建立maven專案 首先是各種配置檔案: pom.xml: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://m

MySQL自定義函式儲存過程的區別:

  自定義函式和儲存過程的區別: 1)一般來說,儲存過程實現的功能要複雜一點,而函式的實現的功能針對性比較強。儲存過程,功能強大,可以執行包括修改表等一系列資料庫操作;使用者定義函式不能用於執行一組修改全域性資料庫狀態的操作。 2)對於儲存過程來說可以返回引數,如記錄集,而函式只能返回值或者表物件。函式只能

MySQL 筆記8 -- 儲存過程索引

MySQL 筆記8 – 儲存過程和索引 MySQL 系列筆記是筆者學習、實踐MySQL資料庫的筆記 一、儲存過程 1、儲存過程 一組可程式設計的函式,是為了完成特定功能的SQL語句集 經編譯