1. 程式人生 > >mysql 帶引數的遊標

mysql 帶引數的遊標

這裡是查詢  把多個uuid以逗號(,)的格式去查詢資料,把資料放入一張臨時表
裡面值得學習的是動態遊標,mysql動態sql語法

DELIMITER $$ DROP PROCEDURE IF EXISTS `get_checkList`$$ CREATE  PROCEDURE  `get_checkList` (v_schId VARCHAR(100),v_mark VARCHAR(100))  BEGIN       DECLARE done INT DEFAULT 0;        DECLARE temp_id VARCHAR(32);      DECLARE temp_personId VARCHAR(32);   #'接收人ID'     DECLARE temp_gradeId VARCHAR(5000);  #'(多個)年級id'     DECLARE temp_clazzId VARCHAR(5000);  #'(多個)班級id'     DECLARE temp_pushId VARCHAR(32);     #'考勤推送ID'     DECLARE temp_mark VARCHAR(10);       
    #定義遊標
    DECLARE cur CURSOR FOR( SELECT * FROM check_person_view);       #設定跳出遊標條件
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;       #這裡採用檢視,表示遊標的結果 為動態資料
    DROP VIEW IF EXISTS check_person_view;       
    #這裡是mysql的動態sql語法運用
    SET @sqlstr = "CREATE VIEW check_person_view as ";       SET @sqlstr = CONCAT(@sqlstr , "SELECT a.* FROM  kq_pushperson a JOIN kq_checkpush b ON a.pushId =b.id  AND b.schId ='", v_schId,"' ");      IF v_mark IS NOT NULL THEN     SET @sqlstr = CONCAT(@sqlstr , "and a.mark='", v_mark,"' ");     END IF;     PREPARE stmt FROM @sqlstr;       EXECUTE stmt;       DEALLOCATE PREPARE stmt;      DELETE FROM kq_pushperson_temp;    
    #開啟遊標
    OPEN cur;       FETCH cur INTO temp_id,temp_personId,temp_gradeId,temp_clazzId,temp_pushId,temp_mark;       WHILE done <> 1 DO       #select  temp_id,temp_personId,temp_gradeId,temp_clazzId,temp_pushId,temp_mark;      SET @tempSql="insert into kq_pushperson_temp(id,personId,gradeId,clazzId,pushId,empName,gradeName,clazzName,mark) select ";     SET @tempSql= CONCAT(@tempSql,'"',temp_id,'","',temp_personId,'" ');     IF temp_gradeId IS NULL THEN SET @tempSql= CONCAT(@tempSql,",null,null"); SET @tempSql= CONCAT(@tempSql,',"',temp_pushId,'",(SELECT username FROM sys_user WHERE id="',temp_personId,'")'); SET @tempSql= CONCAT(@tempSql,',null,null,"',temp_mark,'" ');     ELSE  IF temp_clazzId IS NULL THEN SET @tempSql= CONCAT(@tempSql,',REPLACE("',temp_gradeId,'","\'","") gradeId,null clazzId'); SET @tempSql= CONCAT(@tempSql,',"',temp_pushId,'",(SELECT username FROM sys_user WHERE id="',temp_personId,'")'); SET @tempSql= CONCAT(@tempSql,',(SELECT GROUP_CONCAT(NAME) FROM xj_grade WHERE id in (',temp_gradeId,')) gradeName'); SET @tempSql= CONCAT(@tempSql,',null clazzName'); SET @tempSql= CONCAT(@tempSql,',"',temp_mark,'" '); ELSE  SET @tempSql= CONCAT(@tempSql,',REPLACE("',temp_gradeId,'","\'","") gradeId,REPLACE("',temp_clazzId,'","\'","") clazzId'); SET @tempSql= CONCAT(@tempSql,',"',temp_pushId,'",(SELECT username FROM sys_user WHERE id="',temp_personId,'")'); SET @tempSql= CONCAT(@tempSql,',(SELECT GROUP_CONCAT(NAME) FROM xj_grade WHERE id in (',temp_gradeId,')) gradeName'); SET @tempSql= CONCAT(@tempSql,',(SELECT GROUP_CONCAT(NAME) FROM xj_clazz WHERE id in (',temp_clazzId,')) clazzName'); SET @tempSql= CONCAT(@tempSql,',"',temp_mark,'" '); END IF;     END IF;     #select @tempSql;     PREPARE stmt FROM @tempSql;       EXECUTE stmt;       DEALLOCATE PREPARE stmt;      FETCH cur INTO temp_id,temp_personId,temp_gradeId,temp_clazzId,temp_pushId,temp_mark;      END WHILE;       CLOSE cur;      SELECT * FROM kq_pushperson_temp; END $$ DELIMITER ;

相關推薦

mysql 引數遊標

這裡是查詢  把多個uuid以逗號(,)的格式去查詢資料,把資料放入一張臨時表 裡面值得學習的是動態遊標,mysql動態sql語法 DELIMITER $$ DROP PROCEDURE IF EXISTS `get_checkList`$$ CREATE  PROCE

Oracle 引數遊標

-- 引數遊標 declare cursor mycur(dno number) is select empno,ename,job,deptno from emp where deptno=dno; begin for record in mycur(10) loop dbm

MySQL引數的儲存過程小例子

儲存過程P_GET_CLASS_NAME是根據輸入的班級號判斷班級名稱 儲存過程P_INSERT_STUDENT是接收輸入的學生資訊,最終將資訊插入學生表。 DROP PROCEDURE IF EXISTS `P_GET_CLASS_NAME`; CREATE PROCED

pl/sql--引數遊標的使用

一般遊標中,SELECT語句都沒有WHERE子句,或者用WHERE子句指定了一個固定的條件,這樣每次都查詢同樣的資料。在更多的情況下,可能要根據實際情況查詢不同的資料。為了通過遊標對資料進行更加靈活的處理,可以為遊標定義引數,這些引數可以用在WHERE子句中。在開啟遊標時,

如何列印完整的MYSQL引數SQL日誌資訊

在mysql的jdbc中開啟sql分析,如下: jdbc.url=jdbc:mysql://127.0.0.1/test?useUnicode=true&characterEncoding=UTF-8&useLegacyDatetimeCode=false&serverTimezon

VS2013使用MySQL資料庫,資料集中如何填充引數的sql語句

本人在網上查詢一番後,發現均無法實現效果,之前的專案使用Oracle,sql傳參類似“......where id = :id”,然後突然想到直接tableAdapter裡面新建一個update查詢,不就知道使用MySQL資料庫時sql傳參了嘛。以上思路,下給例子:

PHP_PDO 呼叫mysql 返回引數的儲存過程

DROP PROCEDURE IF EXISTS pro_test; create procedure pro_test(in val VARCHAR(50) ,out rtn int) begin

Oracle入門(十四.13)之引數遊標

一、帶引數的遊標    引數是一個變數,其名稱用於遊標宣告中。 當遊標開啟時,引數值被傳遞給Oracle伺服器,Oracle伺服器使用它來決定要將哪些行檢索到游標的活動集中。    這意味著您可以在塊中多次開啟和關閉顯式游標,或者在同一個塊的不同執行中開啟和關閉顯式游標,每次

oracle引數遊標

Oracle中的遊標可以帶引數麼?具體怎麼實現呢? 可以啊,引數在遊標定義時使用,開啟時傳入引數,例如: create or replace procedure a as cursor b(c_id int)is select * from d where id=c_

MySQL有關引數儲存過程

前言小案例:       輸入輸出引數:記錄MYSQL儲存過程中的關鍵語法:DELIMITER // 宣告語句結束符,用於區分; CEATE PROCEDURE demo_in_parameter(IN p_in int) 宣告儲存過程 BEGIN …. END 儲存過程開始

pl/sql引數遊標和可更新的遊標案列

--pl/sql帶引數的遊標案列 declare cursor c(v_deptno dept.deptno%type,v_job emp.job%type) is select ename,sal

plsql遊標詳解——遊標引數引數遊標不是一回事

剛開啟遊標的時候,是位於一個空行,要用fetch into 才能到第一行。 只是要注意用更新遊標的時候,不能在遊標期間commit. 否則會報 ORA-01002: fetch out of sequence       就是COMMIT;導致錯誤        在開啟

mysql條件取count記錄數

rtt ack 條件 統計 clas ref subject ffffff nbsp 參考方法三: 統計sub_type=‘REFUND_FEE’ 的記錄數: 方法一.select count(sub_type) from t where t.sub_type=‘REFUN

mysql和Oracle 遊標的使用

mysql和oracle 遊標的使用使用遊標根據一個表中的數據,循環創建不同的表mysql中的DELIMITER $$DROP PROCEDURE IF EXISTS zy.jk_jkzl_political_location_pro $$CREATE PROCEDURE zy.jk_jkzl_politi

MySQL-5.7 遊標及DECLARE

簡單的 creat lstat 表達 false lose 特定 key 需要 1.cursor遊標 用來聲明一個數據集 遊標的聲明必須在變量和條件聲明之後,在handler聲明之前 遊標特性: 不靈敏:服務器可以或不復制其結果 只讀:不可更新 不可滾動的:只能在一個方向

mysql sp 練習遊標和預編譯

prepare book from oop hand locate exist ont alloc create procedure Jack_count_cur_dual() BEGIN DECLARE tb_name VARCHAR(50); DECLARE done

mysql 外註入

href 參數 ase 路徑 tps 限制 profile () clas 帶外通道 有時候註入發現並沒有回顯,也不能利用時間盲註,那麽就可以利用帶外通道,也就是利用其他協議或者渠道,如http請求、DNS解析、SMB服務等將數據帶出。 payload

一個簡單RPC框架是如何煉成的(III)——實現引數的RPC呼叫

上一篇,我們制定了一個很簡單的RPC訊息 的格式,但是還遺留了兩個問題 我們並沒有實現相應的encode和decode方法,沒有基於可以跨裝置的字串傳輸,而是直接的記憶體變數傳遞。 現在的RPC request不支援帶引數的請求命令。如add(a, b), 如何在RPC訊息中描述

引數的scrapy專案爬蟲

本章我們將會根據特定的 tag 來爬取 " http://quotes.toscrape.com/ ",的內容。 首先,我們先觀察這個網站的 url 結構,以 humor 這個 tag 為例,它的 url 是這樣的:" http://quotes.toscrape.com/tag/humor

微信小遊戲 引數二維碼生成

參考: 微信小程式-獲取小程式碼 微信小遊戲開發文件-小遊戲獲取二維碼開放能力開發     一、 請求微信介面,獲取token https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&