oracle存储过程动态执行sql语句-execute immediate方法执行sql 报权限不足解决

本文介绍了一种在Oracle数据库中解决存储过程执行SQL语句权限不足的问题,通过添加AUTHID CURRENT_USER参数,重新创建存储过程,确保执行时具有足够的权限。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入代码片


CREATE OR REPLACE PROCEDURE PRO_UPDATECARDVIEW(STYPE VARCHAR2, EA_CO_NAME VARCHAR2)**AUTHID  CURRENT_USER** IS
v_createsql varchar2(4000);
v_coname varchar2(4000);
BEGIN
  v_coname:=EA_CO_NAME;
  IF   STYPE='L1'
  THEN
    IF v_coname='0'
      THEN
       v_createsql:='CREATE OR REPLACE VIEW V_CARD_SWIPE_DATA AS
       SELECT
        ea_msgtime
        ,ea_insertdatetime
        ,EA_PE_FIRSTNAME
        ,EA_PE_CODE
        ,EA_CO_NAME
        ,EA_IB_NAME
        ,EA_RE_NAME
        ,EA_PE_DE_NAME
        ,to_char(ea_msgtime,''hh24'') AS hours
        from AIC_Access_EventMessageDataAccess@DATABASE_STDBP
        WHERE  EA_EVENTNAME=''通行成功'' AND ea_msgtime>=to_timestamp(''2019-07-01 00:00:00'',''yyyy-mm-dd hh24:mi:ss'')
        AND EA_CO_NAME IN (''MB2F Hookup管制口'')
        AND EA_PE_DE_NAME IS NOT NULL';
    END IF;
    IF v_coname='1'
      THEN
      v_createsql:='CREATE OR REPLACE VIEW V_CARD_SWIPE_DATA AS
      SELECT
        ea_msgtime
        ,ea_insertdatetime
        ,EA_PE_FIRSTNAME
        ,EA_PE_CODE
        ,EA_CO_NAME
        ,EA_IB_NAME
        ,EA_RE_NAME
        ,EA_PE_DE_NAME
        ,to_char(ea_msgtime,''hh24'') AS hours
        from AIC_Access_EventMessageDataAccess@DATABASE_STDBP
        WHERE  EA_EVENTNAME=''通行成功'' AND ea_msgtime>=to_timestamp(''2019-07-01 00:00:00'',''yyyy-mm-dd hh24:mi:ss'')
         AND Substr( EA_CO_NAME,0,4) IN (''厂区西门'',''111A'',''111C'')
        AND EA_PE_DE_NAME IS NOT NULL ';
    END IF;
    IF v_coname='2'
      THEN
        v_createsql:='CREATE OR REPLACE VIEW V_CARD_SWIPE_DATA AS
        SELECT
        ea_msgtime
        ,ea_insertdatetime
        ,EA_PE_FIRSTNAME
        ,EA_PE_CODE
        ,EA_CO_NAME
        ,EA_IB_NAME
        ,EA_RE_NAME
        ,EA_PE_DE_NAME
        ,to_char(ea_msgtime,''hh24'') AS hours
        from AIC_Access_EventMessageDataAccess@DATABASE_STDBP
        WHERE  EA_EVENTNAME=''通行成功'' AND ea_msgtime>=to_timestamp(''2019-07-01 00:00:00'',''yyyy-mm-dd hh24:mi:ss'')
         AND SUBSTR( EA_CO_NAME,0,7) IN (''TB1F-员工'',''TB1F-访客'')
        AND EA_PE_DE_NAME IS NOT NULL';
    END IF;
    IF v_coname='3'
      THEN
        v_createsql:='CREATE OR REPLACE VIEW V_CARD_SWIPE_DATA AS
        SELECT
        ea_msgtime
        ,ea_insertdatetime
        ,EA_PE_FIRSTNAME
        ,EA_PE_CODE
        ,EA_CO_NAME
        ,EA_IB_NAME
        ,CASE WHEN  EA_RE_NAME=''CUB1F-纯水站东门(中)'' THEN ''''
        WHEN  EA_RE_NAME=''CUB1F-化学药剂间'' THEN ''''
        END EA_RE_NAME
        ,EA_PE_DE_NAME
        ,to_char(ea_msgtime,''hh24'') AS hours
        from AIC_Access_EventMessageDataAccess@DATABASE_STDBP
        WHERE  ea_msgtime>=to_timestamp(''2019-07-01 00:00:00'',''yyyy-mm-dd hh24:mi:ss'')
        AND EA_RE_NAME IN (''CUB1F-纯水站东门(中)'',''CUB1F-化学药剂间'')
        AND EA_PE_DE_NAME IS NOT NULL';
      END IF;
      IF v_coname='4'
      THEN
        v_createsql:='CREATE OR REPLACE VIEW V_CARD_SWIPE_DATA AS
        SELECT
        ea_msgtime
        ,ea_insertdatetime
        ,EA_PE_FIRSTNAME
        ,EA_PE_CODE
        ,EA_CO_NAME
        ,EA_IB_NAME
        ,CASE WHEN  EA_RE_NAME=''106-1F南门'' THEN ''''
        WHEN  EA_RE_NAME=''106-1F北门'' THEN ''''
        END EA_RE_NAME
        ,EA_PE_DE_NAME
        ,to_char(ea_msgtime,''hh24'') AS hours
        from AIC_Access_EventMessageDataAccess@DATABASE_STDBP
        WHERE  ea_msgtime>=to_timestamp(''2019-07-01 00:00:00'',''yyyy-mm-dd hh24:mi:ss'')
        AND EA_RE_NAME IN (''106-1F南门'',''106-1F北门'')
        AND EA_PE_DE_NAME IS NOT NULL';
      END IF;
      IF v_coname='5'
      THEN
        v_createsql:='CREATE OR REPLACE VIEW V_CARD_SWIPE_DATA AS
        SELECT
        ea_msgtime
        ,ea_insertdatetime
        ,EA_PE_FIRSTNAME
        ,EA_PE_CODE
        ,EA_CO_NAME
        ,EA_IB_NAME
        ,CASE WHEN  EA_RE_NAME=''103栋设备平台二入口'' THEN ''''
        WHEN  EA_RE_NAME=''103-2#楼梯入口'' THEN ''出''
        END EA_RE_NAME
        ,EA_PE_DE_NAME
        ,to_char(ea_msgtime,''hh24'') AS hours
        from AIC_Access_EventMessageDataAccess@DATABASE_STDBP
        WHERE  ea_msgtime>=to_timestamp(''2019-07-01 00:00:00'',''yyyy-mm-dd hh24:mi:ss'')
        AND EA_RE_NAME IN (''103栋设备平台二入口'',''103-2#楼梯入口'')
        AND EA_PE_DE_NAME IS NOT NULL';
      END IF;
      IF v_coname='6'
      THEN
        v_createsql:='CREATE OR REPLACE VIEW V_CARD_SWIPE_DATA AS
        SELECT
        ea_msgtime
        ,ea_insertdatetime
        ,EA_PE_FIRSTNAME
        ,EA_PE_CODE
        ,EA_CO_NAME
        ,EA_IB_NAME
        ,CASE WHEN  EA_RE_NAME=''107-东北门'' THEN ''''
        WHEN  EA_RE_NAME=''107-东南门'' THEN ''''
        END EA_RE_NAME
        ,EA_PE_DE_NAME
        ,to_char(ea_msgtime,''hh24'') AS hours
        from AIC_Access_EventMessageDataAccess@DATABASE_STDBP
        WHERE  ea_msgtime>=to_timestamp(''2019-07-01 00:00:00'',''yyyy-mm-dd hh24:mi:ss'')
        AND EA_RE_NAME IN (''107-东北门'',''107-东南门'')
        AND EA_PE_DE_NAME IS NOT NULL';
      END IF;
      IF v_coname='7'
      THEN
        v_createsql:='CREATE OR REPLACE VIEW V_CARD_SWIPE_DATA AS
        SELECT
        ea_msgtime
        ,ea_insertdatetime
        ,EA_PE_FIRSTNAME
        ,EA_PE_CODE
        ,EA_CO_NAME
        ,EA_IB_NAME
        ,CASE WHEN  EA_RE_NAME=''108-1F-风机房'' THEN ''''
        WHEN  EA_RE_NAME=''108-1F-东大门'' THEN ''''
        END EA_RE_NAME
        ,EA_PE_DE_NAME
        ,to_char(ea_msgtime,''hh24'') AS hours
        from AIC_Access_EventMessageDataAccess@DATABASE_STDBP
        WHERE  ea_msgtime>=to_timestamp(''2019-07-01 00:00:00'',''yyyy-mm-dd hh24:mi:ss'')
        AND EA_RE_NAME IN (''108-1F-风机房'',''108-1F-东大门'')
        AND EA_PE_DE_NAME IS NOT NULL';
      END IF;
      IF v_coname='8'
      THEN
        v_createsql:='CREATE OR REPLACE VIEW V_CARD_SWIPE_DATA AS
        SELECT
        ea_msgtime
        ,ea_insertdatetime
        ,EA_PE_FIRSTNAME
        ,EA_PE_CODE
        ,EA_CO_NAME
        ,EA_IB_NAME
        ,CASE WHEN  EA_RE_NAME=''116A-103西门'' THEN ''''
        WHEN  EA_RE_NAME=''116A-102西门'' THEN ''''
        END EA_RE_NAME
        ,EA_PE_DE_NAME
        ,to_char(ea_msgtime,''hh24'') AS hours
        from AIC_Access_EventMessageDataAccess@DATABASE_STDBP
        WHERE  ea_msgtime>=to_timestamp(''2019-07-01 00:00:00'',''yyyy-mm-dd hh24:mi:ss'')
        AND EA_RE_NAME IN (''116A-103西门'',''116A-102西门'')
        AND EA_PE_DE_NAME IS NOT NULL';
      END IF;
      IF v_coname='9'
      THEN
        v_createsql:='CREATE OR REPLACE VIEW V_CARD_SWIPE_DATA AS
        SELECT
        ea_msgtime
        ,ea_insertdatetime
        ,EA_PE_FIRSTNAME
        ,EA_PE_CODE
        ,EA_CO_NAME
        ,EA_IB_NAME
        ,CASE WHEN  EA_RE_NAME=''116B-103北门'' THEN ''''
        WHEN  EA_RE_NAME=''116B-102北门'' THEN ''''
        END EA_RE_NAME
        ,EA_PE_DE_NAME
        ,to_char(ea_msgtime,''hh24'') AS hours
        from AIC_Access_EventMessageDataAccess@DATABASE_STDBP
        WHERE  ea_msgtime>=to_timestamp(''2019-07-01 00:00:00'',''yyyy-mm-dd hh24:mi:ss'')
        AND EA_RE_NAME IN (''116B-103北门'',''116B-102北门'')
        AND EA_PE_DE_NAME IS NOT NULL';
      END IF;
      IF v_coname='10'
      THEN
        v_createsql:='CREATE OR REPLACE VIEW V_CARD_SWIPE_DATA AS
        SELECT
        ea_msgtime
        ,ea_insertdatetime
        ,EA_PE_FIRSTNAME
        ,EA_PE_CODE
        ,EA_CO_NAME
        ,EA_IB_NAME
        ,CASE WHEN  EA_RE_NAME=''116C-102北门2'' THEN ''''
        WHEN  EA_RE_NAME=''116C-101北门'' THEN ''''
        END EA_RE_NAME
        ,EA_PE_DE_NAME
        ,to_char(ea_msgtime,''hh24'') AS hours
        from AIC_Access_EventMessageDataAccess@DATABASE_STDBP
        WHERE  ea_msgtime>=to_timestamp(''2019-07-01 00:00:00'',''yyyy-mm-dd hh24:mi:ss'')
        AND EA_RE_NAME IN (''116C-102北门2'',''116C-101北门'')
        AND EA_PE_DE_NAME IS NOT NULL';
      END IF;
    dbms_output.put_line(v_createsql);
     execute  immediate  v_createsql ;
  END IF;
END PRO_UPDATECARDVIEW;`

ORACLE创建存储过程,存储过程中使用execute immediate 执行sql语句时,报权限不足,此时需要修改存储过程,添加AUTHID CURRENT_USER,重新创建存储过程即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值