Gaussdb 存储过程
脚本设计 存储过程的 类型, Exception处理,循环,判断,游标,动态sql
CREATE OR REPLACE FUNCTION proc_batch_tmp2ods(start_time timestamp without time zone, end_time timestamp without time zone, source character varying)RETURNS voidLANGUAGE plpgsqlNOT FENCED NOT SHIPPABLE
AS $$
declare
--执行开始时间
s_time DATE;
--执行结束时间
e_time DATE;
--执行开始时间
vs_time DATE;
--执行结束时间
ve_time DATE;
--执行状态
e_type INTEGER:=0;v_table_name VARCHAR2(200);
v_sql VARCHAR2(4000);
v_sql2 VARCHAR2(4000);---数据库表状态 1 可删除 2 可添加
status INTEGER;exp_data_range exception;--声明一个表信息的记录类型
type table_info is record(---执行表名table_name dc_conf_table_info.table_name%type,---字段组合con_columns dc_conf_table_info.con_columns%type,---主键组合con_key dc_conf_table_info.con_key%type,---删除条件del_condition dc_conf_table_info.del_condition%type
);
-- 声明记录类型的变量
v_table_info table_info;
--定义游标
cursor table_info_cursor is select table_name,con_columns,con_key,del_condition from dc_conf_table_info where source_system=source;beginfor v in table_info_cursor loopbeginv_table_name=v.table_name;---先查看数据库的状态select exe_status into status from dc_conf_table_info where table_name=v.table_name;if(status <> 1) thenraise exp_data_range; -- 异常抛出end if;select now() into s_time from dual;-- 先根据主键删除v_sql='delete from '||v.table_name||' a where exists (select 1 from '||v_table_name||'_tmp b where crt_date>='||chr(39)||start_time||chr(39)||' and crt_date<'||chr(39)||end_time||chr(39)||' and ' ||v.del_condition||')';execute immediate v_sql;select now() into e_time from dual;---删除成功 e_type=1e_type=1;--插入执行日志insert into ds_batch_gaussdb_log select s_time,v.table_name,'delete',e_type,null,start_time,end_time,e_time,v_sql,'ODS',source from dual;--日志插入成功后 修改表的状态 使其转为可插入的状态update dc_conf_table_info set exe_status='2' where table_name=v.table_name;-- 没有异常的话 下面执行插入begin---先查看数据库的状态select exe_status into status from dc_conf_table_info where table_name=v.table_name;if(status <> 2) thenraise exp_data_range; -- 异常抛出end if;-- 插入数据select now() into vs_time from dual;v_sql2='insert into '||v.table_name ||' select '|| v.con_columns ||' from ( select *, row_number() over(partition by '|| v.con_key ||' order by senddate,sequenceno desc ) rn from '||v_table_name||'_tmp where crt_date>='||chr(39)||start_time||chr(39)||' and crt_date<'||chr(39)||end_time||chr(39)||') a where a.rn=1';execute immediate v_sql2;select now() into ve_time from dual;e_type=2;insert into ds_batch_gaussdb_log select vs_time,v.table_name,'insert',e_type,null,start_time,end_time,ve_time,v_sql2,'ODS',source from dual;---日志插入成功后 修改表的状态 使其转为可删除的状态update dc_conf_table_info set exe_status='1' where table_name=v.table_name;EXCEPTIONwhen exp_data_range thene_type=-2;insert into ds_batch_gaussdb_log select s_time,v_table_name,'insert',e_type,sqlerrm,start_time,end_time,e_time,v_sql2,'ODS',source from dual;when others then--插入数据发生异常 e_type=-1e_type=-2;insert into ds_batch_gaussdb_log select s_time,v_table_name,'insert',e_type,sqlerrm,start_time,end_time,e_time,v_sql2,'ODS',source from dual;end;EXCEPTIONwhen exp_data_range thene_type=-1;insert into ds_batch_gaussdb_log select s_time,v_table_name,'delete',e_type,sqlerrm,start_time,end_time,e_time,v_sql,'ODS',source from dual;when others then--删除发生异常 e_type=-1e_type=-1;insert into ds_batch_gaussdb_log select s_time,v_table_name,'delete',e_type,sqlerrm,start_time,end_time,e_time,v_sql,'ODS',source from dual;end;end loop;end$$
/
Gaussdb 存储过程相关推荐
- GaussDB数据库存储过程介绍
文章目录 一.前言 二.GaussDB中的定义 三.存储过程的使用场景 四.存储过程的使用优缺点 五.存储过程的示例及示例解析 1.GaussDB存储过程语法格式 2.GaussDB存储过程语法示例 ...
- 华为将开源挑战 Oracle 的 AI 原生数据库 GaussDB
https://www.toutiao.com/a6718506778012680712/ 2019年5月15日,华为在北京举行了以"聚合数据,激发智能新力量"为主题的数据库及存储 ...
- 云小课|三大灵魂拷问GaussDB(DWS)数据落盘安全问题
阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说).深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云.更多精彩内容请单击此处. 摘要:GaussDB(D ...
- 华为云GaussDB深耕数字化下半场,持续打造数据库根技术
摘要:华为云数据库CTO庄乾锋携华为云数据库多位技术专家和优秀合作伙伴共同参与DTCC2021大会并发表了重要主题演讲. 10月18日,以"数造未来"为主题的第12届中国数据库技术 ...
- 探索GaussDB(DWS)的过程化SQL语言能力
摘要:在当前GaussDB(DWS)的能力中主要支持两种过程化SQL语言,即基于PostgreSQL的PL/pgSQL以及基于Oracle的PL/SQL.本篇文章我们通过匿名块,函数,存储过程向大家介 ...
- 华为云PB级数据库GaussDB(for Redis)揭秘第五期:高斯 Redis 在IM场景中的应用
摘要:揭秘高斯 Redis 在IM场景中的应用. 本文分享自华为云社区<华为云PB级数据库GaussDB(for Redis)揭秘第五期:高斯 Redis 在IM场景中的应用>,原文作者: ...
- 华为云原生数据仓库GaussDB(DWS)深度技术解读:融、快、大、稳、易
摘要:云原生数据仓库GaussDB(DWS)架构师应邀为大家解读数仓深度技术. "云原生"在2020年成为备受瞩目的热词,云原生在确保企业数字化转型中资源快速供给.按需使用的同时, ...
- 华为云推出全自研数据库,GaussDB(openGauss)能否撑起一片天?
摘要:GaussDB(openGauss) 基于华为云底座,能够快速全球化部署,同时支持用户的本地化部署诉求,跟云上生态工具紧密结合让用户在迁移.开发.运维上省时省心. GaussDB(openGau ...
- 【数据库】GaussDB客户端工具介绍
文章目录 前言 一.客户端工具介绍 二.zsql安装 三.gsql 四.Data Studio 前言 这次我们来看GaussDB的一些客户端工具,帮助我们更好的操作数据库 一.客户端工具介绍 客户端工 ...
最新文章
- 汽车开放系统架构(AUTOSAR)是什么
- 关于年终奖励的扣税算法BUG
- JZOJ 5906. 【NOIP2018模拟10.15】传送门 (portal)
- C语言写数据库(二)
- android 上下翻页素材,【Android 进阶】仿抖音系列之翻页上下滑切换视频(四)...
- Golang——多种运算符及优先级
- 3-8:类与对象下篇——友元函数、友元类和内部类
- 故宫首开夜场门票秒空官网崩溃:7本书让网站挺住
- PyOpenGL之3D界面详解(五)
- 第一个SpringBoot应用
- 开源 协作工具_6所高等学校教授开源,协作峰会的言论以及更多新闻
- (转)OpenLayers3基础教程——OL3基本概念
- php怎么实现显示gif图片,利用PHP怎么对gif图片进行判断
- 游戏策划:为什么我的儿子不沉迷游戏?
- 9个offer,12家公司,35场面试,从微软到谷歌,应届计算机毕业生的求职之路!...
- 世界GDP和新冠疫情直接关系
- 073_SFDC Limit
- Snipaste常用快捷键(详细总结)
- 关于sac的一些笔记
- (原創) 如何使用ModelSim-Altera對Nios II仿真? (SOC) (Nios II) (SOPC Builder) (ModelSim) (DE2)...