gaussdb200存储过程

  • 声明部分:声明PL/SQL用到的变量,类型及游标,以及局部的存储过程和函数。

    DECLARE
    
  • 执行部分:过程及SQL语句,程序的主要部分。必选。

    BEGIN
    
  • 执行异常部分:错误处理。可选。

    EXCEPTION
    
  • 结束

    END;
    /
    
  • 存储过程简单示例

    DECLAREvar varchar(20);num1 integer;
    BEGINvar := 'xiniu';dbms_output.put_line('hello '||var);num1 := 1/0;EXCEPTIONWHEN division_by_zero THENRAISE NOTICE 'caught division_by_zero';
    END;
    /
    

  • 存储过程变量声明与赋值

    DECLARE
    -- 变量声明并赋值VAR1 integer := 1;
    -- 变量声明VAR2 varchar(20);
    BEGIN-- dbms_output.put_line为打印到控制台语句,|| 为字符串拼接dbms_output.put_line('变量var1声明时的初始值:'||VAR1);-- 为变量赋值VAR1 := 2;VAR2 := VAR1 * 100;dbms_output.put_line('变量var1重新赋值后的值:'||VAR1);dbms_output.put_line('变量var2的值:'||VAR2);
    END;
    /

  • 调用语句

    -- 创建存储过程customer_address_procedure
    CREATE OR REPLACE PROCEDURE customer_address_procedure
    (
    -- 没有带输入输出关键字的字段是输入字段
    ca_address_sk_in     NUMBER(6),
    -- out 关键字代表是输出字段
    sk_sum out NUMBER(8,2),
    sk_cnt out INTEGER
    )
    IS
    BEGIN
    -- 使用into关键字为后面的变量赋值
    SELECT sum(ca_address_id), count(*) INTO sk_sum, sk_cnt FROM myschema.customer_address where ca_address_sk = ca_address_sk_in;
    END;
    /-- 创建存储过程customer_address_procedure2
    CREATE OR REPLACE PROCEDURE customer_address_procedure2
    AS
    -- 声明变量
    v_num NUMBER(8,2);
    v_sum INTEGER;
    BEGIN
    -- 调用语句 并且给两个变量赋值
    customer_address_procedure(1, v_sum, v_num);
    -- 打印输出
    dbms_output.put_line(v_sum||'#'||v_num);
    -- 返回语句
    RETURN;
    END;
    /-- 调用存储过程customer_address_procedure2.
    CALL customer_address_procedure2();-- 清除存储过程
    DROP PROCEDURE customer_address_procedure2;
    DROP PROCEDURE customer_address_procedure;-- 创建函数func_return.
    CREATE OR REPLACE FUNCTION func_return returns void
    language plpgsql
    AS $$
    DECLARE
    v_num INTEGER := 1;
    BEGIN
    dbms_output.put_line(v_num);
    -- 返回语句
    RETURN;
    END $$;-- 调用函数func_returnCALL func_return();-- 清除函数DROP FUNCTION func_return;
    

gaussdb200函数与返回值

  • 无参函数声明,指定类型返回

    -- 无参函数 返回类型为integer
    CREATE OR REPLACE FUNCTION void_func() RETURNS integer
    -- 必须指定过程语言(PL/PGSQL)
    language plpgsql
    AS $$
    DECLARE
    -- 声明一个int类型变量并赋初始值为0
    res integer := 0;
    BEGIN
    -- 循环1到10FOR i IN 1 .. 10LOOP-- 给res赋值res:=res + i;dbms_output.put_line('i:'||i);dbms_output.put_line('当前res值:'||res);END LOOP;-- 返回resRETURN res;
    END $$;-- 调用函数
    call void_func();-- 删除函数
    drop function void_func();
    

  • 有参函数构建

    -- 创建一张临时表并插入数据
    CREATE TABLE t1(a int);
    INSERT INTO t1 VALUES(1),(10),(100),(1000),(10000);-- 创建有参函数
    create or replace function func(insert_data int) returns void
    language plpgsql
    as $$
    begin
    -- 插入数据
    insert into t1 values (insert_data);
    end $$;
    -- 调用函数
    call func(100000);
    -- 查询表
    select * from t1;
    -- 删除函数
    drop function func;
    -- 清除表
    drop table t1;
    

存储过程操作分区

  • 创建分区
-- 创建测试表
CREATE TABLE myschema.procedure_opt_partition
(pk                  integer                  NOT NULL   ,datadate            date                     NOT NULL   ,col1                character(10)                       ,col2                character varying(60)               ,col3                character(15)
)
TABLESPACE xiniu
DISTRIBUTE BY HASH (pk)
PARTITION BY RANGE (datadate)
(PARTITION p_10000101 VALUES LESS THAN('10000101')
)
ENABLE ROW MOVEMENT;
-- 需求说明:
-- 如上表每天有一个分区,使用datadate作为分区字段,如果一次性创建好未来若干年的分区,对索引影响较大,所以我们每天创建分区,此时就使用存储过程来创建。
DROP FUNCTION IF EXISTS add_partition(varchar(10),varchar(100),varchar(10),varchar(10));
CREATE OR REPLACE FUNCTION add_partition(schema_name varchar(10),table_name varchar(100),partition_name varchar(10), batch_date varchar(10))
RETURNS void AS  $$
DECLAREV_SQL1 TEXT;V_SQL2 TEXT;V_RETURN TEXT;V_RETURN2 TEXT;
BEGINraise notice 'jedge partiton exists or no !';V_SQL1 = 'select count(1) from DBA_TAB_PARTITIONS where lower(table_name)='''||table_name||''' and lower(schema)='''||schema_name||''' and partition_name='''||partition_name||'''';raise notice 'jedge partition sql:%',V_SQL1;EXECUTE V_SQL1 INTO V_RETURN;raise notice 'jedge table result:%',V_RETURN;if V_RETURN = 0 thenV_SQL2 = 'alter table '||schema_name||'.'||table_name||' add partition '||partition_name||' values less than  (date'''||batch_date||''')';raise notice 'add partition sql:%',V_SQL2;EXECUTE V_SQL2;end if;
END
$$ LANGUAGE plpgsql;
-- 调用
call add_partition('myschema','procedure_opt_partition','p_20210609','20210609');
-- 查询分区
select * from DBA_TAB_PARTITIONS where lower(table_name)= 'procedure_opt_partition' and lower(schema)= 'myschema';
-- 清除表
drop table myschema.procedure_opt_partition;

海汼部落原创文章,原文链接:http://www.hainiubl.com/topics/75661

gaussdb200 存储过程相关推荐

  1. gaussdb200 实操

    连接gaussdb 切换用户 su - omm 加载环境变量 source ${BIGDATA_HOME}/mppdb/.mppdbgs_profile 连接数据库 gsql -d postgres ...

  2. hql调用mysql存储过程_hibernate调用mysql存储过程

    在mysql中创建两个存储过程,如下: 1.根据id查找某条数据: 1 CREATE PROCEDURE `findEmpById`(IN id INTEGER(11))2 begin3      s ...

  3. mysql 分号 存储过程_MySql 存储过程

    自动增长列.字段值唯一性约束 create table aa( id int auto_increment primary key, sname varchar(32) unique ); inser ...

  4. 常用MySQL函数存储过程_解析MySQL存储过程、常用函数代码

    mysql存储过程的概念: 存储在数据库当中可以执行特定工作(查询和更新)的一组SQL代码的程序段. mysql函数的概念: 函数是完成特定功能的SQL语句,函数分为内置函数和自定义函数(user-d ...

  5. oracle 存储过程 状态,查看ORACLE中正在运行的存储过程 | 学步园

    1.如何查看ORACLE中正在运行的存储过程 select owner,name from v$db_object_cache where type like '%PROCE%' and locks ...

  6. MySQL 学习笔记(6)— 存储过程创建、调用、删除以及带参数的存储过程

    1. 存储过程总结 存储过程是一种存储在数据库中的程序.它可以包含多个 SQL 语句,并提供许多过程语言的功能,例如变量定义.条件控制语句.循环语句.游标以及异常处理等. 1.1 存储过程优点 实现代 ...

  7. SER SERVER存储过程

    Transact-SQL中的存储过程,非常类似于C#语言中的方法,可以重复调用.当存储过程执行一次后,可以将语句存储到缓存中,这样下次执行的时候直接使用缓存中的语句.这样就可以提高存储过程的性能. 一 ...

  8. MySQL 存储过程传参之in, out, inout 参数用法

    存储过程传参:存储过程的括号里,可以声明参数. 语法是 create procedure p([in/out/inout] 参数名  参数类型 ..) in :给参数传入值,定义的参数就得到了值 ou ...

  9. SQL Server存储过程输入参数使用表值

    在2008之前如果我们想要将表作为输入参数传递给SQL Server存储过程使比较困难的,可能需要很多的逻辑处理将这些表数据作为字符串或者XML传入. 在2008中提供了表值参数.使用表值参数,可以不 ...

最新文章

  1. html5字体颜色自动转换,【转】js里alert里的字体颜色怎么设置:字体颜色方法;fontcolor(color)...
  2. alert中添加表格_Excel设置表格边框的几种方法,还有自动添加边框哟
  3. 《移动项目实践》实验报告——Android设备操作
  4. Spring MVC 配置--解剖
  5. 使用JS实现2048小游戏
  6. types是什么意思中文翻译成_types 和 @types 是什么?
  7. java 封装 继承 堕胎_Java的继承、封装和多态
  8. JDK源码解析之 java.lang.Long
  9. struts2值栈分析
  10. linux buffer cache 过高_工作中经常用的linux命令 free
  11. access建立两个字段唯一索引_面试官:谈谈你对mysql索引的认识?
  12. Go database/sql 教程
  13. Intellij IDEA 看源码必备的技能!
  14. paip.提升性能--多核cpu中的java/.net/php/c++编程
  15. 协议分析_qvod_获取快播视频的下载地址_20120203
  16. 体验一命通关 - Java技能树测评
  17. 歌曲:酒干倘卖无 背后的故事
  18. 高德地图导航功能审核被拒
  19. 【react】This synthetic event is reused for performance reasons.
  20. 人事管理系统——考勤系统需求分析

热门文章

  1. python 我的Tkinter笔记
  2. img的title和alt有什么区别
  3. [weibo spider] 微博 id 和 mid 互相转换 Python
  4. c语言报告程序分析报告,C语言程序设计报告
  5. centos离线下载依赖rmp包
  6. 微信小程序 退款 证书
  7. 正在调查!华南理工大学计算机学院院长篡改考研成绩!
  8. luogu P6476 [NOI Online 2 提高组]涂色游戏color
  9. 用树莓派搭建全功能NAS服务器(06):自带穿透的文件同步工具
  10. 海康读码器使用操作步骤(本文以500万像素读码器为例)