【问题标题】:Generating random numbers in oracle without dbms_rand在没有 dbms_rand 的 oracle 中生成随机数
【发布时间】:2020-11-02 17:31:53
【问题描述】:

我似乎无法使用 DBMSRAND。

GRANT EXECUTE ON DBMS_RANDOM TO *schema*;

ORA-01031: insufficient priveleges

不知道为什么,因为我使用 DBadmin 架构来授予,但是有人可以解决 oracle sql 中的随机数生成问题吗?

【问题讨论】:

  • 只需连接到sys as sysdbasystem 用户,然后按照问题授予。
  • 只是为了扩展一点@BarbarosÖzhan,错误消息的意思正是它所说的。您应该解决实际问题,而不是寻找一些解决方法。 “权限不足”意味着发出 GRANT 的用户没有发出 GRANT 的权限。我怀疑你是作为你想要授予它的用户连接的,但允许这样做将是一个大到足以让 Mac 卡车通过的安全漏洞。
  • 可以使用to_char(SYSTIMESTAMP, 'FF'),因为 SYSTIMESTAMP 的分辨率为纳秒级(取决于您的数据库服务器)。但可以肯定的是,正确的做法是:让您的 DBA 获得 DBMS_RANDOM 上的EXECUTE 权限。
  • 试试这个,如果它对你有帮助,直到你获得访问权限....stackoverflow.com/questions/30605545/…

标签: sql oracle


【解决方案1】:

如果你真的很绝望,你可以自己动手,例如这是一个 LG 的

SQL> create or replace
  2  package global is
  3    a number := to_number(to_char(systimestamp,'FF'));
  4  end;
  5  /

Package created.

SQL>
SQL> create or replace
  2  function rand(r in number) return number is
  3
  4    mill  constant  number:=100000000;
  5    ten_thou constant number:=10000;
  6    lg_num  constant  number:=31415821;
  7
  8    v number;
  9    w number;
 10    x number;
 11    y number;
 12    z number;
 13
 14  begin
 15    w:=trunc(global.a/ten_thou);
 16    x:=mod(global.a,ten_thou);
 17    y:=trunc(lg_num/ten_thou);
 18    z:=mod(lg_num,ten_thou);
 19    v := mod((mod(x*y+w*z,ten_thou)*ten_thou+x*z),mill);
 20    global.a:=mod(v+1,mill);
 21    return(trunc((trunc(global.a/ten_thou)*r)/ten_thou));
 22  end;
 23  /

Function created.

SQL>
SQL> select rand(100) from dual;

 RAND(100)
----------
        21

SQL> select rand(100) from dual;

 RAND(100)
----------
        72

SQL> select rand(100) from dual;

 RAND(100)
----------
         1

SQL> select rand(100) from dual;

 RAND(100)
----------
        43

但随机数生成是一门科学,因此您应该了解自己滚动生成的所有限制和缺点。

https://en.wikipedia.org/wiki/Linear_congruential_generator

因此,最好的办法是获得对相应软件包的适当访问权限。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-07
    • 1970-01-01
    • 1970-01-01
    • 2021-06-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多