<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)  編輯  收藏 所屬分類: 數據庫
    主站蜘蛛池模板: 午夜网站免费版在线观看| 国产精品99久久免费观看| AV免费网址在线观看| 亚洲在成人网在线看| 成人女人A级毛片免费软件| 亚洲小说图片视频| 免费精品人在线二线三线区别| 亚洲精品视频专区| 日本高清在线免费| 亚洲jizzjizz在线播放久| 午夜国产精品免费观看| 亚洲午夜福利在线视频| 在线免费观看一区二区三区| 亚洲av日韩综合一区二区三区| 日韩在线视频免费看| 老司机午夜在线视频免费观 | 妞干网手机免费视频| 亚洲欧美精品午睡沙发| 免费观看午夜在线欧差毛片| 免费无遮挡无遮羞在线看| 亚洲色爱图小说专区| 麻豆国产精品免费视频| 亚洲精品成a人在线观看☆| 亚洲精品国精品久久99热| 精品国产免费一区二区三区香蕉| 亚洲视频在线观看一区| 成年女人免费v片| 一级做a爰片久久毛片免费陪 | 人成午夜免费大片在线观看| 亚洲精品成人片在线观看精品字幕 | 国产亚洲精品免费视频播放| 久久青草免费91观看| 国产精品高清视亚洲精品| 少妇亚洲免费精品| 日韩精品无码免费一区二区三区| 33333在线亚洲| 国产亚洲精品成人AA片新蒲金| 88xx成人永久免费观看| 国产精品亚洲色图| 亚洲影院在线观看| 四虎永久免费观看|