【问题标题】:Output of Stored Procedure存储过程的输出
【发布时间】:2014-04-18 16:33:55
【问题描述】:

谁能告诉我如何在 oracle 中执行以下存储过程:-

 create or replace PROCEDURE spValidateDBA(
    UserId IN VARCHAR2,
    UserPassword IN VARCHAR2,
  UserRole OUT STRING_ARRAY)
  AS
BEGIN
EXECUTE IMMEDIATE 'select GRANTED_ROLE into UserRole from DBA_USERS DU,DBA_ROLE_PRIVS DRP where DU.USERNAME=UserId and
    DU.PASSWORD=UserPassword AND DU.USERNAME=DRP.GRANTEE';
    END spValidateDBA;

STRING_ARRAY 是此语句中声明的字符串数组类型:- 将 STRING_ARRAY 类型创建为 VARCHAR2(50) 的表;

如有任何问题,请告诉我。

【问题讨论】:

  • DBA_USERS 中的列PASSWORD 仅包含密码哈希,而不包含明文密码。
  • 有没有办法针对特定用户验证数据库密码以进行用户验证?
  • 我认为这是不可能的。用户在登录到必须输入个人密码的数据库时得到验证。
  • 也许获得所需信息的更短的方法是这个函数:DBMS_SESSION.IS_ROLE_ENABLED(<rolename>)。它还包括一个角色是否被授予另一个角色。

标签: oracle stored-procedures


【解决方案1】:

您需要编写匿名 pl/sql 块:

DECLARE
<declare variables>
BEGIN
<set values to the variables>
spValidateDBA(<your variables>);
END;
/

如果您在 SQL*Plus 或类似的环境中运行,则最后需要额外的 /。 如果您通过某些 API 运行,则可能不需要它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-05
    • 1970-01-01
    • 1970-01-01
    • 2015-10-15
    • 2011-06-01
    相关资源
    最近更新 更多