1. 程式人生 > >儲存過程中如何利用遊標分批提交

儲存過程中如何利用遊標分批提交

1. 建一個type,同時建一個遊標 

type temp_type is record(
    temp_rowid varchar2(128),
    temp_count integer);
  type imw_type is table of temp_type;
  imw_types imw_type;


  cursor temp_cursor is
    select a.rowid, count(b.userid)
      from im_ecusermsginfo_bak b, im_ecuserstatus a
     where b.userid = a.userid
       and b.imstatus <> '2'
     group by a.rowid;

2.將遊標開啟,每1000條存進一次type中。再從type中獲取資料,執行其他操作。

  open temp_cursor;
  loop
    fetch temp_cursor bulk collect
      into imw_types limit 1000;
   exit when imw_types.count = 0;
   forall i in 1 .. imw_types.count
      update im_ecuserstatus a
         set a.expmsgcnt = imw_types(i).temp_count
       where a.rowid = imw_types(i).temp_rowid;
   commit;
 end loop;
close temp_cursor;

3.exception要關遊標

exception
  when others then
    if temp_cursor%isopen then
      close temp_cursor;
    end if;

相關推薦

sqlserver儲存過程利用遊標遍歷結果集簡單示例及查詢資料庫時間

本例項用的是sqlserver2005   在儲存過程中遍歷結果,和查詢資料庫中所有 儲存過程名稱 加以處理以文字形式輸出 原始碼: drop procedure findName create procedure findName--建立一個名為findName的儲存過

儲存過程如何利用遊標分批提交

1. 建一個type,同時建一個遊標  type temp_type is record(     temp_rowid varchar2(128),     temp_count integer);   type imw_type is table of temp_ty

sql server之在儲存過程利用OpenJson將Json字串轉化為表格

在Sql server2016的版本後,資料庫增加了對Json格式的支援,詳細資訊可以參考微軟官方文件連結 應用背景 線上訂餐系統中,購物車的內容儲存在瀏覽器快取中,所以資料庫關於訂單的設計是訂單表(訂單ID,送貨地址,使用者ID,,,,,),訂單明細表(訂

儲存過程遊標使用

儲存過程 1:遊標使用 第一步:遊標宣告: 注:標點符號使用半形 CURSOR C_EMP IS /*宣告顯式遊標*/ SELECT * FROM dc_check_todo; /*遊標聲明後跟SQL語句*/ C_ROW C_EMP%ROWTYPE; /*定義遊標變數,

mysql儲存過程使用遊標

使用者變數一般以@開頭,作用於全域性範圍 區域性變數需用 declare 定義格式為 declare 變數名 資料型別 [default value]; mysql 資料型別有 int ,float,date,varchar(length)等 宣告的順序必須是 先宣告變

oracle 在儲存過程寫兩個遊標巢狀迴圈

CREATE OR REPLACE PROCEDURE "PROC_CHZBANKMOTNREC" AS vid NUMBER(19);--id vzdrpriaccount VARCHAR2(1

儲存過程輸出引數為遊標的時候怎麼處理

http://msdn.microsoft.com/zh-cn/library/ms175498(v=sql.90).aspx Transact-SQL 儲存過程只能將 cursor 資料型別用於 OUTPUT 引數。如果為某個引數指定了 cursor 資料型別,也必

mysql 儲存過程使用多遊標

mysql的儲存過程可以很方便使用遊標來實現一些功能,儲存過程的寫法大致如下: 先建立一張表,插入一些測試資料: DROP TABLE IF EXISTS netingcn_proc_test; CREATE TABLE `netingcn_proc_test`

Oracle儲存過程多層巢狀遊標的用法

Oracle sql指令碼程式碼   CREATE OR REPLACE   PROCEDURE P_DELETE_QK (pId in NUMBER, deep in NUMBER) AS   -- pId = 分類ID  deep = 深度,層級   on

Mysql儲存過程使用多遊標

mysql的儲存過程可以很方便使用遊標來實現一些功能,儲存過程的寫法大致如下: 先建立一張表,插入一些測試資料: DROP TABLE IF EXISTS netingcn_proc_test; CREATE TABLE `netingcn_proc_

mysql 存儲過程使用遊標使用臨時表可以替代數組效果

效果 tmp declare ges 必須 eight bold lar ora mysql不支持數組。但有時候需要組合幾張表的數據,在存儲過程中,經過比較復雜的運算獲取結果直接輸出給調用方,比如符合條件的幾張表的某些字段的組合計算,mysql臨時表可以解決這個問題.臨時表

SQL儲存過程分頁

</pre><pre name="code" class="sql">ALTER proc [dbo].[GetGoodsLsit] ----分頁條件 @StartIndex varchar(20), @PageSize varchar(20), ----排序條件

如何在儲存過程執行set命令  我來答

1.EXEC使用EXEC命令兩種用種執行儲存程另種執行態批處理所講都第二種用  面先使用EXEC演示例,程式碼1DECLARE @TableName VARCHAR(50),@Sql NVARCHAR (MAX),@OrderID INT;SET @TableName = 'Orders';SET @Orde

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

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

【轉載】postgresql儲存過程返回型別

前言 假如需要在pg上面寫儲存過程,那麼返回型別必定是一個疑問點。 一般而言,對於一個查詢語句,為了可以統一動態返回各種資料,我們是不會蠢到每一個儲存過程都額外編寫一個返回型別 譬如: (id,name,password) 之類的,所以在寫的時候肯定會考慮 setof record這個動

儲存過程一維陣列接受按分割符拆分的資料

declare -- Local variables here i integer; Lar_Input t_Arr.Arrname; --一維陣列接收 按分隔符拆分 begin -- Test statements here Pkg_n_Cst_String.Pr

sql在所有儲存過程查詢包含某字串的執行語句

直接在查詢分析器中執行以下程式碼就行: 方法一) select name from sysobjects o, syscomments s where o.id = s.id and text like '%test%' and o.xtype = 'P'   方法二)

Oracle 儲存過程傳送郵件,並支援使用者驗證 中文標題和內容

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

oracle12C資料庫JSON的應用 --PL/SQL儲存過程JSON解析應用篇

最近有些專案在資料庫oracle中使用到json格式的資料互動,對於oracle12以上的版本都支援JSON格式資料的使用,剛剛接觸的猿們可以到上一篇oracle資料庫使用json的簡單入門,最好參考官方的API文件關於oracle官方API文件對JSON的支援; 下面就比較詳細的說一下,關

mysql利用遊標遍歷表的資料時未正常獲取資料

問題描述: mysql中利用遊標遍歷表中的資料時未正常獲取資料 問題重現: 建立儲存過程(mysql) 遊標遍歷的表中對應的資料如下 執行儲存過程時卻並未正常獲取資料 問題分析: 儲存過程中變數的定義不要和我們表中的欄位名相同(不區分大小寫),比如上面問題中的表字段為START