乱码乱a∨中文字幕,在线免费激情视频,亚洲欧美久久夜夜潮,国产在线网址

  1. <sub id="hjl7n"></sub>

    1. <sub id="hjl7n"></sub>

      <legend id="hjl7n"></legend>

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

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

       2021-06-04 17:30  來(lái)源: 腳本之家   我來(lái)投稿 撤稿糾錯(cuò)

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

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

      首先,了解存儲(chǔ)過(guò)程的語(yǔ)法:

      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)建一個(gè)函數(shù),若有此函數(shù),即取代重新創(chuàng)建 name -------函數(shù)名稱

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

      具體的函數(shù)聲明,請(qǐng)參考[postgresql存儲(chǔ)過(guò)程]

      下面說(shuō)我寫的函數(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`

       

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

      1.`變量聲明要用DECLARE

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

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

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

      補(bǔ)充:Postgresql中存儲(chǔ)過(guò)程(函數(shù))調(diào)用存儲(chǔ)過(guò)程(函數(shù))時(shí)應(yīng)用注意的問(wèn)題

      在postgresql中我們?cè)趫?zhí)行存儲(chǔ)過(guò)程中往往會(huì)使用select 存儲(chǔ)過(guò)程,但是如果存儲(chǔ)過(guò)程中再調(diào)用 存儲(chǔ)過(guò)程時(shí),就不能這樣用了,應(yīng)該用perform 存儲(chǔ)過(guò)程,可以去參考官方文檔的說(shuō)明

      執(zhí)行一個(gè)沒(méi)有結(jié)果的表達(dá)式或者命令

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

      1PERFORM query;

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

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

      一個(gè)例子:

      1PERFORM create_mv('cs_session_page_requests_mv', my_query);

      文章來(lái)源:腳本之家

      來(lái)源地址:https://www.jb51.net/article/204229.htm

      申請(qǐng)創(chuàng)業(yè)報(bào)道,分享創(chuàng)業(yè)好點(diǎn)子。點(diǎn)擊此處,共同探討創(chuàng)業(yè)新機(jī)遇!

      相關(guān)文章

      熱門排行

      信息推薦