当前位置: 首页 > news >正文

DB2存储过程如何编写和执行

db2执行文件参数:
-t 表示语句使用默认的语句终结符——分号;  
-v 表示使用冗长模式,这样 DB2 会显示每一条正在执行命令的信息;  
-f 表示其后就是脚本文件;  
-z表示其后的信息记录文件用于记录屏幕的输出,方便以后的分析(这是可选的,但我们建议使用该选项)。
当使用了-t选项而没有标明语句终结符,则分号(;)会默认为语句的终结符。有时可能会出现使用另外的终结符的情况,例如用SQL PL 编写的的脚本使用其它的符号而不是默认的分号,因为分号在SQL PL 是用于定义数据库对象过程中的语句结束。
-d --end的简称,最后一个结束符
存储过程:
;作为DB2默认的SQL命令结束符,即你执行的不是一个创建存储过程的语句,而是多条不完整的SQL语句。
语句中最后一个;换成其它符号,如@,然后使用db2 -td@ -vf insert_log_test.sql(txt、sql都可以) 指定@为命令结束符。

一个简单的存储过程:
vi insert_log_test.sql

CREATE OR REPLACE PROCEDURE INSERT_LOG_TEST()
begin
atomic declare i int default 0;
  while(i <10000)
  do insert into log_test values (i,'中间提交的事务');
  set i=i+1;
  end while;
end
@

[db2inst1@t3-dtpoc-dtpoc-web04 liys]$ db2 -td@ -vf insert_log_test.sql
CREATE OR REPLACE PROCEDURE INSERT_LOG_TEST()
begin 
atomic declare i int default 0;
  while(i <10000) 
  do insert into log_test values (i,'中间提交的事务');
  set i=i+1;
  end while;
end

DB20000I  The SQL command completed successfully.

如果我们把最后一个@删的,然后改成;然后执行db2 -tvf会发生什么?DB2会不会把文件看出一个存储过程,而是普通的DDL语句来执行,以;为DDL等sql的分隔符

[db2inst1@t3-dtpoc-dtpoc-web04 liys]$ db2 -tvf insert_log_test.sql
CREATE OR REPLACE PROCEDURE INSERT_LOG_TEST()
begin 
atomic declare i int default 0
DB21034E  The command was processed as an SQL statement because it was not a 
valid Command Line Processor command.  During SQL processing it returned:
SQL0104N  An unexpected token "END-OF-STATEMENT" was found following "lare i 
int default 0".  Expected tokens may include:  "<psm_semicolon>".  LINE 
NUMBER=3.  SQLSTATE=42601

while(i <10000) do insert into log_test values (i,'中间提交的事务')
DB21034E  The command was processed as an SQL statement because it was not a 
valid Command Line Processor command.  During SQL processing it returned:
SQL0104N  An unexpected token "while(i <10000) do" was found following 
"BEGIN-OF-STATEMENT".  Expected tokens may include:  "<space>".  
SQLSTATE=42601

set i=i+1
DB21034E  The command was processed as an SQL statement because it was not a 
valid Command Line Processor command.  During SQL processing it returned:
SQL0206N  "I" is not valid in the context where it is used.  SQLSTATE=42703

end while
DB21034E  The command was processed as an SQL statement because it was not a 
valid Command Line Processor command.  During SQL processing it returned:
SQL0104N  An unexpected token "END-OF-STATEMENT" was found following "end 
while".  Expected tokens may include:  "JOIN <joined_table>".  SQLSTATE=42601

end
DB21034E  The command was processed as an SQL statement because it was not a 
valid Command Line Processor command.  During SQL processing it returned:
SQL0104N  An unexpected token "END-OF-STATEMENT" was found following "end".  
Expected tokens may include:  "JOIN <joined_table>".  SQLSTATE=42601

调用存储过程:
[db2inst1@t3-dtpoc-dtpoc-web04 liys]$ db2 "select count(*) from log_test"

1          
-----------
     260000

  1 record(s) selected.

[db2inst1@t3-dtpoc-dtpoc-web04 liys]$ db2 "call insert_log_test()"       

  Return Status = 0
[db2inst1@t3-dtpoc-dtpoc-web04 liys]$ db2 "select count(*) from log_test"

1          
-----------
     270000

  1 record(s) selected.

db2 "call insert_log_test()"执行的很快,不到1秒就插入成功了,而MYSQL相同的存储过程需要大概26秒左右,没想到会这么慢。。。

直接执行存储过程:返回结果也很快,不到1秒。
[db2inst1@t3-dtpoc-dtpoc-web04 ~]$ db2 "begin atomic declare i int default 0;while(i <10000) do insert into log_test values (i,'中间提交的事务');set i=i+1;end while;end"
DB20000I  The SQL command completed successfully.

来看看MYSQL为啥这么慢,首先看他的存储过程定义:

vi insert_log_test.sql

delimiter //                            #定义标识符为双斜杠
drop procedure if exists insert_log_test;          #如果存在test存储过程则删除
create procedure insert_log_test()                 #创建无参存储过程,名称为test
begin
    declare i int;                      #申明变量
    set i = 0;                          #变量赋值
    while i < 10000 do                     #结束循环的条件: 当i大于10时跳出while循环
        insert into log_test values (i,'中间提交的事务+++++++++**********++++++++:q');    #往test表添加数据
        set i = i + 1;                  #循环一次,i加一
    end while;                          #结束while循环

end
//                                      #结束定义语句

插入10000条需要21秒多
mysql> call insert_log_test();
Query OK, 1 row affected (21.43 sec)

什么原因呢?怀疑是每插入一条就commit一次,一共commit了10000次,而DB2是插入10000条后提交了一次而已,下面来验证下
vi insert_log_test.sql
delimiter //
drop procedure if exists insert_log_test;
create procedure insert_log_test()
begin
    declare i int;
    set i = 0;
     start transaction;
    while i < 10000 do
        insert into log_test values (i,'中间提交的事务+++++++++**********++++++++');
        set i = i + 1;
    end while;
    commit;

end//
delimiter ;


mysql> source /home/mysql/liys/insert_log_test.sql;
Query OK, 0 rows affected, 1 warning (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

mysql> call insert_log_test();
Query OK, 0 rows affected (0.26 sec)

mysql> select count(*) from log_test;
+----------+
| count(*) |
+----------+
|   410000 |
+----------+
1 row in set (0.15 sec)

mysql> call insert_log_test();
Query OK, 0 rows affected (0.27 sec)

mysql> select count(*) from log_test;
+----------+
| count(*) |
+----------+
|   420000 |
+----------+
1 row in set (0.15 sec)

结果证明猜想是对的

相关文章:

DB2存储过程如何编写和执行

db2执行文件参数&#xff1a; -t 表示语句使用默认的语句终结符——分号&#xff1b;   -v 表示使用冗长模式&#xff0c;这样 DB2 会显示每一条正在执行命令的信息&#xff1b;   -f 表示其后就是脚本文件&#xff1b;   -z表示其后的信息记录文件用于记录屏幕的输出&am…...

SpringBoot + FFmpeg实现一个简单的M3U8切片转码系统

简介 在本文中&#xff0c;我们将使用SpringBoot和FFmpeg来实现一个简单的M3U8切片转码系统。M3U8是一种常用的视频流媒体播放列表格式&#xff0c;而FFmpeg则是一个强大的音视频处理工具。 技术栈 SpringBoot&#xff1a;一个基于Spring框架的快速开发平台。FFmpeg&#xf…...

SpringCloud(35):Nacos 服务发现快速入门

本小节,我们将演示如何使用Spring Cloud Alibaba Nacos Discovery为Spring cloud 应用程序与 Nacos 的无缝集成。 通过一些原生的spring cloud注解,我们可以快速来实现Spring cloud微服务的服务发现机制,并使用Nacos Server作为服务发现中心,统一管理所有微服务。 1 Spring…...

OSPF实验:配置与检测全网互通

文章目录 一、实验背景与目的二、实验拓扑三、实验需求四、实验解法1. 配置 IP 地址2. 按照图示分区域配置 OSPF &#xff0c;实现全网互通3. 检查是否全网互通 摘要&#xff1a; 本篇文章介绍了一个 OSPF&#xff08;Open Shortest Path First&#xff09;实验&#xff0c;旨在…...

常见的五种设计模式

https://www.runoob.com/design-pattern/factory-pattern.html 单例模式 **意图&#xff1a;**保证一个类仅有一个实例&#xff0c;并提供一个访问它的全局访问点。 **主要解决&#xff1a;**一个全局使用的类频繁地创建与销毁。 **何时使用&#xff1a;**当您想控制实例数目…...

pandas读取一个 文件夹下所有excel文件

我这边有个需求&#xff0c;是要求汇总一个文件夹所有的excel文件&#xff0c; 其中有.xls和 .xlsx文件&#xff0c;同时还excel文件中的数据可能还不一致&#xff0c;会有表头数据不一样需要一起汇总。 首先先遍历子文件夹并读取Excel文件&#xff1a; 使用os库来遍历包含子文…...

Python网页请求超时如何解决

在进行网络爬虫项目时&#xff0c;我们经常需要发送大量的请求来获取所需的数据。然而&#xff0c;由于网络环境的不稳定性&#xff0c;请求可能会因为超时而失败。请求超时可能导致数据获取不完整&#xff0c;影响爬虫的效率和准确性。此外&#xff0c;频繁的请求超时可能会被…...

虚幻引擎集成web前端<二>:UE4 像素流 与 web 通信

Vue 和 Unreal Engine (UE) 之间的通信可以通过多种方式实现。以下是一些建议的方法&#xff1a; 使用 Websockets&#xff1a;Websockets 是一种在客户端和服务器之间进行双向通信的技术。在 Vue 端&#xff0c;你可以使用一个 Websockets 库&#xff08;如 socket.io&#xf…...

618-基于FMC+的XCVU3P高性能 PCIe 载板 设计原理图

基于FMC的XCVU3P高性能 PCIe 载板 一、板卡概述 板卡主控芯片采用Xilinx UltraScale16 nm VU3P芯片&#xff08;XCVU3P-2FFVC1517I&#xff09;。板载 2 组 64bit 的DDR4 SDRAM&#xff0c;支持 IOX16或者 JTAG 口&#xff0c;支持PCIe X 16 ReV3.0以及 FMC 扩展接口。…...

ABB UF C911B108 3BHE037864R010控制主板模块

ABB UF C911B108 3BHE037864R010 控制主板模块通常用于ABB的工业自动化和控制系统中&#xff0c;作为关键组件之一&#xff0c;用于执行控制、监测和通信任务。以下是通常情况下控制主板模块的一些产品功能&#xff1a; 高性能处理器&#xff1a;ABB UF C911B108 3BHE037864R01…...

基于SpringBoot开发的疫情信息管理系统

文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 🍅文末获取源码联系🍅 项目介绍 疫情信息管理系统,java项目。 eclipse和…...

手敲Cocos简易地图编辑器:人生地图是一本不断修改的书,每一次编辑都是为了克服新的阻挡

引言 本系列是《8年主程手把手打造Cocos独立游戏开发框架》&#xff0c;欢迎大家关注分享收藏订阅。 在上一篇文章&#xff0c;笔者给大家讲解了在Cocos独立游戏开发框架中&#xff0c;如何自定义实现Tile地图管理器&#xff0c;成功地在游戏中优化加载一张特大的地图。接下来…...

MySQL——修改数据库和表的字符编码

修改编码&#xff1a; &#xff08;1)先停止服务 &#xff08;2&#xff09;修改my.ini文件 &#xff08;3&#xff09;重新启动服务说明&#xff1a; 如果是在修改my.ini之前建的库和表&#xff0c;那么库和表的编码还是原来的Latin1&#xff0c;要么删了重建&#xff0c;要么…...

中国人民大学与加拿大女王大学金融硕士——人生总要逼自己一把

我们每个人都是一个独特而丰富的个体&#xff0c;身上蕴藏着各种潜力和可能性。要不断去开发自己的潜能&#xff0c;不断学习和提升自己的知识和技能&#xff0c;保持对新知识和趋势的敏感。想要在职场上走得更远&#xff0c;就要逼自己一把&#xff0c;在职继续攻读硕士学位是…...

SAP MM学习笔记 - 错误 ME092 - Material mainly procured internally(原则上该物料只能内部调达)

购买依赖&#xff0c;购买发注的时候&#xff0c;会出一些错误或警告&#xff0c;碰到的时候&#xff0c;能解决的话&#xff0c;咱们就记录一下。 比如 Msg 番号 ME092 该品目原则上是内部调达。 如下图&#xff0c;本次出这个错误的原因是&#xff0c;ME51N做购买依赖&…...

【EI会议征稿】2023年智能科学与计算机工程国际学术会议(ISCE 2023)

2023年智能科学与计算机工程国际学术会议&#xff08;ISCE 2023&#xff09; 2023 International Conference on Intelligence Scicence andComputer Engineering 2023年11月3-5日 中国-西双版纳 迄今为止&#xff0c;人工智能研究在一些特殊领域取得了一定的实质性进展。然…...

Java多线程编程

目录 1、一个线程的生命周期 2、创建一个进程 2.1 Thread 方法 2.2 通过Runnable接口 2.3 通过继承Thread类本身 2.4 通过Callable和 Future创建进程 2.5 创建线程的三种方式的对比 3、线程的状态 4、线程同步 4.1 同步代码块 4.2 同步方法 5、使用wait和notify 6…...

Windows wsl2安装Ubuntu

wsl&#xff08;Windows Subsystem for Linux&#xff09;即适用于Windows的Linux子系统&#xff0c;是一个实现在Windows 10 / 11上运行原生Linux的技术。 wsl2 为其迭代版本&#xff0c;可以更好的在Windows上运行Linux子系统。 这里以 Windows 11 安装Ubuntu作为示例。 开启…...

csp-j模拟赛1总结

文章目录 T1T2T3结语 尾声 快csp考试了得多刷题啊… 题海战术,启动(玩OI玩的) 咳咳,进入正题. T1 T1 水题,小学数学即可搞定,话不多说,上代码: #include <iostream> using namespace std; int main(){int n,t;cin>>n>>t;bool y0;unsigned long long int nu…...

有哪些做流程图的软件?分享一些制作方法和注意事项

流程图是一种常用的图表&#xff0c;可以用于表示各种工作流程、系统架构、决策流程等。在现代工作生活中&#xff0c;制作流程图已经成为了必备的技能之一。本文将介绍一些常用的做流程图的工具&#xff0c;并分享一些制作方法和注意事项。 做流程图的工具 1.迅捷画图&#x…...

革新性系统安全管理:开源工具重新定义Windows Defender控制范式

革新性系统安全管理&#xff1a;开源工具重新定义Windows Defender控制范式 【免费下载链接】defender-control An open-source windows defender manager. Now you can disable windows defender permanently. 项目地址: https://gitcode.com/gh_mirrors/de/defender-contr…...

基于MATLAB的隔离型DC DC变换器系统设计:技术指标明确、包含设计报告与仿真程序的全过程解析

基于MATLAB的单端反激——隔离型DC/DC变换器系统设计 本设计包括设计报告&#xff0c;仿真程序。技术指标 输入电压、输出电压、输出功率、纹波系数、开关频率见下图凌晨三点盯着示波器的我&#xff0c;突然被显示器上的锯齿状波形逗笑了——这哪儿是DC/DC变换器啊&#xff0c;…...

Raspotify多用户环境配置终极指南:在家庭网络中共享Spotify音乐服务

Raspotify多用户环境配置终极指南&#xff1a;在家庭网络中共享Spotify音乐服务 【免费下载链接】raspotify A Spotify Connect client that mostly Just Works™ 项目地址: https://gitcode.com/gh_mirrors/ra/raspotify 想要在家庭网络中打造一个完美的音乐共享系统吗…...

前端面试高频考点总结(不仅有考点,还有对应解答)

2026年 AI面试 经验分享 前端面试核心要点 技术考察转向实际场景与新兴技术&#xff0c;重点包括&#xff1a; JavaScript/TypeScript核心机制与编码能力React/Vue3的高阶特性与原理工程化与性能优化体系网络/安全与综合性场景题 3-5年经验者需突出&#xff1a; 技术原理深度&a…...

SDXL-Turbo多场景落地教程:覆盖电商、游戏、教育、自媒体的6大用法

SDXL-Turbo多场景落地教程&#xff1a;覆盖电商、游戏、教育、自媒体的6大用法 1. 认识SDXL-Turbo&#xff1a;重新定义AI绘画体验 SDXL-Turbo不是传统的AI绘画工具&#xff0c;而是一个革命性的实时创作伙伴。想象一下&#xff0c;你打字的同时&#xff0c;画面就在眼前实时…...

LongCat-Image-Editn效果展示:建筑效果图‘添加中文标牌+调整光照’案例

LongCat-Image-Edit效果展示&#xff1a;建筑效果图‘添加中文标牌调整光照’案例 1. 开篇&#xff1a;当AI学会“装修”建筑效果图 想象一下&#xff0c;你手里有一张刚出炉的建筑效果图&#xff0c;客户突然提出两个新需求&#xff1a;“能不能给大楼加上我们公司的中文招牌…...

【唠嗑第二嗑-代码里面的无为思想,空空如也的接口】

文章目录接口怎么是空的你当然知道为什么1.定义类型体系&#xff0c;而非行为契约2.为差异化行为预留空间3.真正的实现在子接口中为什么我会惊讶圣人不妄为最近拜读了老子的《道德经》。很多时候觉得读懂了&#xff0c;可转念一想又不是那么回事&#xff01;不知道是老子他老人…...

Stable-Diffusion-v1-5-archive生产环境部署:异常自动拉起+日志监控+多用户隔离方案

Stable-Diffusion-v1-5-archive生产环境部署&#xff1a;异常自动拉起日志监控多用户隔离方案 1. 引言 如果你正在寻找一个稳定、可靠、易于管理的Stable Diffusion v1.5生产环境部署方案&#xff0c;那么你来对地方了。SD1.5作为文生图领域的经典模型&#xff0c;虽然新模型…...

ACE协议实战:如何通过AxDOMAIN信号优化多核SoC的缓存一致性?

ACE协议实战&#xff1a;AxDOMAIN信号在多核SoC缓存一致性中的深度优化 1. 多核SoC缓存一致性的工程挑战 在现代嵌入式系统设计中&#xff0c;多核处理器架构已成为提升性能的主流方案。当我们把多个ARM Cortex-A系列核心集成到同一芯片时&#xff0c;缓存一致性管理立即成为系…...

在团队协作中直接 Clone 主仓库开发?别慌,这才是正确的 PR 提交流程

在团队协作中直接 Clone 主仓库开发&#xff1f;别慌&#xff0c;这才是正确的 PR 提交流程 很多人以为只有 Fork 了仓库才能提 Pull Request&#xff0c;其实在公司内部项目或有写权限的私有仓库中&#xff0c;直接 Clone 新建分支 推送到主仓 是更常见、更高效的协作方式。…...