脚本设计 存储过程的 类型, 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 存储过程相关推荐

  1. GaussDB数据库存储过程介绍

    文章目录 一.前言 二.GaussDB中的定义 三.存储过程的使用场景 四.存储过程的使用优缺点 五.存储过程的示例及示例解析 1.GaussDB存储过程语法格式 2.GaussDB存储过程语法示例 ...

  2. 华为将开源挑战 Oracle 的 AI 原生数据库 GaussDB

    https://www.toutiao.com/a6718506778012680712/ 2019年5月15日,华为在北京举行了以"聚合数据,激发智能新力量"为主题的数据库及存储 ...

  3. 云小课|三大灵魂拷问GaussDB(DWS)数据落盘安全问题

    阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说).深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云.更多精彩内容请单击此处. 摘要:GaussDB(D ...

  4. 华为云GaussDB深耕数字化下半场,持续打造数据库根技术

    摘要:华为云数据库CTO庄乾锋携华为云数据库多位技术专家和优秀合作伙伴共同参与DTCC2021大会并发表了重要主题演讲. 10月18日,以"数造未来"为主题的第12届中国数据库技术 ...

  5. 探索GaussDB(DWS)的过程化SQL语言能力

    摘要:在当前GaussDB(DWS)的能力中主要支持两种过程化SQL语言,即基于PostgreSQL的PL/pgSQL以及基于Oracle的PL/SQL.本篇文章我们通过匿名块,函数,存储过程向大家介 ...

  6. 华为云PB级数据库GaussDB(for Redis)揭秘第五期:高斯 Redis 在IM场景中的应用

    摘要:揭秘高斯 Redis 在IM场景中的应用. 本文分享自华为云社区<华为云PB级数据库GaussDB(for Redis)揭秘第五期:高斯 Redis 在IM场景中的应用>,原文作者: ...

  7. 华为云原生数据仓库GaussDB(DWS)深度技术解读:融、快、大、稳、易

    摘要:云原生数据仓库GaussDB(DWS)架构师应邀为大家解读数仓深度技术. "云原生"在2020年成为备受瞩目的热词,云原生在确保企业数字化转型中资源快速供给.按需使用的同时, ...

  8. 华为云推出全自研数据库,GaussDB(openGauss)能否撑起一片天?

    摘要:GaussDB(openGauss) 基于华为云底座,能够快速全球化部署,同时支持用户的本地化部署诉求,跟云上生态工具紧密结合让用户在迁移.开发.运维上省时省心. GaussDB(openGau ...

  9. 【数据库】GaussDB客户端工具介绍

    文章目录 前言 一.客户端工具介绍 二.zsql安装 三.gsql 四.Data Studio 前言 这次我们来看GaussDB的一些客户端工具,帮助我们更好的操作数据库 一.客户端工具介绍 客户端工 ...

最新文章

  1. 汽车开放系统架构(AUTOSAR)是什么
  2. 关于年终奖励的扣税算法BUG
  3. JZOJ 5906. 【NOIP2018模拟10.15】传送门 (portal)
  4. C语言写数据库(二)
  5. android 上下翻页素材,【Android 进阶】仿抖音系列之翻页上下滑切换视频(四)...
  6. Golang——多种运算符及优先级
  7. 3-8:类与对象下篇——友元函数、友元类和内部类
  8. 故宫首开夜场门票秒空官网崩溃:7本书让网站挺住
  9. PyOpenGL之3D界面详解(五)
  10. 第一个SpringBoot应用
  11. 开源 协作工具_6所高等学校教授开源,协作峰会的言论以及更多新闻
  12. (转)OpenLayers3基础教程——OL3基本概念
  13. php怎么实现显示gif图片,利用PHP怎么对gif图片进行判断
  14. 游戏策划:为什么我的儿子不沉迷游戏?
  15. 9个offer,12家公司,35场面试,从微软到谷歌,应届计算机毕业生的求职之路!...
  16. 世界GDP和新冠疫情直接关系
  17. 073_SFDC Limit
  18. Snipaste常用快捷键(详细总结)
  19. 关于sac的一些笔记
  20. (原創) 如何使用ModelSim-Altera對Nios II仿真? (SOC) (Nios II) (SOPC Builder) (ModelSim) (DE2)...

热门文章

  1. MySQL——超详细数据库触发器教程
  2. SAP财务记账中的贸易伙伴Trading Partner简析
  3. 深度优先搜索(DFS) + DFS的应用:字符串的排列问题
  4. pkuseg对文件分词时报错
  5. 正在使用赶牛! 赶牛,中国股民的微博客
  6. 我退休金只有2000块钱能去海南三亚养老吗?
  7. laydate时间控件在谷歌浏览器中兼容性问题
  8. 地鼠宝宝的轶事奇闻之线程模型
  9. HDU 4417 Super Mario(划分树)
  10. 微信小程序 富文本组件使用