乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      【Oracle學習筆記】Oralce隨機數(shù)與隨機取樣

       python_lover 2022-02-11

      1 取隨機數(shù)

      Oralce把所有有關隨機數(shù)的操作都封裝在了PL/SQLDBMS_RANDOM里,極大地方便了我們的使用。它具有以下函數(shù)

       

      其中,initialize,random,terminate函數(shù)在Oracle11g中已不推薦使用,主要用于向后兼容。下面對各個函數(shù)進行舉例說明。

      1.1 INITIALIZE

      用一個種子值來初始化DBMS_RANDOM包。

      默認情況下,DBMS_RANDOM包是根據(jù)用戶、時間、會話來進行初始化,這樣,即便是同一個語句,每次生成的數(shù)值都會不一樣,但這樣會產(chǎn)生一個問題,在測試環(huán)境下,如果我想每次生成的隨機序列都是一樣的,該怎么辦?INITIALIZE過程就很好的解決了這一問題,通過設置相同的種子值,則每次生成的隨機序列都將是一樣的。

      語法:

      DBMS_RANDOM.INITIALIZE (val IN BINARY_INTEGER);

      舉例:

      BEGIN
        DBMS_RANDOM.INITIALIZE(100);
        FOR I IN 1 .. 10 LOOP
          DBMS_OUTPUT.PUT_LINE(DBMS_RANDOM.RANDOM);
        END LOOP;
      END;
      View Code

      --------------------------

      163284779

      751599369

      659804475

      1131809137

      -865013504

      -407075626

      2128226600

      -448154892

      -1371178596

      472933400

      即便是在不同的會話中,不同的用戶下,隨機生成的10個值都是一樣的。

      1.2 NORMAL

      NORMAL函數(shù)返回服從正態(tài)分布的一組數(shù)。此正態(tài)分布標準偏差為1,期望值為0。這個函數(shù)返回的數(shù)值中有68%是介于-1+1之間,95%介于-2+2之間,99%介于-3+3之間。

      語法:

      DBMS_RANDOM.NORMAL RETURN NUMBER;

      舉例:

      SELECT DBMS_RANDOM.NORMAL FROM DUAL;

      --------------

      0.321082787751054

      1.3 RANDOM

      返回值的范圍為: [-2^31, 2^31),返回的是整數(shù)。

      語法:

      DBMS_RANDOM.RANDOM RETURN binary_integer;

      舉例:

      SELECT DBMS_RANDOM.RANDOM FROM DUAL;

      -------------

      1632572475

       

      SELECT ABS(MOD(DBMS_RANDOM.RANDOM,100)) FROM DUAL;--獲取0-100內(nèi)的隨機整數(shù)

      --------------

      51

      1.4 SEED

      功能和INITIALIZE過程類似,實際上,INITIALIZE過程被淘汰,推薦的替代過程即是SEED存儲過程,INITIALIZE過程不同的是SEED過程同時支持數(shù)值和字符作為種子值,而INITIALIZE過程只支持數(shù)值。

      語法:

      DBMS_RANDOM.SEED (val IN BINARY_INTEGER);
      
      DBMS_RANDOM.SEED (val IN VARCHAR2);--VARCHAR2的最大范圍為2000

      舉例:

      BEGIN
        DBMS_RANDOM.SEED('hello');
        FOR I IN 1 .. 10 LOOP
          DBMS_OUTPUT.PUT_LINE(DBMS_RANDOM.VALUE);
        END LOOP;
      END;
      View Code

      -------------------

      58

      71

      33

      4

      39

      53

      93

      37

      20

      5

      5. STRING

      隨機生成字符串語法:

      DBMS_RANDOM.STRING(
            opt IN CHAR,--字符串的格式
            len IN NUMBER--字符串的長度
      ) RETURN VARCHAR2;

      --opt 字符串的格式

      – 'u''U':大寫字母的字符串

      – 'l''L':小寫字母的字符串

      – 'a''A':不區(qū)分大小寫的任意字符串

      – 'x''X':任意大小寫字母或數(shù)字的字符串

      – 'p''P':任意可輸出字符的數(shù)組

      舉例:

      SELECT DBMS_RANDOM.STRING('u', 10) VALUE FROM DUAL;
      --------------------
      PSXFAKZZTR
      
      SELECT DBMS_RANDOM.STRING('l', 10) VALUE FROM DUAL;
      --------------------
      elnircffly
      
      SELECT DBMS_RANDOM.STRING('a', 10) VALUE FROM DUAL;
      -------------------
      vGuYnPoZNk
      
      SELECT DBMS_RANDOM.STRING('x', 10) VALUE FROM DUAL;
      --------------------
      LH7Q36NLPR
      
      SELECT DBMS_RANDOM.STRING('p', 10) VALUE FROM DUAL;
      --------------------
      IuX4B8lQ9p
      View Code

      6. TERMINATE

      在使用完DBMS_RANDOM包后,用該過程進行終止。該過程11gR1中即不推薦使用了。

      語法:

      DBMS_RANDOM.TERMINATE;--For compatibility with 8.1

      7. VALUE

      此函數(shù)最為常用,其語法

      DBMS_RANDOM.VALUE
         RETURN NUMBER;--[0,1),帶有38位精度的小數(shù)
       
      DBMS_RANDOM.VALUE(
             low IN NUMBER,--最小值
             high IN NUMBER--最大值
      ) RETURN NUMBER;

      舉例:

      SELECT DBMS_RANDOM.VALUE FROM DUAL;
      ----------------------
      0.452943599091639 
      
      SELECT DBMS_RANDOM.VALUE(10, 20) FROM DUAL;
      ------------------------
      18.4659055244849

      2 隨機取數(shù)據(jù)

      Oracle隨機取數(shù)據(jù)的方法,一般有以下兩種:

      2.1 快速隨機取數(shù)據(jù)

      使用oraclesample([sample_percent])sample bloc(sample_percent)方法(采樣表掃描(sample table scan)),快速隨機取數(shù)據(jù),推薦使用

      SELECT * FROM EBILL_ELECTRONIC_BILL SAMPLE(1) WHERE ROWNUM <= 10; --參數(shù)表示取樣百分比,缺省時,取頭10條

       

      類似的還有,sample_block

      SELECT * FROM EBILL_ELECTRONIC_BILL SAMPLE BLOCK(1) WHERE ROWNUM <= 10; --參數(shù)表數(shù)據(jù)存儲區(qū)間取樣百分比,必填

       

      主要注意以下幾點:

      1.sample_percent是一個數(shù)字,定義結(jié)果集中包含記錄占總記錄數(shù)量的百分比,值應該在[0.000001,99.999999]之間。

      2.sample只對單表生效,不能用于表連接和遠程表

      3.sample會使SQL自動使用CBO基于代價的優(yōu)化器)

      2.2 隨機取數(shù)據(jù)

      使用dbms_random.value隨機取數(shù)據(jù),會全表掃描(Full table Scan),比較慢,不推薦使用:

      SELECT *
        FROM (SELECT * FROM EBILL_ELECTRONIC_BILL ORDER BY DBMS_RANDOM.VALUE)
       WHERE ROWNUM <= 10

       

       

        本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多