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