首页
学习
活动
专区
圈层
工具
发布

OushuDB-PL 过程语言-PLpgSQL - SQL过程语言

OushuDB兼容PostgreSQL,允许使用除了 SQL 和 C 之外的其他语言编写用户定义的函数。这些其他的 语言通常被称作过程语言(Procedural Language, PL)。...在OushuDB的标准发布中当前有四种过程语言可用: PL/pgSQL、 PL/Perl、 PL/Python以及 PL/Java, 其中PL/pgSQL是默认安装可用的。...另外还有其他过程语言可用,但是它们没有被包括在核心发布中, 如PL/R等,我们可以在第三方开源网站来获取它们的源码。 接下来我们主要看一下 PL/pgSQL - SQL过程语言。...PL/pgSQL - SQL过程语言 PL/pgSQL 是 PostgreSQL 数据库系统的一个可加载的过程语言,它的设计目标是创建一种可加载的过 程语言,可以: 用于创建函数和触发器过程 为 SQL...鉴于以上规则,在PL/pgSQL里直接出现的SQL命令必须在每次执行时均引用相同的表和字段,换句话 说,不能将函数的参数用作SQL命令的表名或字段名。

1.1K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    MongoDB索引顺序导致慢SQL分析过程

    背景 最近监控MongoDB集群的慢日志,发现存在一个查询需要4s左右,返回结果集大部分情况下都为0(相当于SQL空跑),与研发沟通交流后,这个定时将检查已审核账单数据推送到ES中(双11时直接关闭这个功能...,说明这个功能消耗资源) 分析过程 1、业务逻辑 2、账单表 备注:账单结构 _id ObjectId("5f1b7a4af716c61578f73c2e") no "TT92275689399936...账单表字段很少且结构很简单,Java程序多线程间隔拉取数据到ES集群,然后对拉取后的数据进行更新,现在拉取数据平均时间在4s-10s(小分片执行时间在4s,大的分片在10s左右). 4、具体SQL...shard1检查索引key总数为2528071,同时seeks(如果是Oracle,则对应buffer gets很高)表示索引寻址次数此处为什么seeks次数与keysExamined相同,主要原因索引顺序是...RE(索引顺序)导致性能问题(根据索引特性可以直接判断此索引是低效的) 低效表现:(keysExamined:2528071,nReturned:0),接下来分析为什么这个所以性能低。

    1K20

    OushuDB-PL 过程语言-声明

    SQL中的数据类型均可作为PL/pgSQL变量的数据类型,如integer、varchar和char等。2)....如果给出了DEFAULT子句,该变量在进入BEGIN块时将被初始化为该缺省值,否则被初始化为SQL空 值。缺省值是在每次进入该块时进行计算的。...如果PL/pgSQL函数的返回类型为多态类型(anyelement或anyarray),那么函数就会创建一个特殊的 参数:$0。我们仍然可以为该变量设置别名。...拷贝类型: 见如下形式的变量声明: %TYPE表示一个变量或表字段的数据类型,PL/pgSQL允许通过该方式声明一个变量,其类型等同于 variable或表字段的数据类型,见如下示例: 在上面的例子中,...最后需要说明的是,推 荐使用%ROWTYPE的声明方式,这样可以具有更好的可移植性,因为在Oracle的PL/SQL中也存在相同 的概念,其声明方式也为%ROWTYPE。

    1.3K20

    OushuDB-PL 过程语言-基本语句

    赋值: PL/pgSQL中赋值语句的形式为:identIFier := expression,等号两端的变量和表达式的类型或者一致, 或者可以通过PostgreSQL的转换规则进行转换,否则将会导致运行时错误...select_expressions以及 剩余部分和普通SQL一样。 如果将一行或者一个变量列表用做目标,那么选出的数值必需精确匹配目标的结构,否则就会产生运行 时错误。...其中query的写法和普通 的SQL SELECT命令是一样的,只是把开头的关键字SELECT替换成PERFORM,如: \4....执行动态命令: 如果在PL/pgSQL函数中操作的表或数据类型在每次调用该函数时都可能会发生变化,在这样的情况下, 可以考虑使用PL/pgSQL提供的EXECUTE语句:EXECUTE command-string...这里需要特别注意的是,该命令字符串将不会发生 任何PL/pgSQL变量代换,变量的数值必需在构造命令字符串时插入到该字符串中。

    72620

    OushuDB-PL 过程语言-控制结构

    RETURN NEXT expression 如果PL/pgSQL函数声明为返回SETOF sometype,其行记录是通过RETURN NEXT命令进行填充的,直 到执行到不带参数的RETURN时才表示该函数结束...因此对于RETURN NEXT而言,它实际上并不从函数 中返回,只是简单地把表达式的值保存起来,然后继续执行PL/pgSQL函数里的下一条语句。...条件: 在PL/pgSQL中有以下三种形式的条件语句。 1). IF-THEN 2)....record_or_row IN query LOOP statements END LOOP [ label ]; 这是另外一种形式的FOR循环,在该循环中可以遍历命令的结果并操作相应的数据,见如下示例: PL...异常捕获: 在PL/pgSQL函数中,如果没有异常捕获,函数会在发生错误时直接退出,与其相关的事物也会随之回 滚。我们可以通过使用带有EXCEPTION子句的BEGIN块来捕获异常并使其从中恢复。

    3.8K20

    SQL 的执行顺序

    了解 SQL 的执行顺序非常有价值,它可以让我们写出语法正确的 SQL,帮助我们简化编写新查询的过程。 本文将在 MySQL 的基础上,介绍查询语句的执行顺序。...: FROM / JOIN 和所有 ON 条件 WHERE GROUP BY HAVING SELECT ORDER BY LIMIT 以上是 SQL 标准定义的执行顺序。...这些优化可能会改变实际的执行顺序,但它们最终必须返回与以默认的执行顺序运行查询的结果相同。 按照执行顺序的规则,排在后面的子句产生的结果不能被前面的子句引用。...比如下面这条 SQL ,看起来像是 SELECT 子句的别名被 GROUP BY 子句引用。...SELECT CONCAT(job, '|', deptno) AS job_dept, COUNT(*) FROM emp GROUP BY job_dept 那是不是说这条 SQL 破坏了前面定义的执行顺序呢

    3K31

    MySQL执行过程以及顺序

    本篇博客将来探讨这个问题: 本篇博客的目录 一:MySQL执行过程 二:MySQL执行过程中的状态 三:MySQL执行的顺序 四:总结 一:MySQL执行过程 MySQL整体的执行过程如下图所示: 1.1...囊括了所有的MySQL的所有状态,其中具体的含义如下图: 三:sql的执行顺序 事实上,sql并不是按照我们的书写顺序来从前往后、左往右依次执行的,它是按照固定的顺序解析的,主要的作用就是从上一个阶段的执行返回结果来提供给下一阶段使用...,sql在执行的过程中会有不同的临时中间表,一般是按照如下顺序: 例子: select distinct s.id  from T t join  S s on t.id=s.id where t.name...筛选出找到的数据集 四:总结 本篇博客总结了MySQL的执行过程,以及sql的执行顺序,理解这些有助于我们对sql语句进行优化,以及明白MySQL中的sql语句从写出来到最终执行的轨迹,有助于我们对sql...同时,对于复杂sql的执行过程、书写都会有一定程度的意义。

    2.5K30

    Mysql-SQL执行顺序

    SQL的执行顺序事实上,sql并不是按照我们的书写顺序来从前往后、左往右依次执行的,它是按照固定的顺序解析的,主要的作用就是从上一个阶段的执行返回结果来提供给下一阶段使用,sql在执行的过程中会有不同的临时中间表...,一般是按照如下顺序:例子:select distinct s.id  from T t join  S s on t.id=s.id where t.name="Yrion" group by t.mobile...having count(*)>2  order by s.create_time limit 5;1、from 第一步就是选择出from关键词后面跟的表,这也是sql执行的第一步...group by (按条件关键字分组,剔除重复的) group by是进行分组,对where条件过滤后的临时表Temp3按照固定的字段进行分组,产生临时中间表Temp4, "这个过程只是数据的顺序发生改变...,然后插入临时中间表Temp8,这个过程比较耗费资源 实例说明:这段会将所有temp7临时表中的数据按照创建时间(create_time)进行排序,这个过程也不会有列或者行损失9、limit

    80610

    Oracle sql语句执行顺序

    sql语法的分析是从右到左 一、sql语句的执行步骤: 1)词法分析,词法分析阶段是编译过程的第一个阶段。...四、SQL Select语句完整的执行顺序:  1、from子句组装来自不同数据源的数据; 2、where子句基于指定的条件对记录行进行筛选; 3、group by子句将数据划分为多个分组; 4、使用聚集函数进行计算...SQL语言不同于其他编程语言的最明显特征是处理代码的顺序。在大多数据库语言中,代码按编码顺序被处理。但在SQL语句中,第一个被处理的子句式FROM,而不是第一出现的SELECT。...Oracle中SQL语句执行过程中,Oracle内部解析原理如下:   1、当一用户第一次提交一个SQL表达式时,Oracle会将这SQL进行Hard parse,这过程有点像程序编译,检查语法、表名、...,减少语句的分析时间,通过了解Oracle SQL语句的分析过程可以明白Oracle的内部处理逻辑,并在设计与实现上避免。

    71000

    SQL 语句的执行顺序

    代表与该客服人员通话的客户的 id,也是说,每有一条记录,就代表一个客服与一位客户进行了通话,相同的记录,例如第一行和第七行,代表着 1 号客服与 001 号客户在不同的时间进行了两次通话,问:如下 SQL...SQL 语句的书写顺序如下: SELECT -> FROM -> WHERE -> GROUP BY -> HAVING -> ORDER BY SQL 语句的执行顺序如下: FROM -> WHERE...-> GROUP BY -> HAVING -> SELECT -> ORDER BY 其中 SELECT 和 FROM 是必须的,其他关键词是可选的,这六个关键词的执行顺序 与SQL语句的书写顺序并不是一样的...,而是按照下面的顺序来执行 FROM:需要从哪个数据表检索数据 WHERE:过滤表中数据 GROUP BY:将上面过滤出的数据分组 HAVING:对上面已经分组的数据进行过滤 SELECT:查看结果集中的哪个列...,或列的计算结果 ORDER BY:按照什么样的顺序来查看返回的数据 所以本文开头所说的查询有两种实现的 SQL: # 使用 HAVING 过滤分组中的数据 SELECT id, COUNT(client

    4.1K41

    sql 存储过程

    这样就可以提高存储过程的性能。 存储过程的概念 存储过程Procedure是一组为了完成特定功能的SQL语句集合,经编译后存储在数据库中,用户通过指定存储过程的名称并给出参数来执行。...由于存储过程在创建时即在数据库服务器上进行了编译并存储在数据库中,所以存储过程运行要比单个的SQL语句块要快。...存储过程的优点 1、存储过程允许标准组件式编程 存储过程创建后可以在程序中被多次调用执行,而不必重新编写该存储过程的SQL语句。...2、存储过程能够实现较快的执行速度 如果某一操作包含大量的T-SQL语句代码,分别被多次执行,那么存储过程要比批处理的执行速度快得多。...3、存储过程减轻网络流量 对于同一个针对数据库对象的操作,如果这一操作所涉及到的T-SQL语句被组织成一存储过程,那么当在客户机上调用该存储过程时,网络中传递的只是该调用语句,否则将会是多条SQL语句。

    1.9K20

    SQL存储过程

    什么是存储过程?...存储过程可以说是一个记录集吧,它是由一些T-SQL语句组成的代码块,这些T-SQL语句代码像一个方法一样实现一些功能(对单表或多表的增删改查),然后再给这个代码块取一个名字,在用到这个功能的时候调用他就行了...存储过程的好处? 1.由于数据库执行动作时,是先编译后执行的。然而存储过程是一个编译过的代码块,所以执行效率要比T-SQL语句高。...2.一个存储过程在程序在网络中交互时可以替代大堆的T-SQL语句,所以也能降低网络的通信量,提高通信速率。 3.通过存储过程能够使没有权限的用户在控制之下间接地存取数据库,从而确保数据的安全。...--创建存储过程 CREATE PROCEDURE 存储过程名称 AS 需要查询的SQL语句 GO --调用存储过程 EXECUTE 存储过程名称 --删除存储过程 drop procedure 存储过程名称

    1.2K10
    领券