ORACLE存储过程、定时任务、赋予用户只读视图

-- 创建存储过程
create or replace procedure SYNC_YESTERDAY_SETTLEMENT_DATA as
begin
    INSERT INTO YW_SKJL_VIEW(SKJLID, GRBH, XM, SFZH, JGBH, JGMC, SKSJ, JSSJ, SFDB, BDJG, LSH, MBZP, XCZP, AKC190,
                             AAE072,
                             DBRSFZH, DBRXM, DBRLXFS, DBGX, DBYY)
    SELECT MIN(S.SKJLID)                                                    SKJLID,
           MIN(S.PERSONALNUMBER)                                            GRBH,
           MIN(S.XM)                                                        XM,
           MIN(S.SFZH)                                                      SFZH,
           MIN(L.INSTITUTION_NO)                                            JGBH,
           MIN(L.JGMC)                                                      JGMC,
           MIN(S.SKSJ)                                                      SKSJ,
           MIN(TO_CHAR(S.SKSJ, 'yyyymmddhh24miss'))                         JSSJ,
           MAX(S.SUBSTITUTES)                                               SFDB,
           MAX(S.BDSFCG)                                                    BDJG,
           S.LSH,
           MAX(DECODE(S.SUBSTITUTES, 0,
                      DECODE(S.FIRST_TEMPLATE_PHOTO, NULL, S.SECOND_TEMPLATE_PHOTO, S.FIRST_TEMPLATE_PHOTO),
                      S.SUBSTITUTEPHOTOPATH))                               MBZP,
           MAX(DECODE(S.SUBSTITUTES, 0, S.SKRXZPLJ, S.SUBSTITUTEPHOTOPATH)) XCZP,
           MAX(S.VISIT_SERIAL_NUMBER)                                       AKC190,
           MAX(S.DOC_CODE)                                                  AAE072,
           MAX(S.SUBSTITUTEID)                                              DBRSFZH,
           MAX(S.SUBSTITUTENAME)                                            DBRXM,
           MAX(S.SUBSTITUTEMOBILE)                                          DBRLXFS,
           MAX(S.SUBSTITUTEREASON)                                          DBGX,
           MAX(S.SUBSTITUTERELATION)                                        DBYY
    FROM YW_SKJL S,
         JC_LDJG L
    WHERE S.YDH = L.JGDM
      AND S.ZPLX != -5
      AND S.ZPLX != -6
      AND S.ZPLX != -2
      AND NOT EXISTS(SELECT 1 FROM YW_SKJL_VIEW V WHERE S.SKJLID = V.SKJLID)
      AND TO_CHAR(S.SKSJ, 'yyyyMMdd') = TO_CHAR(sysdate - 2, 'yyyyMMdd')
    GROUP BY S.LSH;
end;
-- 创建定时任务
declare
    tm_job number;
begin
    dbms_job.submit(tm_job,
                    'SYNC_YESTERDAY_SETTLEMENT_DATA;',
                    TRUNC(sysdate + 1) + 1 / 24,
                    'TRUNC(sysdate+1)+1/24'
        );
    commit;
end;
-- 查询定时器
select *
from user_jobs;
-- 运行定时器
begin
    DBMS_JOB.RUN(63);
end ;
-- 删除
begin
    dbms_job.remove(63);
end;

/*结算明细清单*/
SELECT
   LSH,
   S.PERSONALNUMBER GRBH,
   J.XM,
   J.SFZH,
   L.INSTITUTION_NO JGBH,
   L.JGMC,
   TO_CHAR(S.SKSJ,'yyyymmddhh24miss') JSSJ,
   S.SUBSTITUTES SFDB,
   DECODE(S.zplx, 1, 1, 2, 1, 3, 1, 0) BDJG
FROM YW_SKJL S
    LEFT JOIN YW_JZZP J ON S.ZPID = J.ZPID,
 JC_LDJG L
WHERE S.YDH = L.JGDM
ORDER BY S.SKSJ DESC;

create or replace  view v_hzfi_settlementDetails
as
/*考勤明细清单(LX: 1:签到 2:签退  BDJG: 0:失败 1:成功)*/
SELECT D.DOCTORNAME              XM,
   D.DOCTORIDCARDNUMBER      SFZH,
   L.INSTITUTION_NO          JGBH,
   L.JGMC,
   DECODE(D.TYPE,2,2,1)                    LX,
   TO_CHAR(D.ATTENDANCETIME,'yyyymmddhh24miss')          KQSJ,
   DECODE(D.RESULT, 1, 1, 0) BDJG
FROM YW_ATTENDANCERECORD D,
 JC_LDJG L
WHERE D.HOSPITALID = L.ID ORDER BY KQSJ DESC ;

create user hzfi identified by "hzsi#2020";
grant connect to hzfi;
/*#给表赋予权限*/
grant select on v_hzfi_settlementDetails to hzfi;
grant select on v_hzfi_attendanceDetails to hzfi;
/*#创建同义词*/
grant create synonym to hzfi;
create or replace synonym hzfi.v_hzfi_settlementDetails for v_hzfi_settlementDetails;
create or replace synonym hzfi.v_hzfi_attendanceDetails for v_hzfi_attendanceDetails;
/*注意:如果不创建同义词,那么hzfi用户查询表时,必须使用table这类的写法,不能直接用table.*/
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Oracle数据库中设置定时任务,可以使用Oracle的调度程序(Scheduler)。以下是一种设置定时任务的方法: 1. 创建一个存储过程(Stored Procedure)来执行需要定时执行的任务。例如,创建一个名为"my_task"的存储过程。 ```sql CREATE OR REPLACE PROCEDURE my_task AS BEGIN -- 执行任务的逻辑代码 NULL; END; ``` 2. 创建一个调度程序作业(Job),将存储过程绑定到作业上。可以使用DBMS_SCHEDULER包中的CREATE_JOB过程来创建作业。以下是一个示例: ```sql BEGIN DBMS_SCHEDULER.CREATE_JOB ( job_name => 'my_job', job_type => 'STORED_PROCEDURE', job_action => 'my_task', start_date => SYSTIMESTAMP, repeat_interval => 'FREQ=DAILY;BYHOUR=0;BYMINUTE=0;BYSECOND=0', end_date => NULL, enabled => TRUE, comments => 'Scheduled job to run daily' ); END; ``` 在上面的示例中,作业名为"my_job",类型为"STORED_PROCEDURE",执行的动作是调用存储过程"my_task"。重复间隔设置为每天执行一次(BYHOUR=0表示小时为0,BYMINUTE=0表示分钟为0,BYSECOND=0表示秒为0),并且没有结束日期。最后,enabled参数设置为TRUE,表示启用该作业。 3. 如果需要修改或删除作业,可以使用DBMS_SCHEDULER包中的相关过程。例如,可以使用ALTER_JOB过程修改作业的属性,使用DROP_JOB过程删除作业。 ```sql -- 修改作业属性 BEGIN DBMS_SCHEDULER.ALTER_JOB ( job_name => 'my_job', repeat_interval => 'FREQ=DAILY;BYHOUR=1;BYMINUTE=30;BYSECOND=0' ); END; -- 删除作业 BEGIN DBMS_SCHEDULER.DROP_JOB ( job_name => 'my_job' ); END; ``` 这些是使用Oracle的调度程序(Scheduler)来设置定时任务的基本步骤。根据具体需求,可以进一步配置作业的属性,如重复间隔、结束日期等。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值