我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Postgresql 存储过程

短信预约 信息系统项目管理师 报名、考试、查分时间动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Postgresql 存储过程

Postgresql 存储过程

1、没有定义 plpsql

createlang -d tms plpgsql

2、找出不连续的SN

DROP FUNCTION IF EXISTS sn_miss(IN order_name TEXT, IN pcline TEXT);
CREATE OR REPLACE FUNCTION sn_miss(IN order_name TEXT, IN pcline TEXT) 
RETURNS TABLE(sn_series TEXT)
AS $$
DECLARE
    r RECORD;
    sn_min INTEGER := 0;
    sn_max INTEGER := 0;
    sql varchar; 
    sn_base varchar;
BEGIN
    EXECUTE 
        "select 
        min(sn) as min_sn, max(sn) as max_sn 
        from 
        burn_log 
        where 
        order_number = $1 and pc_no = $2"
        USING order_name, pcline
        INTO r;
        
    sn_base := substr(r.min_sn, 1, 12);
    sn_min := to_number(substr(r.min_sn, 13, 8), "00000000");
    sn_max := to_number(substr(r.max_sn, 13, 8), "00000000");

    return QUERY EXECUTE 
            "select 
            * 
            from 
            (select $1 || sn_series from generate_series($2, $3, 1) as t(sn_series)) as A(sn_series) 
            where 
            A.sn_series 
            not in 
            (select sn from burn_log where order_number = $4 and pc_no = $5);"
        USING  sn_base, sn_min, sn_max, order_name, pcline;
END;
$$
LANGUAGE PLPGSQL VOLATILE;

3、修复产线中不连续的SN

DROP FUNCTION IF EXISTS tms_pdline_fix(IN order_name TEXT, IN pcline TEXT);
CREATE OR REPLACE FUNCTION tms_pdline_fix(IN order_name TEXT, IN pcline TEXT) 
RETURNS TABLE(sn TEXT)
AS $$
DECLARE
    r RECORD;
    sn_min INTEGER := 0;
    sn_max INTEGER := 0;
    sql varchar; 
    sn_base varchar;
BEGIN
    EXECUTE 
        "select min(sn) as min_sn, max(sn) as max_sn from burn_log where order_number = $1 and pc_no = $2;"
        USING order_name, pcline
        INTO r;
        
    sn_base := substr(r.min_sn, 1, 12);
    sn_min := to_number(substr(r.min_sn, 13, 8), "00000000");
    sn_max := to_number(substr(r.max_sn, 13, 8), "00000000");

    EXECUTE 
        "create temp table 
        pl_sn_temp 
        as
        select 
        * 
        from 
        (select $1 || sn from generate_series($2, $3, 1) as t(sn)) as A(sn) 
        where 
        A.sn 
        not in 
        (select sn from burn_log where order_number = $4 and pc_no = $5);"
    USING  sn_base, sn_min, sn_max, order_name, pcline;
    
    for r in EXECUTE "select * from pl_sn_temp" loop
        EXECUTE
            "insert into
            burn_log 
            (order_number, pc_no, sn, times_success, dt_success) 
            values 
            ($1, $2, $3, 1, $4);"
        USING order_name, pcline, r.sn, to_timestamp(19700101);
    end loop;
    
    EXECUTE
        "UPDATE 
        pcline 
        SET 
        success_number = (
            SELECT 
            COUNT(*) 
            FROM 
            burn_log 
            WHERE 
            order_number = $1 and pc_no = $2
            )
        WHERE
        order_number = $1 and pc_no = $2"
        USING order_name, pcline;
    
    return QUERY EXECUTE "select * from pl_sn_temp";
    EXECUTE
        "DROP TABLE IF EXISTS pl_sn_temp";
END;
$$
LANGUAGE PLPGSQL VOLATILE;

4、实例

时间:2018-8-15
订单:DD07ME180709014-6
产线:2
原因:系统没有D盘,导致烧录日志无法上报系统,而出现烧录成功但后台没有记录。
解决:

insert into 
burn_log
(order_number, pc_no, sn, times_success, dt_success)
values
("DD07ME180709014-6", "2", "98.00-07.24-10163912", 1, now());

select tms_pdline_fix("DD07ME180709014-6", "2");

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Postgresql 存储过程

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Postgresql 存储过程

1、没有定义 plpsqlcreatelang -d tms plpgsql2、找出不连续的SNDROP FUNCTION IF EXISTS sn_miss(IN order_name TEXT, IN pcline TEXT);CREATE OR REPL
Postgresql 存储过程
2021-03-04

PostgreSQL中支持存储过程吗

是的,PostgreSQL支持存储过程。存储过程是一组预先编译的SQL语句,可以在数据库中进行重复性操作。通过存储过程,用户可以将常用的操作逻辑封装起来,提高数据库的性能和可维护性。用户可以使用PL/pgSQL语言来编写存储过程,并在Pos
PostgreSQL中支持存储过程吗
2024-04-09

PostgreSQL存储过程源码分析

这篇文章主要介绍了PostgreSQL存储过程源码分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇PostgreSQL存储过程源码分析文章都会有所收获,下面我们一起来看看吧。游标PL/pgSQL 游标允许我们
2023-07-05

PostgreSQL中的存储过程是什么

存储过程是一组预编译的SQL语句和逻辑操作,通过一个命名的过程存储在数据库服务器中,用于执行特定的任务或操作。存储过程可以接受输入参数,执行一系列SQL语句并返回结果。在 PostgreSQL 中,存储过程可以通过 PL/pgSQL 或其他
PostgreSQL中的存储过程是什么
2024-04-09

存储过程

存储过程是数据库对象之一,存储过程可以理解成数据库的子程序,在客户端和服务器端可以直接调用它。触发器是与表直接关联的特殊的存储过程,是在对表记录进行操作时触发的。存储过程放在字典里,可以在不同用户和应用程序之间共享,并可以实现程序的优化和重用。存储过程的优点:
存储过程
2015-02-05

mysql存储过程

-- 创建清除过期积分存储过程DELIMITER //DROP PROCEDURE IF EXISTS reportUrl //CREATE PROCEDURE reportUrl()BEGIN-- 定义变量DECLARE s INT DEFAULT 0;D
mysql存储过程
2019-07-21

MySQL 存储过程

参考地址1:https://blog.csdn.net/yanluandai1985/article/details/83656374 参考地址2:https://www.runoob.com/w3cnote/mysql-stored-procedure.ht
2016-08-26

plsql储存过程

第九章  存储过程 初识存储过程  存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行
plsql储存过程
2015-05-06

怎么在PostgreSQL中创建触发器和存储过程

在PostgreSQL中创建触发器和存储过程需要使用SQL语句来实现。以下是创建触发器和存储过程的基本步骤:创建存储过程:CREATE OR REPLACE FUNCTION my_function()RETURNS VOID AS $$
怎么在PostgreSQL中创建触发器和存储过程
2024-03-12

oracle存储过程转达梦8存储过程时踩过的坑

达梦存储过程的语法与oracle的高度相似,但有好多细节还是有差异。我在这次项目迁移中踩过不少小坑,在这里给大家分享一下。说明一下,我用的版本是达梦8,迁移时碰到的问题有些我已经反馈给达梦的官方群管理员,估计以后会有修复。rpad问题达梦的rpad函数,计算中
oracle存储过程转达梦8存储过程时踩过的坑
2021-04-19

存储过程用法

创建无参存储过程1 create procedure proc_test012 as3 begin4 select * from myrptdetail5 end执行无参存储过程exec proc_test01结果  创建带参存储过程1 create p
存储过程用法
2017-09-20

3. SQL -- 存储过程

存储过程在Sql Server中,可以定义子程序存放在数据库中,这样的子程序称为存储过程,它是数据库对象之一.一存储过程的优点:1: 存储过程在服务器端运行,执行速度快2: 存储过程只执行一次,然后把编译的二进制代码保存在调整缓存中,以后可
2023-01-31

mysql的存储过程

什么是存储过程一组可编程的函数,是为了完成特定功能的SQL语句集经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行。存储过程就是具有名字的一段代码,用来完成一个特定的功能。创建的存储过程保存在数据库的数据字典中为什么要用存储
mysql的存储过程
2015-04-21

编程热搜

目录