存储过程的编写

CREATE OR REPLACE 
PROCEDURE GET_STATIC_ABOUT_MYD(V_IN_TYPE IN VARCHAR2) IS
  V_ID         VARCHAR2(32); --主键
  V_MYD_AVG    NUMBER(3, 1); --满意度
  V_START_DATE DATE; --开始时间
  V_END_DATE   DATE; --结束时间
  V_TYPE       VARCHAR2(2);
  V_YEAR       VARCHAR2(10); --年
  V_MONTH      VARCHAR2(10); --月
  V_WEEK       VARCHAR2(10); --周

  --用户
  CURSOR CUR1 IS
    SELECT A.*, B.ORGANIZATION_LEVEL, B.COUNTY_ID
      FROM POS_EMP@KFPT A, PH_ORGANIZATION B
     WHERE A.POS_ID = B.ORGANIZATION_ID
       AND A.EMP_STATUS = 1
       AND A.EMP_PROPERTY = 8
       AND B.ORGANIZATION_LEVEL IN (1, 2);
BEGIN
  DELETE FROM PH_CHARTS_MYD_RZ;
  V_TYPE := V_IN_TYPE;
  --年--
  IF V_TYPE = '1' THEN
    SELECT TRUNC(SYSDATE, 'YY'),
           TRUNC(SYSDATE, 'MM'),
           TO_CHAR(SYSDATE, 'YYYY'),
           TO_CHAR(ADD_MONTHS(TRUNC(SYSDATE, 'MM'), -1), 'YYYYMM')
      INTO V_START_DATE, V_END_DATE, V_YEAR, V_MONTH
      FROM DUAL;
    V_WEEK := NULL;
    --月--
  ELSIF V_TYPE = '2' THEN
    SELECT ADD_MONTHS(TRUNC(SYSDATE, 'MM'), -1),
           TRUNC(SYSDATE, 'MM'),
           TO_CHAR(ADD_MONTHS(TRUNC(SYSDATE, 'MM'), -1), 'YYYYMM'),
           TO_CHAR(TRUNC(SYSDATE, 'IW'), 'IW')
      INTO V_START_DATE, V_END_DATE, V_MONTH, V_WEEK
      FROM DUAL;
    V_YEAR := NULL;
    --星期--
  ELSIF V_TYPE = '3' THEN
    SELECT TRUNC(SYSDATE, 'IW') - 7,
           TRUNC(SYSDATE, 'IW'),
           TO_CHAR(SYSDATE, 'YYYY'),
           TO_CHAR(TRUNC(SYSDATE, 'IW'), 'IW')
      INTO V_START_DATE, V_END_DATE, V_YEAR, V_WEEK
      FROM DUAL;
    V_MONTH := NULL;
  END IF;

  --按用户
  FOR LINE1 IN CUR1 LOOP
    --平均满意度
    SELECT CASE
             WHEN NVL(SUM(A.SCORE) / COUNT(A.USER_ID), 0) = 0 THEN
              NVL(SUM(A.SCORE) / COUNT(A.USER_ID), 0)
             ELSE
              (10 - NVL(SUM(A.SCORE) / COUNT(A.USER_ID), 0))
           END
      INTO V_MYD_AVG
      FROM PH_SERVICE_EVALUATION A
     WHERE A.SCORE_DATE >= V_START_DATE
       AND A.SCORE_DATE < V_END_DATE
       AND A.USER_ID = LINE1.EMP_ID
       AND A.SCORE != '0';
    --主键
    SELECT LOWER(RAWTOHEX(SYS_GUID())) INTO V_ID FROM DUAL;
    INSERT INTO PH_CHARTS_MYD
      (ID, --  varchar2(32)      主键
       USER_ID, --  varchar2(32)  y   用户id
       USER_NAME, --  varchar2(30)  y   用户名
       CREATE_DATE, --  date  y   创建时间
       ORG_ID, -- varchar2(32)  y   机构id
       MYD_AVG, -- number  y   满意度
       ORG_LEVEL, --  number(1) y   机构级别
       SERVIAL_NO, -- number(10)  y   序列号
       COUNTY_ID,
       YEAR, -- varchar2(10)  y   年份
       MONTH, --  varchar2(10)  y   月份
       WEEK --  varchar2(5) y   星期
       )
    VALUES
      (V_ID,
       LINE1.EMP_ID,
       LINE1.EMP_NAME, --  varchar2(30)  y   用户名
       SYSDATE, --  date  y   创建时间
       LINE1.POS_ID, -- varchar2(32)  y   机构id
       V_MYD_AVG, -- number  y   随访量
       LINE1.ORGANIZATION_LEVEL, --  number(1) y   机构级别
       NULL, -- number(10)  y   序列号
       LINE1.COUNTY_ID,
       V_YEAR, -- varchar2(10)  y   年份
       V_MONTH, --  varchar2(10)  y   月份
       V_WEEK --  varchar2(5) y   星期)
       );
    --日志
    INSERT INTO PH_CHARTS_MYD_RZ
      (ID, MYD_AVG, ORG_LEVEL, COUNTY_ID)
    VALUES
      (V_ID, V_MYD_AVG, LINE1.ORGANIZATION_LEVEL, LINE1.COUNTY_ID);
  END LOOP;
  --更新序列号
  UPDATE PH_CHARTS_MYD A
     SET A.SERVIAL_NO =
         (SELECT XH
            FROM (SELECT ROW_NUMBER() OVER(PARTITION BY B.COUNTY_ID, B.ORG_LEVEL ORDER BY B.MYD_AVG DESC) AS XH,
                         B.ID
                    FROM PH_CHARTS_MYD_RZ B) C
           WHERE C.ID = A.ID)
   WHERE EXISTS (SELECT XH
            FROM (SELECT ROW_NUMBER() OVER(PARTITION BY B.COUNTY_ID, B.ORG_LEVEL ORDER BY B.MYD_AVG DESC) AS XH,
                         B.ID
                    FROM PH_CHARTS_MYD_RZ B) C
           WHERE C.ID = A.ID);
  COMMIT;
END;
CREATE OR REPLACE 
FUNCTION GET_UUID RETURN VARCHAR IS
  GUID VARCHAR(50);
BEGIN
  GUID := LOWER(RAWTOHEX(SYS_GUID()));
  RETURN SUBSTR(GUID, 1, 8) || '-' || SUBSTR(GUID, 9, 4) || '-' || SUBSTR(GUID,
                                                                          13,
                                                                          4) || '-' || SUBSTR(GUID,
                                                                                              17,
                                                                                              4) || '-' || SUBSTR(GUID,
                                                                                                                  21,
                                                                                                                  12);
END GET_UUID;


CREATE OR REPLACE 
PROCEDURE AUTO_CREATE_MANAGE_DIA IS
  V_AUTO_CREATE_MANAGE_ID VARCHAR2(36); --主键
  V_AUTO_TYPE             VARCHAR2(1); --类型(人群)
  V_AUTO_STATUS           VARCHAR2(1); --创建状态
  --V_CREATE_TIME           DATE; --创建时间
  --V_PERSON_INFO_ID        VARCHAR2(36); --个人档案ID

  --糖尿病

  CURSOR PERSONS IS
    SELECT PERSON.PERSON_INFO_ID, PERSON.IS_HYPERTENSION
      FROM PH_PERSON_INFO PERSON
     WHERE EXISTS (SELECT 1
              FROM PH_PERSON_DISEASE P
             WHERE P.PERSON_INFO_ID = PERSON.PERSON_INFO_ID
               AND P.DISEASE_CODE = '3')
       AND PERSON.IS_HYPERTENSION != 1
       AND PERSON.STATUS_CODE = '0'
       AND NOT EXISTS (SELECT 1
              FROM PH_AUTO_CREATE_MANAGE P
             WHERE P.PERSON_INFO_ID = PERSON.PERSON_INFO_ID
               AND P.AUTO_TYPE = '3');
BEGIN
  V_AUTO_STATUS := '0';
  V_AUTO_TYPE   := '3';
  FOR LINE1 IN PERSONS LOOP
    SELECT LOWER(RAWTOHEX(SYS_GUID()))
      INTO V_AUTO_CREATE_MANAGE_ID
      FROM DUAL;
    INSERT INTO PH_AUTO_CREATE_MANAGE
      (AUTO_CREATE_MANAGE_ID,
       PERSON_INFO_ID,
       AUTO_TYPE,
       CREATE_TIME,
       AUTO_STATUS)
    VALUES
      (V_AUTO_CREATE_MANAGE_ID,
       LINE1.PERSON_INFO_ID,
       V_AUTO_TYPE,
       SYSDATE,
       V_AUTO_STATUS);
  END LOOP;
  COMMIT;
END;


CREATE OR REPLACE 
PROCEDURE AUTO_CREATE_MANAGE_ELDER(V_SYSTEM_PARAM IN VARCHAR2) IS
  --未创建专档记录表
  V_AUTO_CREATE_MANAGE_ID VARCHAR2(36); --主键
  V_AUTO_TYPE             VARCHAR2(1); --类型(人群)
  V_AUTO_STATUS           VARCHAR2(1); --创建状态
  --老年人管理卡
  V_ELDER_INFO_ID VARCHAR2(36); --老年人专档主键
  --V_END_DATE              VARCHAR(4);
  --V_CREATE_TIME           DATE; --创建时间
  --V_PERSON_INFO_ID        VARCHAR2(36); --个人档案ID

  --应建立老年人专档但未建立的
  CURSOR PERSONS IS
    SELECT PERSON.PERSON_INFO_ID,
           PERSON.MANAGE_ORG_ID,
           PERSON.NAME,
           PERSON.BIRTHDAY,
           PERSON.IS_ELDER
      FROM PH_PERSON_INFO PERSON
     WHERE (TO_NUMBER(TO_CHAR(SYSDATE, 'yyyy')) -
           TO_NUMBER(TO_CHAR(PERSON.BIRTHDAY, 'yyyy'))) >= 65
       AND PERSON.IS_ELDER != 1
       AND PERSON.STATUS_CODE = '0';

BEGIN
  --若系统参数为1,则往老年人专档表中插入记录,并删除ph_auto_create_manage表中老年人的记录
  IF V_SYSTEM_PARAM = '1' THEN
    FOR PER IN PERSONS LOOP
      SELECT LOWER(RAWTOHEX(SYS_GUID())) INTO V_ELDER_INFO_ID FROM DUAL;
      INSERT INTO PH_ELDER_INFO
        (ELDER_INFO_ID,
         PERSON_INFO_ID,
         MANAGE_ORG_ID,
         NAME,
         MANAGE_DATE,
         IS_CANCEL)
      VALUES
        (V_ELDER_INFO_ID,
         PER.PERSON_INFO_ID,
         PER.MANAGE_ORG_ID,
         PER.NAME,
         SYSDATE,
         '0');
      --每往老年人专档记录中插入一条数据,则更新个人档案表中的is_elder和IS_ELDER_DATE字段
      UPDATE PH_PERSON_INFO PI
         SET PI.IS_ELDER = 1, PI.IS_ELDER_DATE = SYSDATE
       WHERE PI.PERSON_INFO_ID = PER.PERSON_INFO_ID
         AND PI.STATUS_CODE = '0';
    END LOOP;
    --删除未创建专档记录表中老年人的记录
    DELETE FROM PH_AUTO_CREATE_MANAGE AC WHERE AC.AUTO_TYPE = '1';
  
  ELSE
    --若系统参数不为1,则往未建专档记录表中插入数据
    --状态
    V_AUTO_STATUS := '0';
    --类型
    V_AUTO_TYPE := '1';
    FOR LINE1 IN PERSONS LOOP
      SELECT LOWER(RAWTOHEX(SYS_GUID()))
        INTO V_AUTO_CREATE_MANAGE_ID
        FROM DUAL;
      INSERT INTO PH_AUTO_CREATE_MANAGE
        (AUTO_CREATE_MANAGE_ID,
         PERSON_INFO_ID,
         AUTO_TYPE,
         CREATE_TIME,
         AUTO_STATUS)
      VALUES
        (V_AUTO_CREATE_MANAGE_ID,
         LINE1.PERSON_INFO_ID,
         V_AUTO_TYPE,
         SYSDATE,
         V_AUTO_STATUS);
    END LOOP;
  END IF;
  COMMIT;
END;



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PostgreSQL是以加州大学伯克利分校计算机系开发的POSTGRES,现在已经更名为PostgreSQL. PostgreSQL支持大部分SQL标准并且提供了许多其它现代特性:复杂查询、外键、触发器、视图、事务完整性等。PostgreSQL 是一个免费的对象-关系数据库服务器(数据库管理系统),它在灵活的 BSD-风格许可证下发行。它提供了相对其他开放源代码数据库系统(比如 MySQL 和 Firebird),和专有系统(比如 Oracle、Sybase、IBM 的 DB2 和 Microsoft SQL Server)之外的另一种选择。事实上, PostgreSQL 的特性覆盖了 SQL-2/SQL-92 和 SQL-3/SQL-99,首先,它包括了可以说是目前世界上最丰富的数据类型的支持,其中有些数据类型可以说连商业数据库都不具备, 比如 IP 类型和几何类型等;其次,PostgreSQL 是全功能的自由软件数据库,很长时间以来,PostgreSQL 是唯一支持事务、子查询、多版本并行控制系统(MVCC)、数据完整性检查等特性的唯一的一种自由软件的数据库管理系统。 Inprise 的 InterBase 以及SAP等厂商将其原先专有软件开放为自由软件之后才打破了这个唯一。最后,PostgreSQL拥有一支非常活跃的开发队伍,而且在许多黑客的努力下,PostgreSQL 的质量日益提高。从技术角度来讲,PostgreSQL 采用的是比较经典的C/S(client/server)结构,也就是一个客户端对应一个服务器端守护进程的模式,这个守护进程分析客户端来的查询请求,生成规划树,进行数据检索并最终把结果格式化输出后返回给客户端。为了便于客户端的程序的编写,由数据库服务器提供了统一的客户端 C 接口。而不同的客户端接口都是源自这个 C 接口,比如ODBC,JDBC,Python,Perl,Tcl,C/C++,ESQL等, 同时也要指出的是,PostgreSQL 对接口的支持也是非常丰富的,几乎支持所有类型的数据库客户端接口。这一点也可以说是 PostgreSQL 一大优点。本课程作为PostgreSQL数据库管理一,主要讲解以下内容: 1.     PostgreSQL 存储过程基本知识2.     PostgreSQL 用户自定义函数3.     PostgreSQL 控制结构4.     PostgreSQL 游标和存储过程5.     PostgreSQL 索引6.     PostgreSQL 视图7.     PostgreSQL 触发器8.     PostgreSQL 角色、备份和还原9.     PostgreSQL 表空间管理

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值