• linux的计划任务操作


    1.cron服务来设置

    计划任务查看与设置命令:crontab

    包括条目:

    分钟m:0-59

    小时h:0-23

    月日dom:1-31

    月份mon:1-12

    星期dow:0-7

    例子:

    每隔2小时处理一个文件用:*/2

    1,3,5,7,9 点间隔执行

    0-4,8-12点执行

    或者是*/2每隔2个小时备份文件或执行数据库操作

    下面是工作中用到的sell脚本:

    0 1 * * * /home/oracle/psql-jobs.sh
    */1 * * * * /usr/bin/curl http://127.0.0.1:60030/admin/serpro/qianzhangcron >/dev/null 2>&1

      0 5 * * * /home/oracle/xbin-1.0.0/autolog.sh

     
    #password stored in ~/.pgpass
    #psql -w -U acc_user -h localhost -d Factoring -c "select acc_user.p_loop_count_sheet()"
    psql -w -U acc_user Factoring -c "select acc_user.p_loop_count_sheet()"

    案例:输入命令 打开任务编辑器

    crontab -e

    可以看到

    # For example, you can run a backup of all your user accounts
    # at 5 a.m every week with:
    # 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
    # For more information see the manual pages of crontab(5) and cron(8)
    # m h dom mon dow command 这样的格式

    我们每5分钟把 /home/myfile 路径下的文件打包一次放到 /home/rar 目录下

    我们就可以这样写:

    */5 * * * * tar czf /home/rar/myfile.tgz /home/myfile/*

    然后重启服务:

    daokr@DK:~/rar$ sudo service cron restart 
    [sudo] daokr 的密码:

     利用stat 命令查看文件时间更新时间看是否已经执行成功

    daokr@DK:~/rar$ stat myfile.tgz 
      文件:'myfile.tgz'
      大小:128           块:8          IO 块:4096   普通文件
    设备:801h/2049d    Inode:530109      硬链接:1
    权限:(0664/-rw-rw-r--)  Uid:( 1000/   daokr)   Gid:( 1000/   daokr)
    最近访问:2018-03-29 23:15:21.837168254 +0800
    最近更改:2018-03-29 23:17:01.897642845 +0800
    最近改动:2018-03-29 23:17:01.897642845 +0800

    crontab -l 查看任务

    crontab -r 删除任务

    工作中用到的计划任务

     

    CREATE OR REPLACE FUNCTION "acc_user"."p_loop_count_sheet"(inccy varchar='CNY'::character varying)
      RETURNS "pg_catalog"."void" AS $BODY$
      declare
        --v_ccy     VARCHAR(100);
        --v_rate    VARCHAR(100);
        v_code    numeric;
        v_errm    VARCHAR(256);
        v_count   VARCHAR(1);
        v_s_count VARCHAR(20);
        v_a_count VARCHAR(20);
        v_b_count VARCHAR(20);
        v_c_count VARCHAR(20);
        v_d_count VARCHAR(20);
      
      BEGIN
    
      raise notice 'begin  call p_count_sheet1';
    
          INSERT INTO t_errors
            (code, MESSAGE, PRO_NAME, RUN_DATE)
          VALUES
            (0, 'run', 'p_loop_count_sheet', now());
      
        perform p_count_sheet1('CNY','1');
      
      raise notice 'begin  insert into acc_user.t_acc_general_ledger_ac_his';
      
        insert into acc_user.t_acc_general_ledger_ac_his
          (br_no, gl_code, d_curr_amt, c_curr_amt, d_count, c_count)
          WITH path1 AS
           (SELECT ent_id as agent_id,
                   parent_ent_id as parent_id,
                   SYS_CONNECT_BY_PATH(ent_id, ',') p_child
              FROM crm_user.t_enterprise
            CONNECT BY ent_id = PRIOR parent_ent_id),
          allpath AS
           (SELECT agent_id,
                   SUBSTR(string_agg(p_child,','), 1, 4000) all_c_p
              FROM path1
             GROUP BY agent_id),
          trade1 AS
           (SELECT BR_NO,
                   GL_CODE,
                   AC_DATE,
                   d_curr_amt,
                   c_curr_amt,
                   d_count,
                   c_count
              FROM acc_user.t_acc_general_ledger_his_temp
             WHERE (ac_date) = trunc(now() - 1))
          SELECT allpath.agent_id,
                 trade1.GL_CODE,
                 SUM(DECODE(instr(all_c_p, trade1.BR_NO),0,0,nvl(d_curr_amt,  0))) d_curr_amt_sum,
                 SUM(DECODE(instr(all_c_p, trade1.BR_NO),0,0,nvl(c_curr_amt,  0))) c_curr_amt_sum,
                 SUM(DECODE(instr(all_c_p, trade1.BR_NO),0,0,nvl(d_count,  0))) d_count_sum,
                 SUM(DECODE(instr(all_c_p, trade1.BR_NO),0,0,nvl(c_count,  0))) c_count_sum
            FROM allpath                 
                    inner join     trade1 on instr(all_c_p, trade1.BR_NO) > 0
           GROUP BY allpath.agent_id, trade1.GL_CODE;
      
        update t_acc_general_ledger_ac_his
           set seq_no  = t_acc_general_ledger_ac_his_seq_no_seq.nextval,
               ccy     = INCCY,
               ac_date = trunc(now() - 1)
         where ac_date is null;
      
        select count(*)
          into v_s_count
          from (select br_no,
                       sum(nvl(d_prev_bal,  0) +
                           nvl(d_curr_amt,  0) -
                           nvl(c_curr_amt,  0)) s_d,
                       sum(nvl(c_prev_bal,  0) +
                           nvl(c_curr_amt,  0) -
                           nvl(d_curr_amt,  0)) s_c
                  from t_acc_general_ledger_ac_his
                 where ac_date =  trunc(now() - 2)
                 group by br_no)
         where s_d != s_c;
      
      raise notice 'v_s_count: %', v_s_count;
    
        if (v_s_count = '0') then
    
          raise notice 'begin update  t_acc_general_ledger_ac_his -79';
    
          update t_acc_general_ledger_ac_his t2
             set t2.d_prev_bal =
                 (with kk as (select br_no,
                                     gl_code,
                                     ac_date,
                                     lag(d_curr_bal::bigint, 1,0::bigint) over(partition by br_no, gl_code order by ac_date) d_prev_bal_next
                                from t_acc_general_ledger_ac_his)
                   select kk.d_prev_bal_next
                     from kk
                    where kk.br_no = t2.br_no
                      and kk.gl_code = t2.gl_code
                      and kk.ac_date = t2.ac_date)
                    where ac_date = trunc(now() - 1);
        
          raise notice 'begin update  t_acc_general_ledger_ac_his -95';
    
          update t_acc_general_ledger_ac_his t2
             set t2.c_prev_bal =
                 (with kk as (select br_no,
                                     gl_code,
                                     ac_date,
                                     lag(c_curr_bal::bigint, 1,0::bigint) over(partition by br_no, gl_code order by ac_date) c_prev_bal_next
                                from t_acc_general_ledger_ac_his)
                   select kk.c_prev_bal_next
                     from kk
                    where kk.br_no = t2.br_no
                      and kk.gl_code = t2.gl_code
                      and kk.ac_date = t2.ac_date)
                    where ac_date = trunc(now() - 1);
        
          raise notice 'begin update  t_acc_general_ledger_ac_his -111';
    
          update t_acc_general_ledger_ac_his t2
             set d_curr_bal =
                 (with kk as (SELECT br_no,
                                     t1.gl_code,
                                     debit_credit,
                                     t1.ac_date,
                                     CASE
                                       WHEN debit_credit = 'D' THEN
                                        nvl(d_prev_bal,  0) +
                                        nvl(d_curr_amt,  0) -
                                        nvl(c_curr_amt,  0)
                                     
                                       WHEN debit_credit = 'C' THEN
                                        nvl(c_prev_bal,  0) +
                                        nvl(c_curr_amt,  0) -
                                        nvl(d_curr_amt,  0)
                                     
                                       WHEN debit_credit = 'B' AND
                                            nvl(d_prev_bal, 0) = 0 and
                                            nvl(c_prev_bal, 0) = 0 and
                                            (d_curr_amt - c_curr_amt) > 0 THEN
                                        abs(nvl(d_curr_amt,0) -
                                            nvl(c_curr_amt,0))
                                     
                                       when debit_credit = 'B' and
                                            nvl(d_prev_bal,  0) > 0 and
                                            (d_prev_bal + d_curr_amt -
                                            nvl(c_curr_amt,  0)) > 0 then
                                        abs(d_prev_bal + d_curr_amt -
                                            nvl(c_curr_amt,  0))
                                     
                                       when debit_credit = 'B' and
                                            nvl(c_prev_bal,  0) > 0 and
                                            (c_prev_bal + c_curr_amt -
                                            nvl(d_curr_amt,  0)) < 0 then
                                        abs(c_prev_bal + c_curr_amt -
                                            nvl(d_curr_amt,  0))
                                     
                                     --ELSE abs(c_prev_bal+c_curr_amt-nvl(d_curr_amt,d_curr_amt,0))
                                     END curr_bal
                                FROM t_acc_general_ledger_ac_his t1,
                                     t_acc_subject
                               WHERE t1.gl_code = t_acc_subject.gl_code
                                 and ac_date = trunc(now() - 1))
                   select decode(kk.debit_credit,
                                 'D',
                                 kk.curr_bal,
                                 'B',
                                 kk.curr_bal,
                                 0)
                     from kk
                    where kk.br_no = t2.br_no
                      and kk.gl_code = t2.gl_code
                      and kk.ac_date = t2.ac_date
                      and t2.ac_date = trunc(now() - 1))
                    where ac_date = trunc(now() - 1);
          
          
          raise notice 'update t_acc_general_ledger_ac_his';
        
          update t_acc_general_ledger_ac_his t2
             set c_curr_bal =
                 (with kk as (SELECT br_no,
                                     t1.gl_code,
                                     debit_credit,
                                     t1.ac_date,
                                     CASE
                                       WHEN debit_credit = 'D' THEN
                                        nvl(d_prev_bal,0) +
                                        nvl(d_curr_amt,0) -
                                        nvl(c_curr_amt,0)
                                     
                                       WHEN debit_credit = 'C' THEN
                                        nvl(c_prev_bal,  0) +
                                        nvl(c_curr_amt,  0) -
                                        nvl(d_curr_amt,  0)
                                     
                                       WHEN debit_credit = 'B' AND
                                            nvl(d_prev_bal, 0) = 0 and
                                            nvl(c_prev_bal, 0) = 0 and
                                            (d_curr_amt - c_curr_amt) < 0 THEN
                                        abs(nvl(d_curr_amt,  0) -
                                            nvl(c_curr_amt,  0))
                                     
                                       when debit_credit = 'B' and
                                            nvl(c_prev_bal, 0) > 0 and
                                            (c_prev_bal + c_curr_amt -
                                            nvl(d_curr_amt, 0)) > 0 then
                                        abs(c_prev_bal + c_curr_amt -
                                            nvl(d_curr_amt, 0))
                                     
                                       when debit_credit = 'B' and
                                            nvl(d_prev_bal,  0) > 0 and
                                            (d_prev_bal + d_curr_amt -
                                            nvl(c_curr_amt,  0)) < 0 then
                                        abs(d_prev_bal + d_curr_amt -
                                            nvl(c_curr_amt,  0))
                                     
                                     --ELSE abs(c_prev_bal+c_curr_amt-nvl(d_curr_amt,d_curr_amt,0))
                                     END curr_bal
                                FROM t_acc_general_ledger_ac_his t1,
                                     t_acc_subject
                               WHERE t1.gl_code = t_acc_subject.gl_code
                                 and ac_date = trunc(now() - 1))
                   select decode(kk.debit_credit,
                                 'C',
                                 kk.curr_bal,
                                 'B',
                                 kk.curr_bal,
                                 0)
                     from kk
                    where kk.br_no = t2.br_no
                      and kk.gl_code = t2.gl_code
                      and kk.ac_date = t2.ac_date
                      and t2.ac_date =  trunc(now() - 1)) 
                    where ac_date =  trunc(now() - 1);
        
          select count(*)
            into v_count
            from t_acc_general_ledger_ac_his
           where 1=1
             and ac_date = trunc(now() - 1);
    
          raise notice 'v_count: %',v_count;
    
          if (v_count > 0) then
            select count(*)
              into v_d_count
              from t_acc_general_ledger_ac_his
             where 1=1
               and d_prev_bal > '0'
               and ac_date = trunc(now() - 1);
            select count(*)
              into v_c_count
              from t_acc_general_ledger_ac_his
             where 1=1
               and c_prev_bal > '0'
               and ac_date = trunc(now() - 1);
            select count(*)
              into v_b_count
              from t_acc_general_ledger_ac_his
             where 1=1
               and ac_date = trunc(now() - 1)
               and (d_prev_bal is null or d_prev_bal = '0')
               and (c_prev_bal is null or c_prev_bal = '0')
               and cast (d_curr_amt as numeric ) > cast (c_curr_amt as numeric);
            select count(*)
              into v_a_count
              from t_acc_general_ledger_ac_his
             where 1=1
               and ac_date = trunc(now() - 1)
               and (d_prev_bal is null or d_prev_bal = '0')
               and (c_prev_bal is null or c_prev_bal = '0')
               and cast(d_curr_amt  as numeric) < cast (c_curr_amt  as numeric);
            if v_d_count > 0 then
              update t_acc_general_ledger_ac_his
                 set d_curr_bal =
                     (with kk as (select br_no,
                                         gl_code,
                                         d_prev_bal,
                                         c_prev_bal,
                                         ac_date,
                                         curr_bal
                                    from (SELECT br_no,
                                                 gl_code,
                                                 ac_date,
                                                 d_prev_bal,
                                                 c_prev_bal,
                                                 CASE
                                                   WHEN c_prev_bal > '0' THEN
                                                    nvl(c_prev_bal, 0) +
                                                    nvl(c_curr_amt, 0) -
                                                    nvl(d_curr_amt, 0)
                                                   when d_prev_bal > '0' then
                                                    nvl(d_prev_bal,  0) +
                                                    nvl(d_curr_amt,  0) -
                                                    nvl(c_curr_amt,  0)
                                                   ELSE
                                                    nvl(d_curr_amt,  0) -
                                                    nvl(c_curr_amt,  0)
                                                 END curr_bal
                                            FROM t_acc_general_ledger_ac_his
                                           WHERE ac_date = trunc(now() - 1)
                                             and 1=1)
                                   where d_prev_bal > '0')
                       select decode(sign(curr_bal), 1, curr_bal, 0)
                         from kk
                        where t_acc_general_ledger_ac_his.br_no = kk.br_no
                          and t_acc_general_ledger_ac_his.gl_code = kk.gl_code)
                        where 1=1
                          and d_prev_bal > '0'
                          and ac_date = trunc(now() - 1);
            
            
              update t_acc_general_ledger_ac_his
                 set c_curr_bal =
                     (with kk as (select br_no,
                                         gl_code,
                                         d_prev_bal,
                                         c_prev_bal,
                                         ac_date,
                                         curr_bal
                                    from (SELECT br_no,
                                                 gl_code,
                                                 ac_date,
                                                 d_prev_bal,
                                                 c_prev_bal,
                                                 CASE
                                                   WHEN c_prev_bal > '0' THEN
                                                    nvl(c_prev_bal,  0) +
                                                    nvl(c_curr_amt,  0) -
                                                    nvl(d_curr_amt,  0)
                                                   when d_prev_bal > '0' then
                                                    nvl(d_prev_bal,  0) +
                                                    nvl(d_curr_amt,  0) -
                                                    nvl(c_curr_amt,  0)
                                                   ELSE
                                                    nvl(d_curr_amt,  0) -
                                                    nvl(c_curr_amt,  0)
                                                 END curr_bal
                                            FROM t_acc_general_ledger_ac_his
                                           WHERE ac_date = trunc(now() - 1)
                                             and 1=1)
                                   where d_prev_bal > '0')
                       select decode(sign(curr_bal), 1, 0, abs(curr_bal))
                         from kk
                        where t_acc_general_ledger_ac_his.br_no = kk.br_no
                          and t_acc_general_ledger_ac_his.gl_code = kk.gl_code)
                        where 1=1
                          and d_prev_bal > '0'
                          and ac_date = trunc(now() - 1);
            
            end if;
          
            if v_c_count > 0 then
              update t_acc_general_ledger_ac_his
                 set d_curr_bal =
                     (with kk as (select br_no,
                                         gl_code,
                                         d_prev_bal,
                                         c_prev_bal,
                                         ac_date,
                                         curr_bal
                                    from (SELECT br_no,
                                                 gl_code,
                                                 ac_date,
                                                 d_prev_bal,
                                                 c_prev_bal,
                                                 CASE
                                                   WHEN c_prev_bal > '0' THEN
                                                    nvl(c_prev_bal,  0) +
                                                    nvl(c_curr_amt,  0) -
                                                    nvl(d_curr_amt,  0)
                                                   when d_prev_bal > '0' then
                                                    nvl(d_prev_bal,  0) +
                                                    nvl(d_curr_amt,  0) -
                                                    nvl(c_curr_amt,  0)
                                                   ELSE
                                                    nvl(d_curr_amt,  0) -
                                                    nvl(c_curr_amt,  0)
                                                 END curr_bal
                                            FROM t_acc_general_ledger_ac_his
                                           WHERE ac_date = trunc(now() - 1)
                                             and 1=1)
                                   where c_prev_bal > '0')
                       select decode(sign(curr_bal), 1, 0, abs(curr_bal))
                         from kk
                        where t_acc_general_ledger_ac_his.br_no = kk.br_no
                          and t_acc_general_ledger_ac_his.gl_code = kk.gl_code)
                        where 1=1
                          and c_prev_bal > '0'
                          and ac_date = trunc(now() - 1);
            
            
              update t_acc_general_ledger_ac_his
                 set c_curr_bal =
                     (with kk as (select br_no,
                                         gl_code,
                                         d_prev_bal,
                                         c_prev_bal,
                                         ac_date,
                                         curr_bal
                                    from (SELECT br_no,
                                                 gl_code,
                                                 ac_date,
                                                 d_prev_bal,
                                                 c_prev_bal,
                                                 CASE
                                                   WHEN c_prev_bal > '0' THEN
                                                    nvl(c_prev_bal,  0) +
                                                    nvl(c_curr_amt,  0) -
                                                    nvl(d_curr_amt,  0)
                                                   when d_prev_bal > '0' then
                                                    nvl(d_prev_bal,  0) +
                                                    nvl(d_curr_amt,  0) -
                                                    nvl(c_curr_amt,  0)
                                                   ELSE
                                                    nvl(d_curr_amt,  0) -
                                                    nvl(c_curr_amt,  0)
                                                 END curr_bal
                                            FROM t_acc_general_ledger_ac_his
                                           WHERE ac_date = trunc(now() - 1)
                                             and 1=1)
                                   where c_prev_bal > '0')
                       select decode(sign(curr_bal), 1, abs(curr_bal), 0)
                         from kk
                        where t_acc_general_ledger_ac_his.br_no = kk.br_no
                          and t_acc_general_ledger_ac_his.gl_code = kk.gl_code)
                        where 1=1
                          and c_prev_bal > '0'
                          and ac_date = trunc(now() - 1);
            
            end if;
          
            if v_b_count > 0 then
              UPDATE t_acc_general_ledger_ac_his
                 SET d_curr_bal =
                     (WITH kk AS (SELECT br_no,
                                         gl_code,
                                         ac_date,
                                         d_prev_bal,
                                         c_prev_bal,
                                         d_curr_amt,
                                         c_curr_amt,
                                         CASE
                                           WHEN c_prev_bal > '0' THEN
                                            nvl(c_prev_bal,  0) +
                                            nvl(c_curr_amt,  0) -
                                            nvl(d_curr_amt,  0)
                                           WHEN d_prev_bal > '0' THEN
                                            nvl(d_prev_bal,  0) +
                                            nvl(d_curr_amt,  0) -
                                            nvl(c_curr_amt,  0)
                                           ELSE
                                            nvl(d_curr_amt, 0) -
                                            nvl(c_curr_amt, 0)
                                         END curr_bal
                                    FROM t_acc_general_ledger_ac_his
                                   WHERE ac_date = TRUNC(now() - 1)
                                     AND 1=1
                                     AND (c_prev_bal IS NULL OR c_prev_bal = '0')
                                     AND (d_prev_bal IS NULL OR d_prev_bal = '0')
                                     AND (cast(t_acc_general_ledger_ac_his.D_CURR_AMT  as numeric) >
                                         cast(t_acc_general_ledger_ac_his.C_CURR_AMT  as numeric)))
                       SELECT DECODE(SIGN(curr_bal), 1, curr_bal, 0)
                         FROM kk
                        WHERE t_acc_general_ledger_ac_his.br_no = kk.br_no
                          AND t_acc_general_ledger_ac_his.gl_code = kk.gl_code)
                        WHERE 1=1
                          AND (c_prev_bal IS NULL OR c_prev_bal = '0')
                          AND (d_prev_bal IS NULL OR d_prev_bal = '0')
                          AND cast(t_acc_general_ledger_ac_his.D_CURR_AMT  as numeric) >
                              cast (t_acc_general_ledger_ac_his.C_CURR_AMT  as numeric)
                          AND ac_date = trunc(now() - 1);
            
            
              UPDATE t_acc_general_ledger_ac_his
                 SET c_curr_bal =
                     (WITH kk AS (SELECT br_no,
                                         gl_code,
                                         ac_date,
                                         d_prev_bal,
                                         c_prev_bal,
                                         d_curr_amt,
                                         c_curr_amt,
                                         CASE
                                           WHEN c_prev_bal > '0' THEN
                                            nvl(c_prev_bal,  0) +
                                            nvl(c_curr_amt,  0) -
                                            nvl(d_curr_amt,  0)
                                           WHEN d_prev_bal > '0' THEN
                                            nvl(d_prev_bal, 0) +
                                            nvl(d_curr_amt, 0) -
                                            nvl(c_curr_amt, 0)
                                           ELSE
                                            nvl(d_curr_amt,  0) -
                                            nvl(c_curr_amt,  0)
                                         END curr_bal
                                    FROM t_acc_general_ledger_ac_his
                                   WHERE ac_date = TRUNC(now() - 1)
                                     AND 1=1
                                     AND (c_prev_bal IS NULL OR c_prev_bal = '0')
                                     AND (d_prev_bal IS NULL OR d_prev_bal = '0')
                                     AND (cast(t_acc_general_ledger_ac_his.D_CURR_AMT  as numeric) >
                                         cast(t_acc_general_ledger_ac_his.C_CURR_AMT  as numeric)))
                       SELECT DECODE(SIGN(curr_bal), 1, 0, ABS(curr_bal))
                         FROM kk
                        WHERE t_acc_general_ledger_ac_his.br_no = kk.br_no
                          AND t_acc_general_ledger_ac_his.gl_code = kk.gl_code)
                        WHERE 1=1
                          AND (c_prev_bal IS NULL OR c_prev_bal = '0')
                          AND (d_prev_bal IS NULL OR d_prev_bal = '0')
                          AND cast(t_acc_general_ledger_ac_his.D_CURR_AMT  as numeric) >
                              cast(t_acc_general_ledger_ac_his.C_CURR_AMT  as numeric)
                          AND ac_date = trunc(now() - 1);
            
            end if;
          
            if v_a_count > 0 then
              UPDATE t_acc_general_ledger_ac_his
                 SET c_curr_bal =
                     (WITH kk AS (SELECT br_no,
                                         gl_code,
                                         ac_date,
                                         d_prev_bal,
                                         c_prev_bal,
                                         d_curr_amt,
                                         c_curr_amt,
                                         CASE
                                           WHEN c_prev_bal > '0' THEN
                                            nvl(c_prev_bal,  0) +
                                            nvl(c_curr_amt,  0) -
                                            nvl(d_curr_amt,  0)
                                           WHEN d_prev_bal > '0' THEN
                                            nvl(d_prev_bal, 0) +
                                            nvl(d_curr_amt, 0) -
                                            nvl(c_curr_amt, 0)
                                           ELSE
                                            nvl(d_curr_amt,  0) -
                                            nvl(c_curr_amt,  0)
                                         END curr_bal
                                    FROM t_acc_general_ledger_ac_his
                                   WHERE ac_date = trunc(now() - 1)
                                     AND 1=1
                                     AND (c_prev_bal IS NULL OR c_prev_bal = '0')
                                     AND (d_prev_bal IS NULL OR d_prev_bal = '0')
                                     AND (cast(t_acc_general_ledger_ac_his.D_CURR_AMT  as numeric) <
                                         cast(t_acc_general_ledger_ac_his.C_CURR_AMT  as numeric)))
                       SELECT DECODE(SIGN(curr_bal), -1, ABS(curr_bal), 0)
                         FROM kk
                        WHERE t_acc_general_ledger_ac_his.br_no = kk.br_no
                          AND t_acc_general_ledger_ac_his.gl_code = kk.gl_code)
                        WHERE 1=1
                          AND (c_prev_bal IS NULL OR c_prev_bal = '0')
                          AND (d_prev_bal IS NULL OR d_prev_bal = '0')
                          AND cast(t_acc_general_ledger_ac_his.D_CURR_AMT  as numeric) <
                              cast(t_acc_general_ledger_ac_his.C_CURR_AMT  as numeric)
                          AND ac_date = trunc(now() - 1);
            
              UPDATE t_acc_general_ledger_ac_his
                 SET d_curr_bal =
                     (WITH kk AS (SELECT br_no,
                                         gl_code,
                                         ac_date,
                                         d_prev_bal,
                                         c_prev_bal,
                                         d_curr_amt,
                                         c_curr_amt,
                                         CASE
                                           WHEN c_prev_bal > '0' THEN
                                            nvl(c_prev_bal,  0) +
                                            nvl(c_curr_amt,  0) -
                                            nvl(d_curr_amt,  0)
                                           WHEN d_prev_bal > '0' THEN
                                            nvl(d_prev_bal,  0) +
                                            nvl(d_curr_amt,  0) -
                                            nvl(c_curr_amt,  0)
                                           ELSE
                                            nvl(d_curr_amt,  0) -
                                            nvl(c_curr_amt,  0)
                                         END curr_bal
                                    FROM t_acc_general_ledger_ac_his
                                   WHERE ac_date = trunc(now() - 1)
                                     AND 1=1
                                     AND (c_prev_bal IS NULL OR c_prev_bal = '0')
                                     AND (d_prev_bal IS NULL OR d_prev_bal = '0')
                                     AND (cast(t_acc_general_ledger_ac_his.D_CURR_AMT  as numeric) <
                                         cast(t_acc_general_ledger_ac_his.C_CURR_AMT  as numeric)))
                       SELECT DECODE(SIGN(curr_bal), -1, 0, ABS(curr_bal))
                         FROM kk
                        WHERE t_acc_general_ledger_ac_his.br_no = kk.br_no
                          AND t_acc_general_ledger_ac_his.gl_code = kk.gl_code)
                        WHERE 1=1
                          AND (c_prev_bal IS NULL OR c_prev_bal = '0')
                          AND (d_prev_bal IS NULL OR d_prev_bal = '0')
                          AND cast(t_acc_general_ledger_ac_his.D_CURR_AMT  as numeric) <
                              cast(t_acc_general_ledger_ac_his.C_CURR_AMT  as numeric)
                          AND ac_date = trunc(now() - 1);
            
            end if;
          end if;
    
        raise notice 'begin insert  t_acc_general_ledger_ac_his T1';
    
          insert into t_acc_general_ledger_ac_his
            (br_no, gl_code)
            select br_no, gl_code
              from t_acc_general_ledger_ac_his
             where ac_date = trunc(now() - 2)
            minus
            select br_no, gl_code
              from t_acc_general_ledger_ac_his
             where ac_date = trunc(now() - 1);
    
          UPDATE t_acc_general_ledger_ac_his t2
             SET (d_prev_bal) =
                 (WITH kk AS (SELECT br_no,
                                     gl_code,
                                     ac_date,
                                     lag(d_curr_bal::bigint, 1,0::bigint) over(order by ac_date) d_prev_bal_next,
                                     lag(c_curr_bal::bigint, 1,0::bigint) over(order by ac_date) c_prev_bal_next
                                FROM t_acc_general_ledger_ac_his
                               WHERE (br_no, gl_code) IN
                                     (SELECT br_no, gl_code
                                        FROM t_acc_general_ledger_ac_his
                                       WHERE ac_date =  trunc(now() - 2)
                                      MINUS
                                      SELECT br_no, gl_code
                                        FROM t_acc_general_ledger_ac_his
                                       WHERE ac_date = trunc(now() - 1)))
                   SELECT d_prev_bal_next
                     FROM kk
                    WHERE kk.br_no = t2.br_no
                      AND kk.gl_code = t2.gl_code
                      AND kk.ac_date IS NULL)
                    WHERE ac_date IS NULL
                      AND (br_no, gl_code) IN
                          (SELECT br_no, gl_code
                             FROM t_acc_general_ledger_ac_his
                            WHERE ac_date =  trunc(now() - 2)
                           MINUS
                           SELECT br_no, gl_code
                             FROM t_acc_general_ledger_ac_his
                            WHERE ac_date = trunc(now() - 1));
    
        raise notice 'begin updte  t_acc_general_ledger_ac_his T2';
        
          UPDATE t_acc_general_ledger_ac_his t2
             SET (c_prev_bal) =
                 (WITH kk AS (SELECT br_no,
                                     gl_code,
                                     ac_date,
                                     lag(d_curr_bal::bigint, 1,0::bigint) over(partition BY br_no, gl_code order by ac_date) d_prev_bal_next,
                                     lag(c_curr_bal::bigint, 1,0::bigint) over(partition BY br_no, gl_code order by ac_date) c_prev_bal_next
                                FROM t_acc_general_ledger_ac_his
                               WHERE (br_no, gl_code) IN
                                     (SELECT br_no, gl_code
                                        FROM t_acc_general_ledger_ac_his
                                       WHERE ac_date =  trunc(now() - 2)
                                      MINUS
                                      SELECT br_no, gl_code
                                        FROM t_acc_general_ledger_ac_his
                                       WHERE ac_date = trunc(now() - 1)))
                   SELECT c_prev_bal_next
                     FROM kk
                    WHERE kk.br_no = t2.br_no
                      AND kk.gl_code = t2.gl_code
                      AND kk.ac_date IS NULL)
                    WHERE ac_date IS NULL
                      AND (br_no, gl_code) IN
                          (SELECT br_no, gl_code
                             FROM t_acc_general_ledger_ac_his
                            WHERE ac_date =  trunc(now() - 2)
                           MINUS
                           SELECT br_no, gl_code
                             FROM t_acc_general_ledger_ac_his
                            WHERE ac_date = trunc(now() - 1));
            
          update t_acc_general_ledger_ac_his
             set d_curr_bal = d_prev_bal, c_curr_bal = c_prev_bal
           where ac_date is null;
    
        raise notice 'begin updte [last]  t_acc_general_ledger_ac_his';
        
          UPDATE t_acc_general_ledger_ac_his
             SET seq_no     = t_acc_general_ledger_ac_his_seq_no_seq.nextval,
                 d_count    = '0',
                 c_count    = '0',
                 d_curr_amt = '0',
                 c_curr_amt = '0',
                 ac_date    = trunc(now() - 1),
                 ccy        = INCCY
           WHERE ac_date IS NULL
             AND (br_no, gl_code) IN
                 (SELECT br_no, gl_code
                    FROM t_acc_general_ledger_ac_his
                   WHERE ac_date = trunc(now() - 2)
                  MINUS
                  SELECT br_no, gl_code
                    FROM t_acc_general_ledger_ac_his
                   WHERE ac_date = trunc(now() - 1));
          --commit;
        else
          --dbms_output.put_line('error!');
          raise notice 'error!'; --for language plpgsql
        end if;
        raise notice 'begin call P_SUBJECT_SHEET';
        perform P_SUBJECT_SHEET('CNY');
      EXCEPTION
        WHEN OTHERS THEN
          v_code := 0;
          v_errm := SUBSTR(SQLERRM, 1, 256);
          INSERT INTO t_errors
            (code, MESSAGE, PRO_NAME, RUN_DATE)
          VALUES
            (v_code, v_errm, 'P_LOOP_COUNT_SHEET', now());
      END;
    $BODY$
      LANGUAGE 'plpgsql' VOLATILE COST 100
    ;
    
    ALTER FUNCTION "acc_user"."p_loop_count_sheet"(inccy varchar) OWNER TO "acc_user";
  • 相关阅读:
    TOI2008 二元一次联立方程式
    福州三中信息学奥赛培训网址
    Youtube视频下载方式
    abs和其他绝对值的区别
    【转】C语言浮点数运算
    [转]解析字符串的方法
    TOI2008 大数运算
    【ZeroJudge】d781 Anagram
    【转载】NDatabase 5 Minutes Tutorial
    左岸读书编程是最能表达人类的思维的语言
  • 原文地址:https://www.cnblogs.com/wanglijun/p/8673095.html
Copyright © 2020-2023  润新知