<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 小菜毛毛 閱讀(247) 評論(0)  編輯  收藏 所屬分類: 數據庫
    主站蜘蛛池模板: 一个人免费高清在线观看| 免费观看AV片在线播放| 亚洲国产成人久久一区WWW| 亚洲AV日韩AV永久无码色欲| 成人免费午夜在线观看| 亚洲毛片基地4455ww| 久久精品免费全国观看国产| 国产精品高清视亚洲一区二区| 成人激情免费视频| 久久精品国产亚洲AV天海翼| 亚洲AV成人潮喷综合网| sss日本免费完整版在线观看| 亚洲国产精品无码久久久秋霞2| 国产好大好硬好爽免费不卡| 91亚洲精品麻豆| 情侣视频精品免费的国产| 国产99视频精品免费视频76| 亚洲人成图片小说网站| 免费看又黄又无码的网站| 亚洲国产精品一区二区三区在线观看 | 国产va在线观看免费| 亚洲视频一区在线播放| 四虎成人免费观看在线网址| 免费无码午夜福利片69| 无码乱人伦一区二区亚洲一| 免费国产黄线在线观看| 成人免费观看男女羞羞视频| 久久久久亚洲AV无码专区首| 手机看黄av免费网址| 无遮挡a级毛片免费看| 亚洲国产精品自在在线观看 | 亚洲w码欧洲s码免费| 日韩免费视频在线观看| 在线免费播放一级毛片| 亚洲中文字幕人成乱码| 亚洲国产精品专区在线观看 | 亚洲精品久久久www| 久久久久免费看成人影片| 亚洲精品乱码久久久久久蜜桃图片 | 大妹子影视剧在线观看全集免费| 亚洲视频免费在线看|