• postgres中的函数


    1.编写一个只有入参,没有出参的函数:

    CREATE OR REPLACE FUNCTION add(a NUMERIC, b NUMERIC)
    RETURNS NUMERIC
    AS $$
        SELECT a+b;
    $$ LANGUAGE SQL;

    执行函数:

    [postgres@master ~]$ psql -d mydb -U zhang
    psql (10.5)
    Type "help" for help.
    mydb=> 
    mydb=> 
    mydb=> select add(3,4);
     add 
    -----
       7
    (1 row)

    2.编写一个有入参和出参的函数:

    CREATE OR REPLACE FUNCTION add1(in a NUMERIC, in b NUMERIC,out c numeric)
    AS $$
        SELECT a+b;
    $$ LANGUAGE SQL;

    这里有出参,RETURNS NUMERIC就去掉了。

    执行函数:

    mydb=> select add1(2,4);
     add1 
    ------
        6
    (1 row)
    
    mydb=> select * from add1(2,4);
     c 
    ---
     6
    (1 row)               --可以观察到,显示的列头不一样。

    3.编写一个两个入参,两个出参的函数:

    CREATE OR REPLACE FUNCTION plus_and_minus(IN a INTEGER, IN b NUMERIC, OUT c NUMERIC, OUT d NUMERIC)
    AS $$
        SELECT a-b, a+b;
    $$ LANGUAGE SQL;

    执行函数:

    mydb=> select plus_and_minus(7,5);
     plus_and_minus 
    ----------------
     (2,12)
    (1 row)
    
    mydb=> select * from  plus_and_minus(7,5);
     c | d  
    ---+----
     2 | 12
    (1 row)

    4.编写一个往表里插入数据

    准备操作:

    --创建测试表
    create table student (id integer, name varchar(64));
    create table employees (id integer, age integer);
    --table_new 需要在外部创建
    create table table_new (id integer, name varchar(64), age integer);
    --插入测试数据
    insert into student select generate_series(1, 100), 'lili_' || cast(random()*100 as varchar(2));
    insert into employees select generate_series(1, 50), random()*100;
    select count(*) from student;
    select count(*) from employees;

    过程创建如下:

    create or replace function P_DWA_ERP_LEDGER_JQ_MONTH_NEW( v_mouth varchar(8),  out v_retcode text,  out v_retinfo text,  out v_row_num integer)
    AS 
    $BODY$
    declare
    begin
        insert into table_new(id, name, age) select t.id, t.name, m.age from student t, employees m where t.id=m.id;
    
        GET DIAGNOSTICS V_ROW_NUM := ROW_COUNT;
    
        -- 执行成功后的返回信息
        V_RETCODE := 'SUCCESS';
        V_RETINFO := '结束';
      
        --异常处理
        EXCEPTION
        WHEN OTHERS THEN
            V_RETCODE := 'FAIL';
            V_RETINFO := SQLERRM;
    end;
    $BODY$
    language plpgsql;

    执行过程:

    mydb=> select * from P_DWA_ERP_LEDGER_JQ_MONTH_NEW('12');
     v_retcode | v_retinfo | v_row_num 
    -----------+-----------+-----------
     SUCCESS   | 结束      |        50
    (1 row)
    mydb=> select count(*) from table_new;
     count 
    -------
        50
    (1 row)
  • 相关阅读:
    应用网络电视机顶盒通过宽带网络代替数字电视
    该公众号暂时无法提供服务请稍后再试
    有点坑爹的GDALComputeRasterMinMax函数
    微信硬件平台框架说明及接入流程
    微信硬件设备接入接口协议
    微信思维
    百度SEO建议
    公众平台调整SSL安全策略,请开发者注意升级
    微信支付开发教程
    .net文件分片上传,断点续传
  • 原文地址:https://www.cnblogs.com/hello-wei/p/10156901.html
Copyright © 2020-2023  润新知