亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在Postgresql 存儲過程中嵌套兩層for循環

發布時間:2021-01-18 15:03:46 來源:億速云 閱讀:1285 作者:Leah 欄目:開發技術

怎么在Postgresql 存儲過程中嵌套兩層for循環?針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

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

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--創建一個函數,若有此函數,即取代重新創建 name -------函數名稱

RETURNS---函數返回類型

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

下面說我寫的函數:

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`

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

1.`變量聲明要用DECLARE

2.``游標 CURSOR 的用法

3.for循環要在begin中執行,

4.循環中要用“:=”

補充:Postgresql中存儲過程(函數)調用存儲過程(函數)時應用注意的問題

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

執行一個沒有結果的表達式或者命令

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

PERFORM query;

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

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

一個例子:

PERFORM create_mv('cs_session_page_requests_mv', my_query);

關于怎么在Postgresql 存儲過程中嵌套兩層for循環問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

高雄县| 沙坪坝区| 乡宁县| 平乐县| 富宁县| 德格县| 沅陵县| 新巴尔虎右旗| 阿鲁科尔沁旗| 安达市| 天峨县| 盖州市| 三台县| 娄烦县| 新兴县| 千阳县| 时尚| 安平县| 沧州市| 蓬莱市| 苍山县| 汉川市| 鹰潭市| 高青县| 扎兰屯市| 饶河县| 高陵县| 张家界市| 桑植县| 遵化市| 台东县| 衡阳市| 北宁市| 湖北省| 靖州| 鲁山县| 聂拉木县| 临桂县| 铜川市| 双鸭山市| 蕉岭县|