1. 程式人生 > >DB2儲存過程使用遊標

DB2儲存過程使用遊標

目前在接觸DB2,在此將DB2中使用遊標和if else ,while等收集起來進行彙總。

SET SCHEMA = "AUTEK";

CREATE PROCEDURE "AUTEK"."SP_ADDRESS" ( OUT "V_MESSAGE" VARCHAR(50) )
  SPECIFIC "SQL111214105311700"
  LANGUAGE SQL
  NOT DETERMINISTIC
  NO EXTERNAL ACTION
  MODIFIES SQL DATA
  CALLED ON NULL INPUT
  INHERIT SPECIAL REGISTERS
BEGIN
--宣告一些變數

declare v_accno varchar(32);
declare v_cusid varchar(32);
declare v_count int;
declare v_count1 int;
declare v_addrseqno varchar(10);
declare v_modidate varchar(15);
declare v_count2 int;
declare v_count3 int;
select  count(distinct cusid) into v_count from tempdaybak2;
 begin
 		declare v_cur cursor for select distinct cusid from tempdaybak2 for read only;
	 open v_cur;
	 while(v_count>0) DO
	  FETCH v_cur into v_cusid;
		--通過cusno客戶號 去從dc_ci_addr_all表中查詢結果集
		select count(*) into v_count1 from dc_ci_addr_all where cusno=v_cusid;
		if (v_count1=1) 
		then 
 	     update tempdaybak2 set address=(select addr1 from dc_ci_addr_all where dc_ci_addr_all.cusno=v_cusid) 
      , mobphone=(select mobphone from dc_ci_addr_all where dc_ci_addr_all.cusno=v_cusid)
      , post=(select postcode from dc_ci_addr_all where dc_ci_addr_all.cusno=v_cusid) where cusid=v_cusid; 
		else 
			 select min(addrseqno) into v_addrseqno from dc_ci_addr_all where cusno=v_cusid;
			 select count(*) into v_count2 from dc_ci_addr_all where cusno=v_cusid and addrseqno=v_addrseqno;
			 	if(v_count2=1) 
				then
				 update tempdaybak2 set address=(select addr1 from dc_ci_addr_all where dc_ci_addr_all.cusno=v_cusid and  dc_ci_addr_all.addrseqno=v_addrseqno) 
      , mobphone=(select mobphone from dc_ci_addr_all where dc_ci_addr_all.cusno=v_cusid and  dc_ci_addr_all.addrseqno=v_addrseqno)
      , post=(select postcode from dc_ci_addr_all where dc_ci_addr_all.cusno=v_cusid and  dc_ci_addr_all.addrseqno=v_addrseqno) where cusid=v_cusid; 
				else
				   select max(modidate)  into v_modidate from  dc_ci_addr_all where cusno=v_cusid and  addrseqno=v_addrseqno;
					 select count(*) into v_count3 from dc_ci_addr_all where cusno=v_cusid and  addrseqno=v_addrseqno and modidate=v_modidate;
						if(v_count3=1)
						then
						update tempdaybak2 set address=(select addr1 from dc_ci_addr_all where dc_ci_addr_all.cusno=v_cusid and  dc_ci_addr_all.addrseqno=v_addrseqno and modidate=v_modidate) 
      		, mobphone=(select mobphone from dc_ci_addr_all where dc_ci_addr_all.cusno=v_cusid and  dc_ci_addr_all.addrseqno=v_addrseqno and modidate=v_modidate)
     		 , post=(select postcode from dc_ci_addr_all where dc_ci_addr_all.cusno=v_cusid and  dc_ci_addr_all.addrseqno=v_addrseqno and modidate=v_modidate) where cusid=v_cusid; 
				 else
				 --取最後一個
					update tempdaybak2 set address=(select addr1  from 	dc_ci_addr_all where dc_ci_addr_all.cusno=v_cusid and  dc_ci_addr_all.addrseqno=v_addrseqno and modidate=v_modidate order by autoid desc fetch first 1 rows only)
					,mobphone=(select mobphone from dc_ci_addr_all where dc_ci_addr_all.cusno=v_cusid and  dc_ci_addr_all.addrseqno=v_addrseqno and modidate=v_modidate)
     		  ,post=(select postcode from dc_ci_addr_all where dc_ci_addr_all.cusno=v_cusid and  dc_ci_addr_all.addrseqno=v_addrseqno and modidate=v_modidate) where cusid=v_cusid; 
				 end if;
				end if;
			end if;
			set v_count=v_count-1;
	 end while;
 end;
END;

GRANT EXECUTE ON PROCEDURE "AUTEK"."SP_ADDRESS"( VARCHAR(50) ) TO USER "AUTEK" WITH GRANT OPTION;

相關推薦

DB2儲存過程使用遊標

目前在接觸DB2,在此將DB2中使用遊標和if else ,while等收集起來進行彙總。 SET SCHEMA = "AUTEK"; CREATE PROCEDURE "AUTEK"."SP_ADDRESS" ( OUT "V_MESSAGE" VARCHAR(50)

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

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

sqlserver儲存過程/遊標及例項

--系統儲存過程exec sp_databases --檢視系統資料庫exec sp_tables --檢視系統表exec sp_rename 'aaa','bbb' --修改表明aaa為bbbexec sp_rename 'dbo.aaa','col1','col2' --修改表aaa的列col1為col2

Oracle PL/SQL 執行包裡的儲存過程 遊標輸出引數

oracle PL/SQL 如何執行包裡的儲存過程,儲存過程帶遊標輸出引數 [問題點數:40分] 收藏帖子 回覆 mjlwq 結帖率 87.5% create or replace package pkg_

DB2儲存過程例項(如果用慣了ORACLE會發現很不習慣)

CREATE OR REPLACE PROCEDURE LOY.TEST1 ( ) ---此處忽略就行了,這個是db2自動為我們生成的 SPECIFIC SQL180919100638350 LANGUAGE SQL NOT DETERMINIS

Mysql儲存過程遊標使用

--在windows系統中寫儲存過程時,如果需要使用declare宣告變數,需要新增這個關鍵字,否則會報錯。 delimiter // drop procedure if exists StatisticStore; CREATE PROCEDURE StatisticSto

Oracle 儲存過程 \ 遊標簡單定義和使用

-- Created on 2018/10/12 by 32580 declare -- 定義變數 變數賦值方式為: 變數名 := 值 i INTEGER ; sqls varchar2(500); user_id varchar2(36); l

DB2 儲存過程複製表結構、重命名錶、刪除表實現,及Mybatis如何呼叫

----Mybaits呼叫db2儲存過程 <update id="changeTableName" parameterType="java.util.Map" statementType="CALLABLE"> call

mysql儲存過程遊標遍歷之while篇

最近業務需要翻閱了很多關於遊標遍歷使用的帖子 總結一下 直接上程式碼吧 IN `bindid_in` char(36) --輸入引數 BEGIN /** 淨值=固定資產原值-累計折舊 累計折舊=月折舊額*已計提月份 月折舊額=(固定資產原價-(固定資產原價*3%的殘值率))/預計使

ORACLE 儲存過程遊標返回多行

1、過程主體 --儲存過程迴圈 ,SELECT INTO 是隱式遊標只能返回一行 CREATE OR REPLACE PROCEDURE P_LOOP_PR ( P_TIME NUMBER) IS A_OVER NUMBER; A_NAME VARCHAR2(20); BE

DB2儲存過程與oracle的區別for as loop在db2中的使用

在oracle遷移DB2時,資料庫可能會成為一個令人頭大的問題,oracle就不說了,先來一個儲存過程create  procedure AAA(in p_name varchar(50))begindeclare v_name varchar(50);declare v_i

Oracle與DB2儲存過程不同之處

文章主要描述的是Oracle資料庫與DB2儲存過程的不同之處,假如你對Oracle資料庫與DB2儲存過程的不同之處差異心存好奇的話,你就可以對以下的文章點選觀看了,以下就是文章的詳細內容介紹,望大家借鑑。 Oracle與DB2儲存過程的差異 (1)儲存過程本質還是由SQL語

oracle儲存過程----遊標(cursor)的學習

oracle儲存過程—-遊標(cursor)的學習   今天又學了一個新的概念Cursor ,即遊標。   接上一篇,oracle儲存過程—-儲存過程執行簡單的增刪改查sql ,上一篇中,寫到儲存過程的查詢sql ,當時在寫到查詢的時候,忽然不知道怎麼對查詢

db2儲存過程,插入10萬資料

CREATE PROCEDURE insert_cf ()     DYNAMIC RESULT SETS 1 P1: BEGIN     -- Declare cursor     declare a int;   set a=1; loop1:   LOOP   if

Oracle儲存過程,遊標使用

Oracle儲存過程: 語法: CREATE [OR REPLACE] PROCEDURE procedure_name (arg1 [mode1] datatype1,arg2 [mode2] datatype2,...) IS [AS] PL/SQL BLOCK; mo

DB2儲存過程(Oracle對比)

DROP  PROCEDURE [email protected] CREATE PROCEDURE CDI.PRC_CIM_IDENTITY_FIND(   IN I_ID_NUM VARCHAR(21), --oracle I_ID_NUM in VARCHA

DB2 儲存過程,迴圈插入資料(使用者自測造大量資料)

表結構如下CREATE TABLE FUND_DAILY_INCOME ( ID BIGINT NOT NULL GENERATED ALWAYS AS IDENTITY

oracle 儲存過程 遊標巢狀

這是一段將裝置的GPS資料的工作小時數進行統計的儲存過程,首先通過遊標取出所有裝置資訊,然後對每一臺裝置進行工作小時數統計,其中用到了遊標巢狀 CREATE OR REPLACE PROCEDURE CMTOOLS.proc_statistics_workhour IS

[DB2]儲存過程經常使用方法

CREATE PROCEDURE SCHEMA.PD_PROCEDURE ( IN INPARA VARCHAR(2048), OUT OUTPARA VARCHAR(1024) ) BEGIN DECLARE V_SQL

DB2 儲存過程幾個例子

CREATE PROCEDURE proc_with_variables (IN p_empno VARCHAR(6)) LANGUAGE SQL SPECIFIC proc_with_vars -- applies to LUW