Stored procedures in PostgreSQL

select 存储过程,在现了解的情况,还是没有mysql,sqlserver等好写好用。

sql 复制代码
--postgreSQL 11.0 以下版本
create or replace FUNCTION procInsertSchool
(
    pSchoolId Char(5),
    pSchoolName VarChar(100),
    pSchoolTelNo VarChar(8)
)
RETURNS void
language plpgsql
as $$
begin
IF NOT EXISTS (SELECT * FROM School WHERE SchoolId=pSchoolId)  then-- 存在相同的名称不添加  and SchoolId=@SchoolId  and SchoolName=@SchoolName
INSERT INTO School
(
    SchoolId ,
    SchoolName ,
    SchoolTelNo
)
    VALUES
(
    pSchoolId ,
    pSchoolName ,
    pSchoolTelNo
);
end if;
end;
$$
sql 复制代码
---postgreSQL 11.0 以上版本
DROP PROCEDURE IF EXISTS procInsertSchoolOutput;

CREATE PROCEDURE procInsertSchoolOutput
(
    pSchoolName NVarChar(5),
    pSchoolTelNo VarChar(500),
    pSchoolId int  inout
)
language plpgsql
as $$
begin
IF NOT EXISTS (SELECT * FROM School WHERE SchoolName=pSchoolName)    -- 如果存在相同的记录,不添加
INSERT INTO School
(
    SchoolName,
    SchoolTelNo
)
    VALUES
(
    pSchoolName ,
    pSchoolTelNo
 
);
 
end;
$$
sql 复制代码
--返回值 inout
create or replace procedure geovindustat(
   inout total int default 0
)
as
$$
begin
  select count(*) into total from geovindu;
end;
$$
language plpgsql;
 
call geovindustat();
 
 
-- 函数查询
CREATE OR REPLACE FUNCTION fungeovindu()
RETURNS table(tid int,tname varchar(50),TelNo varchar(11))
AS $$
BEGIN
    RETURN QUERY(SELECT * FROM geovindu);
END;
$$ LANGUAGE plpgsql
 
select * from fungeovindu();

-- 查询
 
DROP PROCEDURE IF EXISTS procSelectSchool
 
CREATE or replace PROCEDURE procSelectSchool
(
    pStudentId char(5)
)
language plpgsql SECURITY DEFINER
as $$
DECLARE schoolrow record;
begin
for schoolrow in (SELECT * FROM School WHERE SchoolId = pStudentId)
    loop
RAISE NOTICE 'Id is : % , SchoolName is : %', schoolrow."SchoolId",schoolrow."SchoolName"
    end loop;
end;
$$
相关推荐
余槐i6 小时前
PostgreSQL 函数索引报错 must be immutable:3种绕法与代价
数据库·后端·sql·postgresql·性能优化
数据库小学妹6 小时前
PostgreSQL表膨胀怎么办?autovacuum清不动的根因与排查命令
数据库·postgresql·表膨胀·mvcc·数据库运维
mister_guo6 小时前
MySQL-1267错误:排序规则冲突的原因与解决方案
数据库·mysql
骇客野人6 小时前
在麒麟操作系统上 分别安装 jdk1.8, 达梦数据库,redis ,memcache 的操作实施方案和步骤
数据库·redis·memcached
美狐美颜SDK开放平台8 小时前
直播APP如何实现美白滤镜功能?视频美颜SDK技术开发方案详解
前端·数据库·人工智能·音视频·美颜sdk·直播美颜sdk·视频美颜sdk
花间相见9 小时前
【计算基础|MySQL01】【上手】安装连接、数据类型与建库建表
数据库·后端
花间相见9 小时前
【计算基础|MySQL02】【上手】SQL 增删改查
数据库·后端
ITxiaobing202310 小时前
IP 库与 AppsFlyer 国家/地区数据不一致,如何系统地对账?
数据库·网络协议·tcp/ip
这个DBA有点耶10 小时前
从时间到语义:时序数据库与向量数据库的核心机制、选型与多模融合趋势
数据库·mysql·架构
对空六课10 小时前
RFM分层边界变化的回溯计算
大数据·服务器·前端·数据库·人工智能·算法·数据分析