gaussdb200 存储过程

gaussdb200存储过程

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

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

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

    EXCEPTION
    
  • 结束

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

    DECLARE
    	var varchar(20);
    	num1 integer;
    BEGIN
    	var := 'xiniu';
    	dbms_output.put_line('hello '||var);
    	num1 := 1/0;
    	EXCEPTION
        WHEN division_by_zero THEN
            RAISE NOTICE 'caught division_by_zero';
    END;
    /
    

file

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

    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;
    /
    	
    

file

  • 调用语句

    -- 创建存储过程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_return
     CALL func_return();
    
    -- 清除函数
     DROP FUNCTION func_return;
    

file

file

gaussdb200函数与返回值

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

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

file

  • 有参函数构建

    -- 创建一张临时表并插入数据
    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;
    

file

存储过程操作分区

  • 创建分区
-- 创建测试表
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  $$
DECLARE
    V_SQL1 TEXT;
    V_SQL2 TEXT;
    V_RETURN TEXT;
    V_RETURN2 TEXT;
BEGIN
    raise 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 then
        V_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;

file

file

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

  • 6
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 在MATLAB中,可以使用"random"函数来生成平稳高斯过程。首先,我们需要确定高斯过程的均值和协方差函数。均值可以是一个常数或者一个随机过程,协方差函数描述了高斯过程的平稳性质。 生成平稳高斯过程的步骤如下: 1. 定义均值函数:可以选择一个常数作为均值函数,例如0,或者选择其他适当的随机过程。 2. 定义协方差函数:根据高斯过程的性质,我们需要定义一个协方差函数来描述数据的相关性。常见的协方差函数有指数协方差函数、高斯协方差函数、线性协方差函数等。在MATLAB中,可以使用"Covariance"函数来定义协方差函数。 3. 生成随机变量:使用MATLAB中的"random"函数来生成满足特定均值和协方差函数的高斯分布的随机变量。 4. 绘制高斯过程:可以使用MATLAB中的"plot"函数来绘制生成的高斯过程。为了得到平稳过程,我们可以选择绘制多个样本路径,以观察其平稳特性。 总结起来,要在MATLAB中产生平稳高斯过程,首先需要定义高斯过程的均值函数和协方差函数,然后使用"random"函数来生成符合这些性质的随机变量,最后可以使用"plot"函数来可视化生成的高斯过程。 ### 回答2: 在Matlab中生成平稳高斯过程可以通过以下步骤实现。 首先,确保已经加载了Statistics and Machine Learning Toolbox(统计和机器学习工具箱)。 1. 定义高斯过程的平均值函数和协方差函数。平稳高斯过程的平均值函数通常为常数。协方差函数可以选择为各向同性,例如使用指数协方差函数或高斯协方差函数。 2. 创建一个空白的网格,即定义一个时间或空间网格以便生成高斯过程。 3. 使用covariance.m函数来计算协方差矩阵。将之前定义的协方差函数作为输入参数传递给covariance.m函数,并将生成的协方差矩阵存储在一个变量中。 4. 使用mvnrnd.m函数生成高斯随机变量。传递协方差矩阵和一个均值向量(多个网格点上的平均值)作为输入参数。 5. 可以通过可视化图形来检查生成的高斯过程。使用meshgrid()函数来创建一个网格图,并使用surfc()函数来绘制三维图形。 这样,就可以利用Matlab生成平稳高斯过程的样本。 ### 回答3: MATLAB可以通过使用“randn”函数生成平稳高斯过程。平稳高斯过程又称为白噪声过程,是指一种连续时间的随机过程,其中每个时刻的取值都是从高斯分布中独立随机采样得到的。 要生成平稳高斯过程,首先需要定义一个时间向量,表示所需观测的时间点。假设时间向量为t,则可以使用以下代码生成一个平稳高斯过程: ```matlab t = 0:0.1:10; % 定义时间向量,以步长为0.1,从0到10 x = randn(size(t)); % 从高斯分布中生成平稳高斯过程 ``` 在上述代码中,使用“randn”函数生成了一个与时间向量相同大小的随机数向量x,这个向量表示了平稳高斯过程在每个时间点的取值。由于每个时间点的取值是从高斯分布中独立随机采样得到的,所以生成的向量x代表了平稳高斯过程。 生成的平稳高斯过程可以在MATLAB中进行进一步的分析和处理,如绘制过程的图形、计算统计特征等。可以利用MATLAB提供的各种工具和函数对生成的平稳高斯过程进行更深入的研究和分析。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值