1. 程式人生 > >mysql儲存過程利用遊標查詢每個資料庫的所有表

mysql儲存過程利用遊標查詢每個資料庫的所有表

DELIMITER $  

DROP PROCEDURE listAllDB;  
  
CREATE PROCEDURE listAllDB()  
BEGIN  
DECLARE  no_more_record INT DEFAULT 0;
 /*定義2個變數:temp用於記錄遊標每次next的值,schemaName表示將所有temp拼接後的值*/
 DECLARE  schemaName varchar(500) DEFAULT '';
 DECLARE  temp varchar(20);

 /*將賦值查詢返回的所有資料庫名賦值給遊標*/
 DECLARE  cur_record CURSOR FOR SELECT `SCHEMA_NAME` FROM `information_schema`.`SCHEMATA`;  
 
/*表示沒有資料返回時將這個值設定為1*/
 DECLARE  CONTINUE HANDLER FOR NOT FOUND SET no_more_record = 1; 

 OPEN  cur_record; /*接著使用OPEN開啟遊標*/
 FETCH  cur_record INTO temp; /*將遊標一次next的資料賦值給temp,即一行資料,如果有多列,可以用,分割賦值給多個變數*/

 WHILE no_more_record != 1 DO
 
 SET schemaName = concat(temp,',',schemaName);#拼接資料庫名

 /*查詢資料庫下面的所有表*/
 select table_schema,table_name from information_schema.tables where table_schema=temp;
 
 FETCH  cur_record INTO temp;

 END WHILE;
 CLOSE  cur_record;  /*用完後記得用CLOSE把資源釋放掉*/

 select schemaName; /*檢視所有的資料庫名*/
END $  
  
CALL listAllDB();   

相關推薦

mysql儲存過程利用遊標查詢每個資料庫所有

DELIMITER $ DROP PROCEDURE listAllDB; CREATE PROCEDURE listAllDB() BEGIN DECLARE no_mor

儲存過程 利用遊標 解決複製業務

需求: 根據同一表的某條件更新欄位 情況一: 以group by 作為條件的 select user a, (select count(*) as tj_num, s_id from user group by s_id) b set a.tuijian_num=b.tj_num where a.id=b

mysql 儲存過程使用遊標多執行一條記錄

今天在寫資料遷移的儲存過程發現總會多執行一條記錄修改後記錄如下: DECLARE notfoundroute INT DEFAULT 0; declare route_cursor CURSOR FOR select uid, uteamid, iday, ctitle, ctrip, ct

MYSQL儲存過程遊標(2)

儲存過程和遊標! 之前修改了表結構,現在要填充內容了, 需求:將已有的資料表內容進行擴充,比如A表現在增加了欄位,內容在B表,將他轉移過來 這裡經過掙扎,最後達成! /*填充batch_course_p

MYSQL儲存過程遊標學習

自己隨便寫了一個統計使用者許可權數量插入對應表的案例 CREATE TABLE IF NOT EXISTS u_user_role_count ( `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT "表ID", `uid` BIGINT NOT NULL

mysql 儲存過程遊標及逐行處理的配合使用

1. 資料準備 +----+------+--------+ | id | name | price1 | +----+------+--------+ | 1 | 大米 | 5 | | 2 | 雞蛋 | 4.5 | | 3 | 蘋果 | 6

儲存過程利用遊標迴圈執行update語句

初到公司的第一個工作任務:(用Oracle的job定時對一個值進行累加計算); 雖然比較簡單,但是由於已經兩年多沒有用過儲存過程和遊標這些了,所以重新溫習了下; 記下筆記 ========建立儲存過程,定義遊標迴圈執行update語句 create or replace

MySQL 儲存過程遊標使用

一、儲存過程建立1.1、語法[DELIMITER $$ ]  --宣告結束符號,mysql預設;為語句結束符,這裡聲明後當儲存過程遇到$$才結束。CREATE PROCEDURE pro_name ([[ IN |OUT | INOUT ] 引數名 資料類形...])  --

MySQL儲存過程遊標的使用

示例:把表中status為0所對應的age值改為99(當然有更簡單的方法,這裡主要是為了學習MySQL儲存過程中游標的使用) 先建表如下: /* 在test庫下建立testb表 */ CREATE

MyBatis,MySql儲存過程分頁查詢

前言 如果涉及到同一臺機器上不同庫不同表的關聯查詢,可以通過 資料庫名.表名 的形式來進行跨庫查詢,若不用外掛,這時可以通過儲存過程來完成查詢。 編寫儲存過程 以學生資訊查詢為例,例如有兩個庫。 學生庫student(學生資訊表 stu_info)

mysql儲存過程遊標遍歷

DELIMITER $$ CREATE PROCEDURE alarm_replay_insert_procedure() BEGIN -- 定義變數 DECLARE _nowTime D

MySQL、SQL server 、Oracle資料庫查詢所有資料庫查詢指定資料庫所有名,查詢所有的欄位的名字

MySQL中查詢所有資料庫名和表名 1.查詢所有資料庫 show databases; 2.查詢指定資料庫中所有表名 select table_name from information_schema.tables where table_schema='database_name' a

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

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

查詢postgresql資料庫所有中的所有欄位包含一個字串

    宣告:不是通過sql語句查出來的,是藉助Navicat資料庫管理功能實現的. 具體操作如下: 開啟navicat資料庫管理工具,找到你要操作的資料庫,右鍵模式下的表 單擊在模式中查詢 看到

mysql儲存過程查詢結果迴圈遍歷 判斷 賦值 遊標等基本操作

一、首先說下本篇部落格所實現功能的背景和功能是怎樣的:       背景:因為公司專案開始遷移新平臺專案,所以以前的平臺老資料以及訂單資訊需要拆分表,而且需要業務邏輯來分析以前的訂單表,來拆分成另外的幾個新表,包括增加新的流水分析,以及更新其他使用者或者商家的餘額以及對賬

MYSQL利用儲存過程實現模糊查詢

今做資料庫課程設計時,課設要求利用儲存過程實現模糊查詢。第一次聽到這樣的要求感覺很荒謬,會不會是要求寫錯了。在此我為我的無知感到羞愧。廢話不多說,接下來我們講一下在MYSQL資料庫中如何利用儲存過程實現模糊查詢呢? 假如我們在資料庫中建有這樣的一個表: 接下來我們直接上儲

MySQL 儲存過程查詢遠端資料庫的方法

這幾天有個任務,需要在儲存過程中讀取遠端資料庫一個表的資料存到本地表,然後進行計算。 在網上查找了資料,Oracle和SQL Server查詢遠端資料庫是比較方便的,MySQL麻煩一些,需要在本地建立一個需要查詢的遠端的表結構完全一樣的表,並且是Federat

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

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

MYSQL儲存過程遊標的使用

1、儲存過程 儲存過程是什麼,簡單來講,就像Java中的 方法(函式),不過它是SQL世界中的方法。 大部分時候,我們所使用都是單條SQL,用來針對一個或多表連線。但是也有情況,是據判斷先對錶A執行操作,變動後再結合表B進行操作。即SQL的執行可能需要 考慮

mysql儲存過程代替遞迴查詢mysql儲存過程代替遞迴查詢

用mysql儲存過程代替遞迴查詢 查詢此表某個id=4028ab535e370cd7015e37835f52014b(公司1)下的所有資料 正常情況下,我們採用遞迴演算法查詢,如下 1