• [其他问题] 求助大神 select into报query returned no rows when process INTO 错误
    今天在编译一个SP   存储过程里面有一段语句 是给变量赋值    具体语句是  select  count(1)  into  v_cnt  from  tablename A   where  a.id=v_id     但是当表中没有本次传入的v_id时,就会报 query returned no rows when process INTO 错误    求助各位大神 有没有什么办法解决或者规避
  • [技术解读] 全国高校计算机类课程能力提升高级研修班(2024年第二期)--“GaussDB数据库内核原理与应用实践”课程 材料分享
    10月19~20日,2024年第七期全国高校计算机类课程能力提升高级研修班在华为北京研究所如期举行。本次活动由教育部高等学校计算机类专业教学指导委员会、全国高等学校计算机教育研究会主办,清华大学出版社和华为公司共同承办。本次师资培训邀请到了中国信通院云大所大数据与智能化部副主任 马鹏玮、清华大学计算机科学与技术系教授 李国良、西安电子科技大学教授 李辉、上海掌数科技有限公司CTO 邹昌根、北京信息科技大学副教授车蕾,以及华为多位GaussDB数据库专家,与来自全国25所知名院校的30位老师共同学习和探讨GaussDB数据库内核研究及人才培养。关于活动报到,请查看:GaussDB 2024年第二期师资培训活动,圆满结束!培训日程安排和培训材料分享如下,欢迎获取:日期时间主题主讲人10月19日 9:30-9:40开场致辞陈伟红(华为云数据库产品规划专家)9:40-10:10数据库产业发展研究报告分享马鹏玮(中国信通院云大所大数据与智能化部副主任)10:10-11:00数据库的技术发展趋势+高校人才培养现状李国良(国家杰出青年科学基金获得者,IEEE Fellow,清华大学计算机科学与技术系长聘教授,openGauss社区技术委员会主席)11:00-12:00数据库内核原理——数据库索引、并发控制李辉(国家级青年人才,西安电子科技大学华山特聘教授)14:00-15:00数据库内核原理——数据库优化器、执行器李辉(国家级青年人才,西安电子科技大学华山特聘教授)15:00-15:40优化器案例演示周兆琦(华为GaussDB数据库技术专家)16:00-16:40GaussDB产品核心竞争力和技术规划张浩(华为云数据库产品规划专家)16:40-17:30GaussDB开放能力、应用开发组件及工具鲍志飞(华为云数据库生态技术专家)17:30-18:00华为开发者空间介绍郭高举10月20日09:00-9:40基于GaussDB的法人清算系统开发实践分享邹昌根(上海掌数科技有限公司CTO )9:40-10:20基于GaussDB的应用型人才教学方法及经验交流车蕾(北京信息科技大学副教授)10:30-12:00开放研讨:如何基于国产数据库开好高校数据库课程窦德明(华为云数据库产品总监)
  • [技术干货] 【技术干货集合】2024年11月GaussDB技术干货集合
    数据库1分钟DBA系列大合集来啦,请速速收藏:)精华 cid:link_13探索 PostgreSQL 基础语法:开启数据库编程之旅 cid:link_0Mysql常见索引结构总结 cid:link_1MySQL 备份全解析:原理与实践 cid:link_4GaussDB区域和可用区 cid:link_5GaussDB如何选择区域? cid:link_2通过命令创建GaussDB数据库账户 cid:link_6GaussDB参数调优 cid:link_3华为云GaussDB,新一代分布式数据库 cid:link_7GaussDB——华为云秉承“将公司对网络和业务安全性保障的责任置于公司的商业利益之上” cid:link_8GaussDB常用概念 cid:link_9GaussDB集群架构 cid:link_10GaussDB分布式形态整体架构 cid:link_11GaussDB入门 cid:link_12
  • [技术解读] GaussDB云原生数据库SQL引擎继承原来openGauss的词法解析,语法解析,查询重写,查询优化和执行引擎的能力。
     GaussDB云原生数据库SQL引擎继承原来openGauss的词法解析,语法解析,查询重写,查询优化和执行引擎的能力。  由于云原生数据库是shared disk 架构,一个事务在一个节点上执行,所以不需要原来分布式根据分布式key进行数据分布,分布式执行和分布式2PC提交的能力。为了支持数据库粒度的异地多活,云原生数据库引入了CDB和ADB的概念,SQL引擎在访问表等对象的过程中,需要记录当前执行的数据库上下文信息,内存上下文根据CDB来分配和管理,并且需要把当前的CDB信息透传到存储引擎,把日志持久化到相应CDB的日志流中。  云原生支持SQL读写一致性路由,根据当前会话的数据一致性要求和CDB的主备把SQL路由到相应集群进行处理。云原生支持SQL数据亲和性路由,根据数据的访问亲和性对数据进行汇聚,SQL优化识别出数据分区所在节点后,把SQL路由到相应节点进行处理。云原生长期演进要求数据和程序的解耦,在SQL引擎中实现系统表存储和解析的解耦,实现系统表的前向兼容。 
  • [技术解读] GaussDB日志传输与回放
     GaussDB日志传输与回放  增量数据通过XLOG日志传输和日志回放的方式进行追增。首先sender节点的parser线程挑选出需要回放的日志并写入bucket_xlog目录。sender线程收到receiver的BUCKETXLOG请求后,从bucket_xlog目录读取日志传输给receiver。receiver节点的receiver线程将收到的XLOG日志转发给standby并写入bucket_xlog目录。最后startup线程启动回放工作线程进行回放。standby节点与receiver节点同理。  日志流的处理 (1)parser挑选bucketlist对应日志DML日志只涉及一个bucket,在发送和接收时只需要根据bucketlist过滤即可。而commit/abort日志则可能包含多个bucket,因此需要特殊处理:commit/abort日志只涉及一个bucket写日志时,则与DML日志一样,在header部分写入bucketid,在receiver回放时直接进行回放;commit/abort日志包含多个bucket,则在header部分写入一个特殊的id(ComboBktId),在receiver回放时,将无关的bucketid给过滤掉,只回放bucketlist中的bucketid。  (2)日志格式修改将bucket日志从原来的XLOG中挑出来写到新的日志文件后,原来的LSN信息丢失了,这导致后面回放时LSN校验失败。为了保留原始的LSN值,在解析日志时将原始的LSN值写在bucket日志的后面,在回放前,用这个LSN值去替换日志的LSN。图2为日志格式修改示意图。  (3)日志中元数据的处理日志多流技术中,新节点上的数据可能来自于不同的老节点,相同的tablespace及database在不同DN上对应的tablespaceid及dbid很可能是不同的,因此在日志回放前需要将日志中的tablespaceid及dbid替换成本地的tablespaceid及dbid。  替换方法:dbid: 在进行重分布前,在内核中记录各个节点本次要重分布的dbid,在日志回放的解析日志阶段,把日志里所有的block里的dbid进行替换。tablespaceid: 由于tablespaceid可能会有多个,sender会把tablespace的name与id的对应关系传给receiver,receiver再根据name查出本地的tablespaceid,然后在解析阶段进行替换。tablespaceid的映射关系需要传到备机。  回放的处理  startup线程会拉起回放工作线程,包括pageredo线程、bucketwriter线程和bucketflush线程。同时使用私有缓冲区隔离,避免未上线前污染共有缓冲区。图3为日志回放示意图。  pageredo线程负责日志回放,bucketwriter线程负责将私有缓冲区中的内容注册给bucketflush线程,bucketflush线程负责刷脏工作。同时新增共享变量,记录需要落盘的页面信息。  bucketwriter线程负责把缓冲区中的所有内容记录到共享变量中,在后台轮询工作。bucketflush线程启动时会初始化本地hash表,bucketflush线程从共享变量中拷贝需要刷盘的信息到本地hash表中,完成落盘操作。  以上所有操作均在startup线程存在期间完成,扩容上线逻辑会判断bucketwriter线程是否完成刷页,bucketwriter线程会等待bucketflush线程完成落盘,因此上线提交时能够保证所有页面已经完成落盘。如果此时发生故障,上线事务回滚,下次重入时本批bucket重新进行move bucket全逻辑,以保证数据正确性。 
  • [技术解读] GaussDB趋势预测功能模块
    GaussDB趋势预测功能模块主要实现基于历史时序数据预测未来时序变化趋势。该模块框架解耦,可以实现不同预测算法的灵活替换,并且该模块功能可以实现不同特征时序的算法自动选择,支持线性特征时序预测LR回归算法和非线性特征预测ARIMA算法。目前该模块可以覆盖线性时序、非线性时序和周期时序的准确预测。时序预测模块和异常检测模块作为自监控的两个核心组件,通过采集程序获取数据后,在检测器阶段进行时序预测及异常检测,数据流转的流程如下:数据获取和数据分析是一个相对于数据库环境独立的工具组件,包括Agent、检测器等子模块。其中Agent是部署在数据库主机环境上的,用于采集数据库中的性能指标,并通过网络,将其传送给远端检测器模块,远端检测器模块负责对采集到的性能指标数据进行收集、存储与检测。Agent模块分为三个子模块,分别是Source、Channel以及Sink,各个组件之间可插拔、可扩展。其中数据收集端Source,用于直接监控数据库系统,并从数据库系统中采集信息;数据缓存器Channel,可以理解为缓存区,用来保存Source处捕获的数据,是一个FIFO的队列。Source捕获的数据会Push到Channel中,而后Sink组件消费由Source产生的数据。Channel缓存在内存中,为了防止OOM,具有容量上限,当超过容量上限时,过多的元素会被禁止放入队列。数据处理及外发Sink,负责从Channel消费数据,然后将数据从Channel中清除,以指定数据格式进行外发,将数据存储到外部存储系统。在数据从Channel端到Sink端的过程中,加入了JSON wrapper 和flow controller两个中间件,分别对应了JSON格式封装、流量控制功能。其中,由于Agent架构对限流功能天然友好,Channel充当缓存功能,实现漏桶算法进行限流。Sink上支持类似这种pipeline模式,以便后续对上传过程进行控制,提供可扩展能力。从Agent发送到检测器的网络通信协议默认为https,默认证书在部署时由部署脚本生成。检测器主要包括三个部分,分别是存储模块、时序预测模块、异常检测模块。本章节重点描述时序预测模块,异常检测模块在后续单独描述。时序预测模块的执行流程如下:时序预测模块提供了两种基本的预测模型,分别是线性模型和深度学习模型。另外系统给用户指定了三种预测模式,分别是decompose、ensemble、hybrid。Decompose代表分解预测模式,ensemble代表整体预测模式,hybrid代表混合预测模式,算法步骤为:1. 首先获取训练数据,算法会判断数据的线性相关系数是否大于指定的阈值(系统默认0.9),如果大于阈值,则会选择线性预测模型(linear regressor),否则会选择循环神经网络预测模型(RNN)。2. 如果用户选择decompose预测模式,系统会调用是时序分解算法将序列分解成周期项、趋势项、残差项,然后调用模型对趋势项进行训练,得到趋势的预测结果。对于周期不需要预测,可以根据周期性递推得到未来周期项。对于残差,系统基于统计学原理,取25%和75%分位作为残差项的上下限。最终预测结果为趋势项、周期项和残差项的和。3. 如果用户选择ensemble预测模式,系统会直接对数据进行训练,然后进行预测,得到预测结果和模型评分。4. 如果用户选择的hybrid模式,系统会串行的执行decompose和ensemble两种预测模式流程,同时根据它们最终模型评分的高低选择最优的预测结果。如果用户真实采集到的信息与时序预测的结果出现较大偏差(大于预设阈值),则认为当前情况出现异常,执行报警逻辑。
  • [技术解读] GaussDB提供500+指标的智能监测
    GaussDB提供500+指标的智能监测,通过对数据库指标、操作系统指标和运行日志的采集,拉取采集数据至时序数据库存储,便于后续进行异常侦测和问题定位。为了快速支撑各粒度的多维度指标采集,部署多个采集程序,例如数据库指标采集程序openGauss-exporter、操作系统指标采集程序node-exporter、本地执行采集程序cmd_exporter以及数据二次处理程序reprocessing-exporter等。GaussDB智能监测程序采取服务化方式部署,通过RPC通道(默认Https协议,且校验数据库用户名密码,不存在空密码访问情况)实现,可以获取数据库的即时信息,也可以向数据库下发执行动作(需要用户提供的用户具备执行权限,具体数据库用户由用户指定)。时序数据处理支持多种时序库存,例如普罗米修斯、Influxdb等,尽管对接接口协议不同,但实现方式类似。后面以普罗米修斯时序库和采集程序进行举例,说明智能监控的方法和实现方案。下图为智能监测方案的执行时序图。数据采集的实现过程:(1)Exporter 的数据采集原理如上图所示,采集过程是pull的形式,即由Prometheus 主动发起数据刮取(scrape)请求,而后exporter再想被监控服务(可以是数据库服务、Linux等)发起查询请求,由其通过http(s) 协议展示给Prometheus;(2)通过Prometheus 框架,按照Prometheus协议即可实现对应的exporter,该实现过程类似一个插件,通过Prometheus 提供的SDK(如prometheus-client库)即可完成开发过程;(3)所采集的指标项通过用户给定的配置文件解析获得,不需要在exporter中固化;(4)实现的exporter主要有两个,一个是openGauss-exporter,用于监控数据库实例,从其上面抓取数据;另一个是reprocessing-exporter, 用于对Prometheus已经采集到的数据进行二次加工。两个exporter是各自独立的进程。(5)openGauss-exporter 是需要输入待监控数据库的登录密码的,该密码通过shell命令的配置参数输入。其中,在命令行中通过内存覆盖的技术擦除了命令行中的密码,避免了通过 ps –ux 等泄漏密码的可能。(6)为进一步保障采集数据的安全性,exporter采集的数据源由用户手动配置,默认配置文件不涉及敏感数据,仅采集数据库性能相关指标;在网络协议方面,默认支持采用https协议,用户显性给定证书文件路径,并在Prometheus-server侧进行配置exporter采集工具和用户不涉及交互,所有SQL执行都有程序本身实现,不涉及SQL注入问题。数据采集存储在时序数据库后,将进入趋势预测和异常检测模块,便于客户提前发现潜在问题或者实时发现系统中的异常问题。
  • [技术解读] GaussDB高智能--自治运维技术
    在数据库自治运维技术领域,主要分为两条技术路线。其一是以Oracle为主的老牌数据库厂商,构建运维及生命周期管理统一逃课,实现大规模的数据库智能化管理能力;对用户通过运维工具指导业务快速升级和排障,对业务通过内置的优化诊断套件和多维度报表,快速定位性能瓶颈问题和实现SQL的快速优化。这种方案在单一集群或小规模集群是高效的,通过DBA能力复制,可快速完成运维技术的应用。另一种是以新兴云厂商为主,构建基于云化设施和环境的自治运维技术。尽管各家的技术不近统一,主体思路是一致的,即尽可能通过一套运维管理系统,纳管云化多套环境,通过机器学习技术和海量数据,训练高效诊断和优化模型,形成标准化运维套路。GaussDB基于机器学习技术和云上海量数据信息,构建领先的自治运维管理系统,通过成熟算法实现负载感知、环境感知和数据感知,为数据库提供自监控、自诊断、自调优、自安全的能力,为客户和DBA提供极佳的运维管理体验。上图为GaussDB的自治运维系统整体框图。数据采集层实现多维指标的数据采集,采集频率根据内容不同可分为秒级采集和分钟级采集。其中秒级采集包括操作系统资源信息采集和数据库实例信息采集,例如操作系统层面CPU、内存、IO读写、网络资源信息采集,数据库实例状态、数据库内关键指标(内存、连接数、TPS、QPS、读写频率等);分钟级采集包括审计日志采集、数据库日志采集和全量SQL流水采集等。自治运维平台提供采集程序(Agent进程),可部署在数据库服务侧或者远端,连接数据库实例或所在服务器,采集上述指标;若客户系统配置普罗米修斯进行信息采集,可实现相应的exporter,在其中内置数据库多维度指标采集方法以及数据清理方案,实现与普罗米修斯平台对接。数据库采集端程序需要部署在同数据库进程所在物理节点时,若数据库为多节点集群环境,每个物理节点可部署一个Agent进程采集端(或者普罗米修斯采集端)。数据库采集端程序通常占用资源很少,通过配置文件可以制定不同指标采集频率,以免占用资源影响数据库业务正常运行。数据计算层提供数据存储、数据分析及元数据管理能力。其中数据存储用于接收来自数据采集层发生来的数据,存储数据源可以是多种维度或者类型,包括普罗米修斯、时序数据库(OpenTSDB等)、MongoDB、SQLite等,自治运维服务内置对接接口,每个自治服务模块与存储数据源的交互,获取数据并进行分析处理。在企业实际应用时,可根据需要选择不同的存储组件和大数据处理组件,例如普罗米修斯+时序数据库,或者kafka+时序数据库等方案。在数据计算层除了时序存储数据库外,还可以设计其他存储单元,例如算法模型库和故障规则库。其中算法模型库存储自治管理服务生成的AI模型,例如参数推荐训练模型;在算法模型库中,可以存储传统机器学习(例如监督学习)模型、强化学习模型。故障规则库是记录数据库常见故障案例,将这些案例通过拆解和分析,生成规则引擎。自治服务层在用户维度,可以分为SQL诊断和调优、自治安全、数据库运维。其中SQL诊断和调优提供多种SQL治理和调优能力,包括慢SQL诊断、SQL表现评估、智能索引推荐、智能查询重写等服务。自治安全通过AI技术实现敏感信息发觉、SQL注入检测和异常行为分析。数据库运维能力实现在数据库系统、OS系统和数据库集群层面的运维和调优,其中数据库系统服务包括数据库参数智能推荐、智能巡检、数据库分布键推荐和智能业务调度;在操作系统层面,实现慢盘检测和恢复、网络丢包检测;在数据库集群层面,基于故障或者负载需求,提供自动扩缩容、异常节点修复服务。自治运维服务最终需要通过管控网页界面形式对外呈现,方便用户直观感受运维管理带来的效果。在展示界面方面,多指标结合AI趋势预测,可给出后续时段的数据走向。同时为方便用户系统观察集群状态,提供健康指数报告和详细综合报告。健康指数报告给出当前系统的健康评分等级,默认80分以上属于运行健康状况,小于60分则存在严重隐患,急需修复。综合报告详细描述系统各维度信息,包括集群状态、负载运行情况、常见数据库指标项信息。
  • [技术解读] GaussDB高智能--数据库智能化发展史
    云原生为迎接智能化提供了基础条件,智能化是GaussDB的新的牵引方向,两者相辅相成,互相促进。在智能化出现之前,数据库的运维管理主要依赖分层解耦、化繁为简方式来治理,通过人工服务对单点的业务进行管理。但在云化环境中,一个Region纳管上万实例,仅靠人工很难满足业务诉求,这就促成智能与数据库在云原生的架构和应用中释放的新的研发方向。GaussDB基于智能化(AI)技术,打造AI4DB和DB4AI两大技术高地,重构数据库内核核心组件,提升数据库管理和优化技术,满足数据库科学家对普惠AI的诉求。AI4DB技术利用机器学习,基于海量运行期数据及负载数据,形成智能解决方案,自动化处理各项任务,加速运维和诊断优化效率提升。DB4AI通过数据库使能AI,满足数据科学家在数据治理方面的诉求,仅通过简易SQL调用,即刻完成机器学习算法的训练和推荐,实现人人会AI,人人用AI的普惠应用。如上图所示,GaussDB AI4DB领域包含两个方面的核心子系统:自治运维系统及智能优化器(ABO)。其中自治运维系统提供用户和DBA进行数据库系统的智能化运维管理能力,包括自监控、自诊断、自调优等方面端到端的运维管理能力,主要目标是提升系统的运维诊断效率,让数据库系统更高效和可靠。智能优化器是将AI技术嵌入到数据库内核优化器引擎,实现智能基数估计、智能计划管理和智能代价模型等功能,提升查询语句生成计划的准确性和提供查询语句的执行效率。GaussDB DB4AI领域指在数据库内实现机器学习引擎,即库内AI引擎。通过在数据库内置常用机器学习算法,把AI算法作为执行器中的执行算子在语句执行中实现,对外提供训练和推理的简易SQL语法方便用户调用。同时,在数据库内置模型管理能力,用户训练好的模型可以存储在系统表中,方便快速推理调用。在训练数据准备阶段,通过数据集管理能力,分为多个版本来保证数据训练的一致性,便于训练算法的调优。
  • [交流吐槽] 【分享交流】GaussDB for mysql 和 mysql 的区别有哪些
    GaussDB for mysql 和 mysql 比起来有什么区别?好像语法基本都一样的
  • [其他问题] 请教一下GaussDB200和DWS是一个东西吗?有啥区别
    请教一下各位大佬,GaussDB200和DWS是一个东西吗?如果不是,有啥区别?
  • [技术解读] GaussDB存储过程介绍
    @[toc]一、前言华为云数据库GaussDB是一款高性能、高安全性的云原生数据库,在数据库领域处于领先地位。而在GaussDB中,存储过程是一个不容忽视的重要功能。本文将深入介绍GaussDB存储过程的使用场景、使用优缺点、示例及示例解析、调用方法等方面,为读者提供全方位的指导与帮助。存储过程是一个可重用的、批处理的SQL语句代码块,可以包含多条SQL语句,通常用于执行复杂的数据操作、提高数据库的性能和安全性,以及简化数据库应用程序的开发和维护。在GaussDB中,存储过程的使用可以使数据库应用程序更具灵活性、数据完整性更高、执行速度更快。二、GaussDB中的定义商业规则和业务逻辑可以通过程序存储在GaussDB中,这个程序就是存储过程。 存储过程是SQL、PL/SQL、Java语句的组合。存储过程使执行商业规则的代码可以从应用程序中移动到数据库。从而,代码存储一次能够被多个程序使用。三、存储过程的使用场景存储过程是一种储存在数据库中的预编译的程序,它被定义为一系列的SQL语句,并且被用来执行一系列的数据库操作。在实际运用中,存储过程可以提高性能、提高开发效率,同时也具备良好的安全性能。 1、下面列举几个存储过程的适用场景复杂任务处理:存储过程可以用于一些需要处理复杂任务的场景,例如一个较为复杂的SQL语句,需要处理多个条件和大量的数据,使用存储过程可以提高效率。数据持久化:存储过程可以在服务器端创建和存储处理逻辑,而客户端通过调用存储过程即可处理需要的数据。数据访问权限管理:存储过程可以通过设置不同的访问权限来提高数据访问的安全性。 2、存储过程特点:频繁的、重复性、可封装、易管理。复杂的数据事务处理,可以使用存储过程实现事务的一致性和数据完整性,同时提高执行效率。对于常用的查询,可以把它们封装成存储过程,并将其缓存到内存中,在每次执行时,不需要从磁盘中读取数据,提高查询速度。四、存储过程的使用优缺点在使用存储过程时,我们需要充分了解其使用优缺点,从而在实际开发过程中进行有针对性的选择,下面罗列了一些常见的存储过程的使用优缺点。 1、优点:高效率、可复用、可维护在执行大量的操作时,存储过程可以减少数据库客户端与数据库的通信次数,从而提高了执行效率。在多次使用同一函数时,存储过程所需要的内存资源和CPU时间较少,因此,存储过程可以被看作一种可复用的数据库对象。在维护和升级方面,存储过程具有良好的维护性,可以被视为一种良好的API,简化系统的维护过程。存储过程的安全性和可维护性更高,减少了数据库维护的工作量。 2、缺点:难度较高、对数据库依赖性强存储过程需要使用专门的SQL软件进行开发,所以对开发人员的技能水平要求比较高,并且使用错误可能会抛出不可预知的异常。存储过程涉及到多个数据库对象,使用不当有可能产生不可预知的结果。当数据库结构发生变化时,存储过程也需要进行相应调整,因此,存储过程对数据库的依赖性比较强。开发和维护存储过程需要一定的技术水平,对于小型数据库来说,使用存储过程的必要性较小。存储过程的执行需要对存储过程进行编译,对于频繁修改的存储过程,可能会影响数据库的性能。五、存储过程的示例及示例解析1、GaussDB存储过程语法格式CREATE [ OR REPLACE ] PROCEDURE procedure_name [ ( {[ argname ] [ argmode ] argtype [ { DEFAULT | := | = } expression ]}[,...]) ] [ { IMMUTABLE | STABLE | VOLATILE } | { SHIPPABLE | NOT SHIPPABLE } | {PACKAGE} | [ NOT ] LEAKPROOF | { CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT } | {[ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER | AUTHID DEFINER | AUTHID CURRENT_USER} | COST execution_cost | SET configuration_parameter { [ TO | = ] value | FROM CURRENT } ][ ... ] { IS | AS } plsql_body /--说明:定义存储过程,在SQL语句末,需要输入“/” (执行)。参数说明 •OR REPLACE 当存在同名的存储过程时,替换原来的定义。 •procedure_name 创建的存储过程名称,可以带有模式名。 取值范围:字符串,要符合标识符的命名规范。 •argmode 参数的模式。 须知:VARIADIC用于声明数组类型的参数。 取值范围: IN,OUT,INOUT或VARIADIC。缺省值是IN。只有OUT模式的参数后面能跟VARIADIC。并且OUT和INOUT模式的参数不能用在RETURNS TABLE的过程定义中。 •argname 参数的名称。 取值范围:字符串,要符合标识符的命名规范。 •argtype 参数的数据类型。可以使用%ROWTYPE间接引用表的类型,或者使用%TYPE间接引用表或复合类型中某一列的类型。 取值范围:可用的数据类型。 •IMMUTABLE、STABLE等 行为约束可选项。各参数的功能与CREATE FUNCTION类似,详细说明见CREATE FUNCTION •plsql_body PL/SQL存储过程体。 须知:当在存储过程体中进行创建用户等涉及用户密码相关操作时,系统表及csv日志中会记录密码的明文。因此不建议用户在存储过程体中进行涉及用户密码的相关操作。说明:argname和argmode的顺序没有严格要求,推荐按照argname、argmode、argtype的顺序使用。2、GaussDB存储过程语法示例我们来看几个具有代表性的GaussDB数据库存储过程示例,以进一步了解其编写和使用方式。示例一: 下面是一个简单的GaussDB存储过程示例: --创建一个存储过程。CREATE OR REPLACE PROCEDURE prc_add ( param1 IN INTEGER, param2 IN OUT INTEGER ) AS BEGIN param2:= param1 + param2; dbe_output.print_line('result is: '||to_char(param2)); END; /--调用此存储过程。SELECT prc_add(2,3);--删除存储过程DROP PROCEDURE prc_add;解析:上面的代码是创建了一个名为prc_add的存储过程,该存储过程有两个参数,一个输入参数param1和一个输入/输出参数param2,数据类型均为整型(INTEGER)。 在存储过程的主体中,对输入/输出参数param2进行了修改,将其值赋为param1 + param2。在调用存储过程时,输入2作为输入参数param1的值,3作为输入/输出参数param2的值。最后,存储过程的结果输出到dbe_output控制台,显示“result is: 5”。总的来说,这个存储过程的功能是将输入参数param1与输入/输出参数param2的值相加,并将相加后的结果输出。它可以在程序中多次使用,以简化代码。示例二 --创建一个存储过程,将带着调用它的用户的权限执行。CREATE TABLE tb1(a integer); CREATE OR REPLACE PROCEDURE insert_data(v integer) SECURITY INVOKER AS BEGIN INSERT INTO tb1 VALUES(v); END; /--调用此存储过程。CALL insert_data(123);--查看结果select * from tb1;--删除存储过程DROP PROCEDURE insert_data;解析:上述代码实际上创建了一个带有一个输入参数的存储过程insert_data,并将其定义为以调用者的权限来运行。当调用该存储过程时,将传递一个整数参数作为输入,该参数将插入一个新行到tb1表中,该新行的值为该整数。然后通过执行select语句查看tb1表中的所有数据行。执行完整段代码后,将看到只有一行数据,该行的值为123,这是由insert_data存储过程插入的。3、存储过程的调用方法存储过程的调用方法主要有两种:通过客户端请求调用和通过触发器自动调用。通过客户端请求调用通常是手动调用,通常使用以下两种方法调用存储过程: 1)CALL语句CALL stored_procedure_name(…)2)SELECT语句SELECT stored_procedure_name(…)通过触发器自动调用通常是在特定操作的情况下自动执行存储过程。例如,当插入一条记录时,可以设置触发器来自动执行存储过程。七、总结本文详细介绍了GaussDB存储过程的使用场景、使用优缺点、示例及示例解析、调用方法等内容。使用存储过程可以提高效率、可维护性,同时具备良好的安全性能。在使用存储过程之前,我们需要充分了解其使用优缺点,从而在实际开发过程中进行有针对性的选择。只有深入了解GaussDB的存储过程的使用方法和技巧,才能在开发过程中得心应手,更好地配合GaussDB实现高效的数据管理和业务处理。对于需要频繁重复执行的SQL语句,我们可以将其封装成一个存储过程,方便管理和提高效率。当存储过程执行达到一定规模时,我们需要注意存储过程的维护和优化,以确保存储过程的执行性能。作为一个高可靠性的全球化分布式关系型数据库,华为云数据库GaussDB提供了丰富的存储过程支持,为存储过程的开发、管理和执行提供了更多的优化策略和高可用性保障。本次介绍就到此,欢迎大家测试、交流!
  • 本指导书适用于在华为云部署购买GaussDB数据库,通过该指导书可以顺利完成GaussDB数据库在华为云的购买
    简介本指导书适用于在华为云部署购买GaussDB数据库,通过该指导书可以顺利完成GaussDB数据库在华为云的购买。内容描述本实验指导书主要内容为华为云购买GaussDB数据库。实验环境说明组网说明 本实验环境为华为云环境,需要购买GaussDB数据库。设备介绍 为了满足数据库原理与实践课程实验需要,建议每套实验环境采用以下配置:设备名称、型号与版本的对应关系如下:设备明细表设备名称设备型号软件版本数据库GaussDB 4 核16 GB1 GaussDB数据库购买1.1 实验介绍1.1.1 关于本实验本实验主要描述华为云GaussDB数据库的购买。1.1.2 实验目的掌握华为云购买GaussDB数据库。1.2 购买GaussDB数据库1.2.1 登录华为云步骤 1登录华为云官网。 进入华为云官网,输入账号及密码,登录。1.2.2 购买华为云GaussDB数据库步骤 1进入控制台,选择区域“广州-友好用户环境”。在左侧图标栏,单击服务列表图标,选择云数据库GaussDB。步骤 2进入数据库购买界面,选择GaussDB,然后购买数据库实例。步骤 3配置数据库。 计费模式选择按需计费,区域选择华南-广州-友好用户环境,实例名称按需修改,数据库版本选择基础版,其他保持默认。其余默认即可,默认端口号为8000,并输入数据库密码。参数模板默认即可,标签可以不填,单击立即购买。在确认页面,确认所购买实例是否为广州-友好用户环境下的免费实例。确认后,单击“提交”提交订单。请务必确认金额后再购买。提交完成后,回到实例界面。等待数据库创建。等待10至20分钟后,数据库创建成功。购买成功! 注意:本次购买数据库服务的价格为公测价格,具体价格以华为云官网为准。
  • [问题求助] SQL中含大写别名,查询结果会转成小写
    SQL中含大写别名,查询结果会转成小写,导致字段匹配不上,其他数据库没有这种处理,为何会有这种设计?该如何解决?
  • [热门活动] 华为布道师活动:openGauss的AI特性讲座1
    11月16日,华为开发者布道师活动-openGuass的AI特性在电子科技大学清水河校区立人楼B101成功举行。本次活动邀请了电子科技大学计算机科学与工程学院教授、华为开发者布道师生态发展计划教师布道师孙明老师作为主讲嘉宾。孙老师深入介绍了openGauss数据库AI4DB部分的内容,详细介绍了X-Tuner:参数调优与诊断 、SQLdiag慢SQL发现 、Index-advisor:索引推荐 、Anomaly-detection:数据库指标采集、预测与异常监控 、PredictorAI查询时间预测等openGauss数据库与人工智能融合的技术。最后带领在场的开发者同学们在安装完成的openGauss数据库上,使用AI4DB的功能,对数据库参数进行优化,对TPCH测试中的SQL语句进行优化。
总条数:952 到第
上滑加载中