<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    小菜毛毛技術分享

    與大家共同成長

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      164 Posts :: 141 Stories :: 94 Comments :: 0 Trackbacks

    Oracle隨機函數—dbms_random 

    1.基礎認識

    關于這些函數及DBMS_RANDOM包的文件都包含在SQLPlus中:
         select text   from all_source
          where name = 'DBMS_RANDOM'
           and type = 'PACKAGE' order by line;

       ◆ TYPE      num_array
       ◆ PROCEDURE terminate
       ◆ PROCEDURE seed
       ◆ PROCEDURE initialize
       ◆ FUNCTION random
       ◆ FUNCTION value RETURN NUMBER;
       ◆ FUNCTION value (low IN NUMBER, high IN NUMBER) RETURN NUMBER;
       ◆ FUNCTION normal RETURN NUMBER;
       ◆ FUNCTION string (opt char, len NUMBER) RETURN VARCHAR2;


    2.應用舉例

    SELECT DBMS_RANDOM.RANDOM FROM DUAL;
     
    再進一步的要求,比如,產生一個0-100的隨機數,稍微變通一下就可以了:
     
    select abs(mod(dbms_random.random,100)) from dual

    3.進階說明

    dbms_random又有新函數了可以實現這些功能
    FUNCTION value RETURN NUMBER;
    FUNCTION value (low IN NUMBER, high IN NUMBER) RETURN NUMBER;
    FUNCTION normal RETURN NUMBER;
    FUNCTION string (opt char, len NUMBER)   RETURN VARCHAR2; 
     
    產生N到M之間的隨機數
    SELECT   DBMS_RANDOM.VALUE(N,M) FROM DUAL;
     
    缺省DBMS_RANDOM.VALUE返回0到1之間的隨機數

    SQL> select dbms_random.value, dbms_random.value(55,100) from dual;
    VALUE            DBMS_RANDOM.VALUE(55,100)
    --------------- -----------------------------
    0.714469037747011      68.5593418279622
     
    NORMAL函數返回服從正態分布的一組數。此正態分布標準偏差為1,期望值為0。這個函數返回的數值中有68%是介于-1與+1之間,95%介于-2與+2之間,99%介于-3與+3之間。
    最后,是STRING函數。它返回一個長度達60個字符的隨機字符串。

    用DBMS_RANDOM生成文本和日期值

    數字、文本字符串和日期都是用戶會在表格里碰到的三種常見數據類型。雖然你可以用PL/SQL程序包里的DBMS_RANDOM隨機生成數字——它確實能夠做到這一點——它還能夠隨機生成文本和日期值。

    1.產生隨機數字
    就讓我們先從數字開始。VALUE函數會返回一個大于等于0但是小于1的數,精度是38位。

    SELECT DBMS_RANDOM.VALUE FROM DUAL;

    對于指定范圍內的整數,要加入參數low_value和high_value,并從結果中截取小數(最大值不能被作為可能的值)。所以對于0到99之間的整數,你要使用下面的代碼:

    SELECT TRUNC(DBMS_RANDOM.VALUE(0, 100)) FROM DUAL;

    2.產生隨機文本字符串
    要隨機生成文本字符串,就要使用STRING函數并編寫代碼指定字符串的類型和所希望的長度:

    SELECT DBMS_RANDOM.STRING('A', 20) FROM DUAL;

    類型代碼在《Oracle Database 10g PL/SQL程序包和類型參考(Oracle Database 10g PL/SQL Packages and Types Reference)》有說明。

    下面是一些類型的代碼:

    ‘U’用來生成大寫字符

    ‘L’用來生成小寫字符

    ‘A’用來生成大小寫混合的字符

    3.產生隨機日期
    Oracle將日期作為過去某個關鍵日期(如果你好奇的話,我可以告訴你這個日期是公元前4712年1月1日)的整數偏移量來保存。這就意味著你可以通過尋找與你希望的起始日期相對應的整數,然后向它加入一個隨機的整數來隨機生成一個指定范圍內的日期。

    使用TO_CHAR函數和‘J’格式代碼,你可以為今天的日期生成一個內部日期數:

    SELECT TO_CHAR(SYSDATE, 'J') FROM DUAL;

    例如,要生成一個2003年內的任意日期,你可以首先確定2003年1月1日的日期整數;

    SELECT TO_CHAR(TO_DATE('01/01/03','mm/dd/yy'),'J')FROM DUAL;

    系統給的結果是2452641。所以要生成該年度內的任意日期,我們就要用帶有low_value等于2452641和high_value等于2452641+364參數的DBMS_RANDOM.VALUE,再把它轉換成日期:

    SELECT TO_DATE(TRUNC(DBMS_RANDOM.VALUE(2452641,2452641+364)),'J') FROM DUAL;
     


    本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/luojun198610/archive/2009/02/27/3941491.aspx

    posted on 2009-11-21 18:57 小菜毛毛 閱讀(250) 評論(0)  編輯  收藏 所屬分類: 數據庫
    主站蜘蛛池模板: 亚洲国模精品一区| 岛国片在线免费观看| 免费A级毛片无码A∨男男| 一本色道久久88—综合亚洲精品| 香蕉免费一区二区三区| 亚洲av午夜成人片精品电影| 区久久AAA片69亚洲| 亚洲精品影院久久久久久| 久章草在线精品视频免费观看| 亚洲人JIZZ日本人| 91在线免费视频| 久久亚洲精品成人综合| 9277手机在线视频观看免费| 亚洲激情校园春色| 青春禁区视频在线观看直播免费| 一区二区亚洲精品精华液 | 很黄很黄的网站免费的| 久久精品国产亚洲αv忘忧草| 两性刺激生活片免费视频| 一本色道久久88亚洲精品综合 | 久久久高清免费视频| 亚洲真人无码永久在线观看| 在线免费观看一级毛片| 美女露隐私全部免费直播| 亚洲一区二区三区自拍公司| 免费一级毛片无毒不卡| 亚洲另类春色国产精品| 国产91在线免费| 你懂得的在线观看免费视频| 亚洲精品美女久久久久9999| 成年女人毛片免费观看97| 日本一区二区三区在线视频观看免费 | 亚洲爱情岛论坛永久| 18禁免费无码无遮挡不卡网站 | 亚洲天堂免费在线| 亚洲第一区精品观看| 久久午夜夜伦鲁鲁片免费无码| 亚洲大香人伊一本线| 日韩亚洲国产综合久久久| 久久国产乱子伦精品免费强| 亚洲啪AV永久无码精品放毛片 |