婷婷久久综合九色综合,欧美成色婷婷在线观看视频,偷窥视频一区,欧美日本一道道一区二区

<tt id="bu9ss"></tt>
  • <span id="bu9ss"></span>
  • <pre id="bu9ss"><tt id="bu9ss"></tt></pre>
    <label id="bu9ss"></label>

    當(dāng)前位置:首頁 >  站長 >  數(shù)據(jù)庫 >  正文

    Postgresql 存儲過程(plpgsql)兩層for循環(huán)的操作

     2021-06-04 17:30  來源: 腳本之家   我來投稿 撤稿糾錯

      阿里云優(yōu)惠券 先領(lǐng)券再下單

    項目中遇到測試,需要造4500數(shù)據(jù),而且需要分部門和日期,一個部門一天30條數(shù)據(jù),剩下的鋪墊數(shù)據(jù)可以一個部門一天100w左右數(shù)據(jù),這里,每次變換部門,日期,需要操作至少300次,想到用存儲過程寫一個函數(shù)進行

    首先,了解存儲過程的語法:

    CREATE [ OR REPLACE ] FUNCTION
      name( [ [argmode] [argname]argtype[ { DEFAULT | = }default_expr] [, ...] ] )
        [ RETURNSrettype
         | RETURNS TABLE (column_namecolumn_type[, ...] ) ]
      { LANGUAGElang_name
        | WINDOW
    | IMMUTABLE | STABLE | VOLATILE
        | CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT
        | [ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER
        | COSTexecution_cost
        | ROWSresult_rows
        | SETconfiguration_parameter{ TOvalue| =value| FROM CURRENT }
        | AS 'definition'
        | AS 'obj_file', 'link_symbol'
      } ...
        [ WITH (attribute[, ...] ) ]
    ————————————————

     

    CREATE [ OR REPLACE ] FUNCTION--創(chuàng)建一個函數(shù),若有此函數(shù),即取代重新創(chuàng)建 name -------函數(shù)名稱

    RETURNS---函數(shù)返回類型

    具體的函數(shù)聲明,請參考[postgresql存儲過程]

    下面說我寫的函數(shù):

    CREATE OR REPLACE FUNCTION "xue"."insert_into_table"()
     RETURNS "pg_catalog"."void" AS $BODY$
    DECLARE tmp VARCHAR(1024);
    DECLARE n integer;
    DECLARE i integer;
    DECLARE inst_seq_no CURSOR FOR
      SELECT inst_seq_no FROM t where no in (
      '111','22','223','33','4358',
       '233','449','315','35335');
    BEGIN
      RAISE NOTICE '------------start----------';
      i := 30;
      FOR stmt IN no LOOP
        n := 30;
        FOR n IN n..i LOOP   
          insert into test2 (NO,
          test_NO,TIME,USER_NO,SEQ_NO,
          NAME,USER_NO1,USER_NAME,CODE,USER_NO2,OPROR_NAME,
          REVIEW_TIME,DESC,
          VAL1,VAL2,DATE,UPD_TIME,DEL_FLAG) values
          (nextval('seq_test2'),n,'20190910',n,stmt.seq_no,n,n,n,n,n,n,'20190910','01','',n,n,'20190910',
          '20190909','0');
          END LOOP;
           n = n+30;
          i = i+30;
      END LOOP;
      RAISE NOTICE '-----------finished---------';
    END;
    $BODY$
     LANGUAGE plpgsql VOLATILE
     COST 100`

     

    很簡單的邏輯,但是在修改了三四遍才實現(xiàn),這個第二次寫存儲過程,很多語法不是很熟悉,要注意的如:

    1.`變量聲明要用DECLARE

    2.``游標(biāo) CURSOR 的用法

    3.for循環(huán)要在begin中執(zhí)行,

    4.循環(huán)中要用“:=”

    補充:Postgresql中存儲過程(函數(shù))調(diào)用存儲過程(函數(shù))時應(yīng)用注意的問題

    在postgresql中我們在執(zhí)行存儲過程中往往會使用select 存儲過程,但是如果存儲過程中再調(diào)用 存儲過程時,就不能這樣用了,應(yīng)該用perform 存儲過程,可以去參考官方文檔的說明

    執(zhí)行一個沒有結(jié)果的表達式或者命令

    有時候我們希望計算一個表達式或者一個命令,但是卻丟棄其結(jié)果(通常因為我們經(jīng)常調(diào)用一些存在有用的副作用但是不存在有用結(jié)果值的函數(shù))。 要在 PL/pgSQL 里干這件事, 你可以使用PERFORM語句:

    1PERFORM query;

    這條語句執(zhí)行一個 query并且丟棄結(jié)果。 query 的寫法和你平常寫 SQL SELECT 命令是一樣的, 只是把開頭的關(guān)鍵字 SELECT 替換成 PERFORM。 PL/pgSQL 的變量和平常一樣代換到命令中。 同樣,如果命令生成至少一行,那么特殊的變量 FOUND 設(shè)置為真,如果沒有生成行,則為假。

    注意: 我們可能希望沒有INTO子句的SELECT也能滿足這樣的需要, 但是目前可以接受的唯一的方法是PERFORM。

    一個例子:

    1PERFORM create_mv('cs_session_page_requests_mv', my_query);

    文章來源:腳本之家

    來源地址:https://www.jb51.net/article/204229.htm

    申請創(chuàng)業(yè)報道,分享創(chuàng)業(yè)好點子。點擊此處,共同探討創(chuàng)業(yè)新機遇!

    相關(guān)文章

    熱門排行

    信息推薦