PostgreSQL基础整理(二)

存储过程

实现功能:针对工资表30岁以下,工资提升10% 30至40提升20% 40以上提升30% + 奖金(入参)返回平均薪酬

  • 创建表:
DROP TABLE emps;
CREATE TABLE emps(userid int PRIMARY KEY, age int, salary numeric );
INSERT INTO emps VALUES(10, 25, 1000.0),(11, 26, 1500.0),(12, 27, 1300.0),(13, 35, 3000.0), (14, 45, 4000.0);
  • 创建存储过程:
    DROP FUNCTION IF EXISTS add_salary(_bonus numeric );
    CREATE OR REPLACE FUNCTION add_salary(_bonus numeric )
    RETURNS numeric AS $body$

    DECLARE
        level1 numeric  := 30;
        level2 numeric  :=40;
        res numeric  := 0;
        page int;
        puserid int;
        mycursor refcursor ;

        BEGIN
            OPEN mycursor FOR SELECT userid, age FROM emps;
            FETCH mycursor INTO puserid, page;
            RAISE NOTICE ‘age is :----%‘,puserid||‘,‘||page;
            WHILE FOUND LOOP
                IF  page <= level1
                THEN
                    UPDATE emps SET salary = salary * 1.1 WHERE userid = puserid;
                ELSIF  page > level1 AND page <= level2
                THEN
                    UPDATE emps SET salary = salary*1.2 WHERE userid = puserid;
                ELSE
                    UPDATE emps SET salary = salary*1.3 WHERE userid = puserid;
                END IF;        

                FETCH mycursor INTO puserid, page;

            END LOOP;

                SELECT AVG(SALARY) FROM emps INTO res;
                RETURN res;
        END
    $body$
    Language plpgsql;
  • 执行结果

时间: 2024-08-01 13:02:25

PostgreSQL基础整理(二)的相关文章

PostgreSQL基础整理(三)

1.触发器 有更新操作时记录一条日志 DROP FUNCTION IF EXIST log_test(); CREATE OR REPLACE FUNCTION log_test() RETURNS trigger AS $$ DECLARE BEGIN RAISE NOTICE 'TRIGGER LOG TEST'; RETURN NULL; END; $$ LANGUAGE plpgsql; CREATE TRIGGER log_trigger AFTER UPDATE on emps FO

PostgreSQL基础整理(一)

1. 创建数据库: 1)登录bin目录,createdb.exe -U postgres -e mydb; -U 表示本次操作的登录用户名,如果不写会取windows登录的账户,如Administrator:会提示无创建权限: 2. 登录数据库: 1)用postgre自带的sql shell,登录时选择数据库为创建库 3. CRUD 书写习惯:SQL语句大写,其他小写 3.1)创建表: CREATE TABLE users( username char(20) PRIMARY KEY, pass

javascript 基础学习整理 二 之 html对象总结,参考W3C

Anchor 对象 更改一个链接的文本.URL 以及 target 使用 focus() 和 blur() 向超链接添加快捷键 Document 对象 使用 document.write() 向输出流写文本 使用 document.write() 向输出流写 HTML 返回当前文档的标题 返回当前文档的 URL 返回当前文档的 referrer 返回下载当前文档的服务器域名 使用 getElementById() 使用 getElementsByName() 打开一个新的文档,添加一些文本,然后

java面试题整理二(转灰灰+灰灰)

java 开发面试题小整理(二) 51.Anonymous Inner Class(匿名内部类)是否可以继承其它类?是否可以实现接口? 答:可以继承其他类或实现其他接口,在Swing编程和Android开发中常用此方式来实现事件监听和回调. 52.内部类可以引用它的包含类(外部类)的成员吗?有没有什么限制? 答:一个内部类对象可以访问创建它的外部类对象的成员,包括私有成员. 53.Java 中的final关键字有哪些用法? 答:(1)修饰类:表示该类不能被继承: (2)修饰方法:表示方法不能被重

算法整理(二)---快速排序的两种实现方式:双边扫描和单边扫描

首先简单谈下快速排序的特点,时间复杂度O(nLog n),最差时间复杂度O(n^2),平均时间O(nLog n).因为用到了函数栈,空间复杂度为O(lg n),最差为O(n).是一种不稳定的排序方法.基本思想是分治法,这位大大的http://blog.csdn.net/morewindows/article/details/6684558 讲的非常清楚了,分治法+挖坑法,我就不多说了.就是以某个数为参照,使得左边的都小于他,右边的数都大于他.然后对他的左右两个区间采取同样的方法进行递归. 就其整

Android 面试题总结之Android 基础(二)

Android 面试题总结之Android 基础ContentProvider(二) 在上一章节Android 面试题总结之Android 基础Activity(一) 我们讲的Activity基础知识.有许多朋友反映看着比较乱,我又回去看了看 ,确实很乱,不够细心.然后我又重新整理了一遍.让大家阅读体验更好! 在阅读过程中有任何问题,请及时联系. 本章系<Android 之美 从0到1 – 高手之路>Android基础ContentProvider 总结了Android 开发者面试比较常见的C

算法整理(二)---高速排序的两种实现方式:双边扫描和单边扫描

首先简单谈下高速排序的特点,时间复杂度O(nLog n),最差时间复杂度O(n^2),平均时间O(nLog n).由于用到了函数栈,空间复杂度为O(lg n),最差为O(n).是一种不稳定的排序方法.基本思想是分治法,这位大大的http://blog.csdn.net/morewindows/article/details/6684558 讲的很清楚了,分治法+挖坑法,我就不多说了.就是以某个数为參照,使得左边的都小于他,右边的数都大于他.然后对他的左右两个区间採取相同的方法进行递归. 就其总体

Python基础(二)

Python基础(二) Python 运算符(算术运算.比较运算.赋值运算.逻辑运算.成员运算) 基本数据类型(数字.布尔值.字符串.列表.元组.字典.set集合) for 循环 enumrate range和xrange 编码与进制转换 Python 运算符 1.算术运算: 2.比较运算: 3.赋值运算: 4.逻辑运算:  5.成员运算: 基本数据类型 1.数字 int(整型) 在32位机器上,整数的位数为32位,取值范围为-2**31-2**31-1,即-2147483648-2147483

Python之路【第三篇】:Python基础(二)

Python之路[第三篇]:Python基础(二) 内置函数 一 详细见python文档,猛击这里 文件操作 操作文件时,一般需要经历如下步骤: 打开文件 操作文件 一.打开文件 1 文件句柄 = file('文件路径', '模式') 注:python中打开文件有两种方式,即:open(...) 和  file(...) ,本质上前者在内部会调用后者来进行文件操作,推荐使用 open. 打开文件时,需要指定文件路径和以何等方式打开文件,打开后,即可获取该文件句柄,日后通过此文件句柄对该文件操作.