云数据库 GAUSSDB-事务语句:示例
时间:2024-11-13 14:46:42
示例
支持在PL/SQL的存储过程内使用COMMIT/ROLLBACK,后续示例依赖此用例。
gaussdb=# DROP TABLE IF EXISTS EXAMPLE1; gaussdb=# CREATE TABLE EXAMPLE1(COL1 INT); gaussdb=# CREATE OR REPLACE PROCEDURE TRANSACTION_EXAMPLE() AS BEGIN FOR i IN 0..20 LOOP INSERT INTO EXAMPLE1(COL1) VALUES (i); IF i % 2 = 0 THEN COMMIT; ELSE ROLLBACK; END IF; END LOOP; END; / gaussdb=# call TRANSACTION_EXAMPLE(); transaction_example --------------------- (1 row)
- 支持含有EXCEPTION的存储过程使用COMMIT/ROLLBACK。
- 支持在存储过程的EXCEPTION语句内使用COMMIT/ROLLBACK。
- 支持DDL在COMMIT/ROLLBACK后的提交/回滚。
gaussdb=# DROP TABLE IF EXISTS EXAMPLE1; gaussdb=# CREATE TABLE EXAMPLE1(COL1 INT); gaussdb=# CREATE OR REPLACE PROCEDURE TEST_COMMIT_INSERT_EXCEPTION_ROLLBACK() AS BEGIN DROP TABLE IF EXISTS TEST_COMMIT; CREATE TABLE TEST_COMMIT(A INT, B INT); INSERT INTO TEST_COMMIT SELECT 1, 1; COMMIT; CREATE TABLE TEST_ROLLBACK(A INT, B INT); RAISE EXCEPTION 'RAISE EXCEPTION AFTER COMMIT'; EXCEPTION WHEN OTHERS THEN INSERT INTO TEST_COMMIT SELECT 2, 2; ROLLBACK; END; / gaussdb=# call TEST_COMMIT_INSERT_EXCEPTION_ROLLBACK(); NOTICE: table "test_commit" does not exist, skipping CONTEXT: SQL statement "DROP TABLE IF EXISTS TEST_COMMIT" PL/pgSQL function test_commit_insert_exception_rollback() line 3 at SQL statement NOTICE: The 'DISTRIBUTE BY' clause is not specified. Using 'a' as the distribution column by default. HINT: Please use 'DISTRIBUTE BY' clause to specify suitable data distribution column. CONTEXT: SQL statement "CREATE TABLE TEST_COMMIT(A INT, B INT)" PL/pgSQL function test_commit_insert_exception_rollback() line 4 at SQL statement NOTICE: The 'DISTRIBUTE BY' clause is not specified. Using 'a' as the distribution column by default. HINT: Please use 'DISTRIBUTE BY' clause to specify suitable data distribution column. CONTEXT: SQL statement "CREATE TABLE TEST_ROLLBACK(A INT, B INT)" PL/pgSQL function test_commit_insert_exception_rollback() line 7 at SQL statement test_commit_insert_exception_rollback --------------------------------------- (1 row)
支持在事务块里调用含有COMMIT/ROLLBACK的存储过程,即通过BEGIN/START/END等开启控制的外部事务。
gaussdb=# BEGIN; -- TEST_COMMIT_INSERT_EXCEPTION_ROLLBACK定义见示例2 CALL TEST_COMMIT_INSERT_EXCEPTION_ROLLBACK(); NOTICE: The 'DISTRIBUTE BY' clause is not specified. Using 'a' as the distribution column by default. HINT: Please use 'DISTRIBUTE BY' clause to specify suitable data distribution column. CONTEXT: SQL statement "CREATE TABLE TEST_COMMIT(A INT, B INT)" PL/pgSQL function test_commit_insert_exception_rollback() line 4 at SQL statement NOTICE: The 'DISTRIBUTE BY' clause is not specified. Using 'a' as the distribution column by default. HINT: Please use 'DISTRIBUTE BY' clause to specify suitable data distribution column. CONTEXT: SQL statement "CREATE TABLE TEST_ROLLBACK(A INT, B INT)" PL/pgSQL function test_commit_insert_exception_rollback() line 7 at SQL statement test_commit_insert_exception_rollback --------------------------------------- (1 row) gaussdb=# END; COMMIT
支持多数PL/SQL的上下文和语句内调用COMMIT/ROLLBACK,包括常用的IF/FOR/CURSOR LOOP/WHILE。
gaussdb=# CREATE OR REPLACE PROCEDURE TEST_COMMIT2() IS BEGIN DROP TABLE IF EXISTS TEST_COMMIT; CREATE TABLE TEST_COMMIT(A INT); FOR I IN REVERSE 3..0 LOOP INSERT INTO TEST_COMMIT SELECT I; COMMIT; END LOOP; FOR I IN REVERSE 2..4 LOOP UPDATE TEST_COMMIT SET A=I; COMMIT; END LOOP; EXCEPTION WHEN OTHERS THEN INSERT INTO TEST_COMMIT SELECT 4; COMMIT; END; / gaussdb=# call TEST_COMMIT2(); NOTICE: The 'DISTRIBUTE BY' clause is not specified. Using 'a' as the distribution column by default. HINT: Please use 'DISTRIBUTE BY' clause to specify suitable data distribution column. CONTEXT: SQL statement "CREATE TABLE TEST_COMMIT(A INT)" PL/pgSQL function test_commit2() line 4 at SQL statement test_commit2 -------------- (1 row)
支持存储过程内GUC参数的回滚提交。
gaussdb=# SHOW explain_perf_mode; explain_perf_mode ------------------- normal (1 row) gaussdb=# SHOW enable_force_vector_engine; enable_force_vector_engine ---------------------------- off (1 row) gaussdb=# CREATE OR REPLACE PROCEDURE GUC_ROLLBACK() AS BEGIN SET enable_force_vector_engine = on; COMMIT; SET explain_perf_mode TO pretty; ROLLBACK; END; / gaussdb=# call GUC_ROLLBACK(); guc_rollback -------------- (1 row) gaussdb=# SHOW explain_perf_mode; explain_perf_mode ------------------- normal (1 row) gaussdb=# SHOW enable_force_vector_engine; enable_force_vector_engine ---------------------------- on (1 row) gaussdb=# SET enable_force_vector_engine = off;
support.huaweicloud.com/distributed-devg-v8-gaussdb/gaussdb-12-0791.html
看了此文的人还看了
CDN加速
GaussDB
文字转换成语音
免费的服务器
如何创建网站
域名网站购买
私有云桌面
云主机哪个好
域名怎么备案
手机云电脑
SSL证书申请
云点播服务器
免费OCR是什么
电脑云桌面
域名备案怎么弄
语音转文字
文字图片识别
云桌面是什么
网址安全检测
网站建设搭建
国外CDN加速
SSL免费证书申请
短信批量发送
图片OCR识别
云数据库MySQL
个人域名购买
录音转文字
扫描图片识别文字
OCR图片识别
行驶证识别
虚拟电话号码
电话呼叫中心软件
怎么制作一个网站
Email注册网站
华为VNC
图像文字识别
企业网站制作
个人网站搭建
华为云计算
免费租用云托管
云桌面云服务器
ocr文字识别免费版
HTTPS证书申请
图片文字识别转换
国外域名注册商
使用免费虚拟主机
云电脑主机多少钱
鲲鹏云手机
短信验证码平台
OCR图片文字识别
SSL证书是什么
申请企业邮箱步骤
免费的企业用邮箱
云免流搭建教程
域名价格
推荐文章
- GaussDB工具_gaussdb怎么读_高斯数据库工具_华为云
- GaussDB用法_GaussDB数据库使用方法_高斯数据库如何使用_华为云
- GaussDB咋样_openGauss和GaussDB的区别_高斯数据库咋样_华为云
- GaussDB学习_gaussdb教程_高斯数据库学习_华为云
- GaussDB数据库_gaussdb类型_高斯数据库_华为云
- GaussDB TP_GaussDB和MySQL区别_高斯数据库TP_华为云
- GaussDB数据库云备份_华为GaussDB_高斯数据库云备份
- GaussDB gsql使用_gaussdb介绍_gaussdb用法_gaussdb教程
- GaussDB连接_华为Gaussdb_高斯数据库连接_华为云
- GaussDB学习_gaussdb数据库_高斯数据库学习_华为云