数据仓库服务 GAUSSDB(DWS)-GaussDB(DWS)存储过程开发规范:建议4.1 避免使用复杂的存储过程,避免存储过程嵌套
时间:2024-12-24 11:19:59
建议4.1 避免使用复杂的存储过程,避免存储过程嵌套
违反规范的影响:
- 复杂和嵌套的存储过程维护成本高,故障定位难度大,恢复耗时长。
方案建议:
- 不使用存储过程或只使用一层存储过程,不嵌套。
- 开发存储过程设计对应的日志表,将关键步骤前后的信息记录到日志表中,操作步骤如下。
保存并查看日志操作步骤
- 创建日志表。
1 2 3 4 5 6 7 8 9
CREATE TABLE func_exec_log ( id varchar2(32) default lower(sys_guid()), pro_name varchar2(60), exec_times int, log_date date, deal_date date, log_mesage text );
- 创建表和导入数据。
1 2
CREATE TABLE demo_table(data_id int, data_number int); INSERT INTO demo_table values(generate_series(1,1000),generate_series(1,1000));
- 创建业务存储过程
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
CREATE OR REPLACE FUNCTION demo_table_process(out exe_info text) LANGUAGE plpgsql AS $$ declare v_count int; pro_result text; fun_name text; exec_times int; begin fun_name := 'demo_table_process'; select nvl(max(exec_times), '0') + 1 into exec_times from func_exec_log where pro_name = fun_name; --业务表插入数据 insert into demo_table values (dbms_random.value(1, 1000)::int,generate_series(1, dbms_random.value(10000, 20000)::int)); get diagnostics v_count = ROW_COUNT; exe_info = sysdate || '# step1:insert count:' || v_count || ' rows;'; --删除业务表指定数据 delete from demo_table where data_id = dbms_random.value(1, 1000)::int; get diagnostics v_count = ROW_COUNT; exe_info = exe_info || sysdate || '# step2:delete count:' || v_count || ' rows;'; --更新业务表数据 update demo_table set data_number = dbms_random.value(1, 100)::int where data_id = dbms_random.value(1, 1000)::int; exe_info = exe_info || sysdate || '# step3:update count:' || sql%rowcount || ' rows'; --在整个程序结束前记录日志,也可以在每个步骤结束后分别记录日志,也可以创建记录日志的函数供调用,灵活使用即可 insert into func_exec_log(pro_name, exec_times, log_date, deal_date, log_mesage) values (fun_name,exec_times,sysdate,split_part(regexp_split_to_table(exe_info, ';'), '#', 1),split_part(regexp_split_to_table(exe_info, ';'), '#', 2)); --EXCEPTION用于保证当insert/update/delete等操作步骤异常退出时,也能够正常记录日志 EXCEPTION WHEN OTHERS THEN pro_result := exe_info || sysdate || '# exception error message is: ' || sqlerrm; insert into func_exec_log(pro_name, exec_times, log_date, deal_date, log_mesage) values(fun_name,exec_times,sysdate,split_part(regexp_split_to_table(pro_result, ';'), '#', 1),split_part(regexp_split_to_table(pro_result, ';'), '#', 2)); END; $$;
- 调用存储过程(正常执行)。
1
SELECT demo_table_process();
- 查看日志(确认业务运行情况)。
SELECT * FROM func_exec_log ORDER BY log_date desc,deal_date,log_mesage;
- 再次调用存储过程(构造执行异常)。
SELECT demo_table_process(); --先删除demo_table的data_number列构造异常,之后再调用
- 查看日志(确认业务运行情况)。
support.huaweicloud.com/devg-910-dws/dws_04_0106.html
看了此文的人还看了
CDN加速
GaussDB
文字转换成语音
免费的服务器
如何创建网站
域名网站购买
私有云桌面
云主机哪个好
域名怎么备案
手机云电脑
SSL证书申请
云点播服务器
免费OCR是什么
电脑云桌面
域名备案怎么弄
语音转文字
文字图片识别
云桌面是什么
网址安全检测
网站建设搭建
国外CDN加速
SSL免费证书申请
短信批量发送
图片OCR识别
云数据库MySQL
个人域名购买
录音转文字
扫描图片识别文字
OCR图片识别
行驶证识别
虚拟电话号码
电话呼叫中心软件
怎么制作一个网站
Email注册网站
华为VNC
图像文字识别
企业网站制作
个人网站搭建
华为云计算
免费租用云托管
云桌面云服务器
ocr文字识别免费版
HTTPS证书申请
图片文字识别转换
国外域名注册商
使用免费虚拟主机
云电脑主机多少钱
鲲鹏云手机
短信验证码平台
OCR图片文字识别
SSL证书是什么
申请企业邮箱步骤
免费的企业用邮箱
云免流搭建教程
域名价格
推荐文章
- GaussDB主键生成_GaussDB存储过程_高斯数据库主键生成_华为云
- DWS产品介绍_DWS产品优势_DWS功能_DWS使用场景_DWS是什么
- 数据仓库服务GaussDB(DWS)_SQL on Anywhere
- GaussDB设置默认值_GaussDB存储过程_高斯数据库设置默认值-华为云
- Gauss(DWS)数据加解密_数据加解密算法_数据加解密函数
- DWS资源管理_GaussDB(DWS)资源管理作用_DWS资源管控
- GaussDB如何建主键_数据库索引设计规范_高斯数据库如何建主键-华为云
- DWS安全_数据仓库服务安全_DWS数据安全管理_DWS安全保障_DWS安全策略
- 调用GaussDB(DWS) API接口_数据仓库服务调用API_如何调用API_在DWS中调用API
- GaussDB(DWS)服务_什么是IoT数仓_如何使用IoT数仓