`

在存储过程中调用dbms_包的权限问题

阅读更多
遇到一个问题,如下:
ETL@RACTEST> begin
  2  DBMS_LOCK.sleep(1);
  3  end;
  4  /

PL/SQL procedure successfully completed.

但是
ETL@RACTEST> CREATE OR REPLACE PROCEDURE etl.pliutest
  2  authid current_user
  3  AS
  4  BEGIN
  5     DBMS_LOCK.sleep(1);
  6  END;
  7  /


Warning: Procedure created with compilation errors.

Elapsed: 00:00:00.07
ETL@RACTEST> ETL@RACTEST> show errors
Errors for PROCEDURE ETL.PLIUTEST:

LINE/COL ERROR
-------- -----------------------------------------------------------------
5/2      PL/SQL: Statement ignored
5/2      PLS-00201: identifier 'DBMS_LOCK' must be declared

同一个包,在相同的用户下的匿名程序块中可以执行,但是在存储过程中却没有权限执行,查了下资料,一些DBMS_开头的pkg在pl/sql中用到的时候,需要显示的执行
grant execute on dbms_xxxx to xxx 来赋下权限才可以。此外这个授权system用户是没有权限的,要sys 或者plsql / as dba登录才有权限授权。
授权以后可以看到:
SYSTEM@RACTEST> select grantee,owner,table_name,grantor,privilege from dba_tab_privs where table_name like 'DBMS_LOCK';

GRANTEE                                  OWNER      TABLE_NAME       GRANTOR     PRIVILEGE
--------------------                    ----------           ----------            ----------           ----------
EXECUTE_CATALOG_ROLE                       SYS              DBMS_LOCK          SYS             EXECUTE
DMSYS                                    SYS               DBMS_LOCK         SYS             EXECUTE
CTXSYS                                   SYS               DBMS_LOCK         SYS             EXECUTE
EXFSYS                                   SYS               DBMS_LOCK         SYS             EXECUTE
MDSYS                                    SYS               DBMS_LOCK         SYS             EXECUTE
OLAPSYS                                SYS                DBMS_LOCK        SYS             EXECUTE
SYSMAN                                  SYS               DBMS_LOCK         SYS             EXECUTE
ETL                                         SYS               DBMS_LOCK         SYS             EXECUTE

8 rows selected.

然后再次执行:
SYSTEM@RACTEST> CREATE OR REPLACE PROCEDURE etl.pliutest
  2  authid current_user
  3  AS
  4  BEGIN
  5     DBMS_LOCK.sleep(1);
  6  END;
  7  /


Procedure created.

OK了!

 转自:http://blog.sina.com.cn/s/blog_6ff05a2c0100mico.html

分享到:
评论

相关推荐

    Oracle存储过程调用bat批处理脚本程序

    在实际应用中,我们需要确保安全性和权限控制,因为允许存储过程直接调用操作系统命令可能存在安全风险。因此,通常只会在受信任的环境中,并且在严格控制权限的情况下使用这种方法。同时,对存储过程进行充分的测试...

    oracle通过存储过程POST方式访问接口

    存储过程是预编译的SQL和PL/SQL语句集合,它们存储在数据库中并可以被调用执行。通过存储过程,我们可以封装复杂的业务逻辑,提高代码复用性和执行效率。 在Oracle中,访问接口通常需要使用UTL_HTTP或者DBMS_HTTP包...

    Oracle存储过程中任务和管道的应用

    Oracle 存储过程中任务和管道的应用 ...在 Oracle 存储过程中任务和管道的应用可以解决客户端调用存储过程后长时间没有反应的问题,并且可以实时了解存储过程的运行状态。这种方法可以提高系统的性能和可靠性。

    DBMS.rar_dbms_visual c_数据库管理_数据库管理系统_管理系统

    数据库管理系统(DBMS)是计算机科学中的一个关键领域,它为组织、存储和检索数据提供了高效、可靠且灵活的方法。在“DBMS.rar_dbms_visual c_数据库管理_数据库管理系统_管理系统”这个压缩包中,我们可以看到两个...

    Oracle里取随机数的几种具体的方法

    4. 调用 DBMS_RANDOM.VALUE 函数生成随机数,并将其存储在临时表 tmp_2 中。 5. 将临时表 tmp_1 和 tmp_2 相关联,取得符合条件的随机记录。 6. 最后,删除临时表 tmp_1、tmp_2 和序列号 tmp_id。 例如,以下是使用...

    oracle 高效生成指定复杂样式的xml文件

    首先,将XSL样式表存储在数据库中,然后通过PL/SQL过程调用DBMS_XSLPROCESSOR.CLOB2BFILE或CLOB2FILE将XML数据转换为所需样式。 5. **示例代码**: - `pro_test_info_gen.prc`可能是一个PL/SQL过程,用于生成测试...

    oracle调用存储过程

    `DBMS_OUTPUT`包提供了一个在PL/SQL中输出信息的方法,这对于调试存储过程非常有用。 综上所述,Oracle调用存储过程涉及到许多方面,从创建、调用到参数管理和异常处理,都需要对Oracle的PL/SQL语法和数据库管理有...

    通过ORACLE的UTL_HTTP工具包发送包含POST参数的请求

    此外,为了能够通过存储在Oracle钱包中的凭据验证自己,用户还需要具有`use-client-certificates`或`use-passwords`权限。 #### 常量与数据类型 `UTL_HTTP`定义了一系列常量和数据类型来支持HTTP操作,例如`METHOD...

    存储过程- 06.在应用程序中调用存储过程

    在IT领域,存储过程是数据库管理系统(DBMS)中预编译的SQL语句集合,它们可以被封装起来,以供以后重复使用。存储过程在提高应用性能、增强安全性、减少网络流量以及实现复杂的业务逻辑方面具有显著优势。本主题将...

    Oracle_PLSQL_存储过程

    - **存储过程作用:** 在Oracle中,存储过程可以用于封装这些规则和逻辑,使之成为可重用的组件。 **创建权限:** - **CREATE PROCEDURE权限:** 允许用户创建存储过程。 - **CREATE ANY PROCEDURE权限:** 允许...

    Oracle存储过程学习经典[语法+实例+调用].

    - **实现方式**: 通过Oracle的Java存储过程支持,可以在存储过程中直接调用Java方法。 - **应用场景**: 实现复杂的数据处理逻辑,例如文件操作、外部系统集成等。 #### 七、Oracle高效分页存储过程实例 - **...

    TX_CON_0088_oracle_oracle存储过程实战_

    `IN`表示参数值在调用时传入,`OUT`表示在过程执行后传出。`AS`关键字后定义了过程体,其中包含了一条SQL语句,用于计算`param2`的值。 其次,实现存储过程涉及到编写和执行PL/SQL代码。PL/SQL是Oracle专有的编程...

    Oracle JOB 用法小结

    在实际操作中,可以通过创建表、过程和调用`dbms_job`包的子程序来设置和管理作业。例如,可以创建一个每隔一分钟执行一次的作业,用于插入当前日期到表中。一旦不再需要,可以使用`Remove()`过程将其删除。 总之,...

    Killtest1Z0-147.pdf

    在Oracle数据库管理中,DBMS_LOB是一个重要的包,提供了对大型对象(LOB)进行操作的一系列过程和函数。在1Z0-147考试的相关内容中,DBMS_LOB包是处理BFILE和CLOB等大型数据类型的关键工具。 1. DBMS_LOB包的用途:...

    sqlserverOracle小小存储过程小例子及API

    在数据库管理领域,存储过程是预编译的SQL语句集合,它们被封装在一起,以供将来调用。本文将围绕“sqlserverOracle小小存储过程小例子及API”这一主题,探讨SQL Server和Oracle数据库中存储过程的基础知识、创建与...

    oracle存储过程学习经典[语法+实例+调用]

    - **本地动态SQL与DBMS_SQL包**:在存储过程中,可以通过编写动态SQL语句或使用`DBMS_SQL`包来实现更灵活的数据处理。 #### 五、高级特性 - **动态查询**:存储过程可以支持简单的动态查询,这通常涉及到动态生成...

Global site tag (gtag.js) - Google Analytics