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('');
v_retcode | v_retinfo | v_row_num
-----------+-----------+-----------
SUCCESS | 结束 | 50
(1 row)
mydb=> select count(*) from table_new;
count
-------
50
(1 row)

postgres中的函数的更多相关文章

  1. postgres中几个复杂的sql语句

    postgres中几个复杂的sql语句 需求一 需要获取一个问题列表,这个问题列表的排序方式是分为两个部分,第一部分是一个已有的数组[0,579489,579482,579453,561983,561 ...

  2. Postgres中postmaster代码解析(上)

    之前我的一些文章都是在说Postgres的一些查询相关的代码.但是对于Postgres服务端是如何启动,后台进程是如何加载,服务端在哪里以及如何监听客户端的连接都没有一个清晰的逻辑.那么今天我来说说P ...

  3. Postgres中postmaster代码解析(中)

    今天我们对postmaster的以下细节进行讨论: backend的启动和client的连接请求的认证 客户端取消查询时的处理 接受pg_ctl的shutdown请求进行shutdown处理 2.与前 ...

  4. 聊聊Postgres中的IPC之SI Message Queue

    在 PostgreSQL中,每一个进程都有属于自己的共享缓存(shared cache).例如,同一个系统表在不同的进程中都有对应的Cache来缓存它的元组(对于RelCache来说缓存的是一个Rel ...

  5. Oracle 中 decode 函数用法

    Oracle 中 decode 函数用法 含义解释:decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值) 该函数的含义如下:IF 条件=值1 THEN RETURN(翻译 ...

  6. mysql中now()函数的使用,还有oracle的sysdate,可能埋下的坑

    mysql中now()函数的使用,还有oracle的sysdate 在需求中如果系统中药添加当前操作的时间那么很简单的一个操作在写sql的时候直接在这个字段对应的位置写上now()函数就可以了,这样就 ...

  7. 程序代码中退出函数exit()与返回函数return ()的区别

    程序代码中退出函数exit()与返回函数return ()的区别   exit(0):正常运行程序并退出程序:   exit(1):非正常运行导致退出程序:   return():返回函数,若在主函数 ...

  8. mysql中find_in_set()函数的使用

    首先举个例子来说: 有个文章表里面有个type字段,它存储的是文章类型,有 1头条.2推荐.3热点.4图文等等 .现在有篇文章他既是头条,又是热点,还是图文,type中以 1,3,4 的格式存储.那我 ...

  9. QT中使用函数指针

    想仿命令行,所以定义了一个类,让一个String 对应一个 function,将两者输入list容器. 类中定义了 QString commandStr; void (MainWindow::*com ...

随机推荐

  1. Centos7 Devstack [Rocky] 重启后无法联网

    部署devstack-rocky版本后网络,可以 Ping 通自己的 IP,但 Ping 不同网关,ping不通同网段主机,查看网卡和ovs信息如下 解决 第一步 按造网上教程,修改br-ex,ens ...

  2. git获取特定版本的代码

    比如取1.80版本 git clone -b https://github.com/passedbylove/poiji.git

  3. MySQL乱码的原因和设置UTF8数据格式

    https://segmentfault.com/a/1190000018662023 MySQL使用时,有一件很痛苦的事情肯定是结果乱码.将编码格式都设置为UTF8可以解决这个问题,我们今天来说下为 ...

  4. 6-2 shell编程基础

    shell编程基础 编程基础 Linus:Talk is cheap, show me the code 程序和编程风格 程序: 程序:算法+数据结构 数据:是程序的核心 算法:处理数据的方式 数据结 ...

  5. PJzhang:如何在裸奔的年代找到一些遮羞布

    猫宁!!! 很久以前的一篇,搬过来. 我一直在“裸奔”,而且很久了,只是不太愿意承认. 想起了“皇帝的新装”,好奇何种经历和灵感让安徒生写出了如此精彩的故事. 一次百度了一个商品,不久接到了大规模电话 ...

  6. CentOS下Subversion(SVN)的快速安装与配置

    如果你是一个软件开发者,你一定对Subversion不会感到陌生.Subversion是一个自由开源的版本控制系统.在Subversion管理下,文件和目录可以超越时空.Subversion将文件存放 ...

  7. java初学者编译简单的计算机

    package com.yj.test; import java.awt.BorderLayout; import java.awt.Font; import java.awt.GridLayout; ...

  8. jmeter-JDBC 连接池设置

  9. WSL升级到wsl2并使用strace

    安装wsl的方法,网上很多,一般都ok.这里主要提几个问题: 1.配置securecrt来支持ssh登录. 2.使用strace. 3.使用docker. 由于wsl不支持strace,一直盼着能升级 ...

  10. .Net Core控制台应用加载读取Json配置文件

    ⒈添加依赖 Microsoft.Extensions.Configuration Microsoft.Extensions.Configuration.FileExtensions Microsoft ...