加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Oracle数据库存储过程练习20181212

发布时间:2020-12-12 13:24:01 所属栏目:百科 来源:网络整理
导读:先创建一个测试的数据表 -- 测试表 CREATE TABLE TEST20181207(ID INTEGER PRIMARY KEY ,FUND NUMBER , -- 上日资金 BALANCE NUMBER , -- 本日资金 CDATE VARCHAR2 ( 10 )); 添加测试数据: -- 添加测试数据 INSERT INTO TEST20181207 VALUES ( 1 , 100 , 200

先创建一个测试的数据表

--测试表
CREATE TABLE TEST20181207
(
ID INTEGER PRIMARY KEY,FUND NUMBER,--上日资金
BALANCE NUMBER,--本日资金
CDATE VARCHAR2(10)
);

添加测试数据:

--添加测试数据
INSERT INTO TEST20181207 VALUES(1,100,200,2018-10-31);
INSERT INTO TEST20181207 VALUES(2,2018-11-01);
INSERT INTO TEST20181207 VALUES(3,0,2018-11-03);
INSERT INTO TEST20181207 VALUES(4,2018-11-10);
INSERT INTO TEST20181207 VALUES(5,2018-11-20);
INSERT INTO TEST20181207 VALUES(6,10,2018-11-10);
INSERT INTO TEST20181207 VALUES(7,2018-11-20);
COMMIT;

创建存储过程:

CREATE OR REPLACE PROCEDURE TESTSELECT20181207
(I_START_DATE VARCHAR2,I_END_DATE VARCHAR2)
IS
  T_ID1 INTEGER;
  T_FUND1 NUMBER;
  T_BALANCE1 NUMBER;
  T_CDATE1 VARCHAR2(10);
  T_ID2 INTEGER;
  T_FUND2 NUMBER;
  T_BALANCE2 NUMBER;
  T_CDATE2 VARCHAR2(10);
  CURSOR CURSOR1 IS
  SELECT ID,FUND,BALANCE,CDATE FROM TEST20181207
  WHERE CDATE BETWEEN I_START_DATE AND I_END_DATE;
  CURSOR CURSOR2(T_CDATE VARCHAR2) IS
  SELECT ID,CDATE FROM TEST20181207
  WHERE CDATE = (
    SELECT MIN(CDATE) FROM TEST20181207
    WHERE CDATE > T_CDATE
  )
  AND CDATE BETWEEN I_START_DATE AND I_END_DATE;
BEGIN
  OPEN CURSOR1;
  LOOP
    FETCH CURSOR1 INTO T_ID1,T_FUND1,T_BALANCE1,T_CDATE1;
    EXIT WHEN CURSOR1%NOTFOUND;
    OPEN CURSOR2(T_CDATE1);
      LOOP
        FETCH CURSOR2 INTO T_ID2,T_FUND2,T_BALANCE2,T_CDATE2;        
        EXIT WHEN CURSOR2%NOTFOUND;
        IF T_FUND2 <> T_BALANCE1 THEN
          DBMS_OUTPUT.PUT_LINE(编号1:||T_ID1||,本日资金1:||T_BALANCE1||,日期1:||T_CDATE1);
          DBMS_OUTPUT.PUT_LINE(编号2:||T_ID2||,上日资金2:||T_FUND2||,日期2:||T_CDATE2);
        END IF;
      END LOOP;
    CLOSE CURSOR2; 
  END LOOP;
  CLOSE CURSOR1;
END TESTSELECT20181207;
/

最后一个/在同时执行创建多个存储过程是必须的,/代表一个存储过程代码的结尾(结束).

调用存储过程:

CALL TESTSELECT20181207(2018-10-31,2018-11-30);

运行结果:

好了,就这样了.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读