主頁(yè) > 知識(shí)庫(kù) > Postgresql 存儲(chǔ)過(guò)程(plpgsql)兩層for循環(huán)的操作

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

熱門標(biāo)簽:天津開發(fā)區(qū)地圖標(biāo)注app 地圖標(biāo)注要花多少錢 江蘇400電話辦理官方 移動(dòng)外呼系統(tǒng)模擬題 廣州電銷機(jī)器人公司招聘 400電話申請(qǐng)客服 濟(jì)南外呼網(wǎng)絡(luò)電話線路 電銷機(jī)器人能補(bǔ)救房產(chǎn)中介嗎 電話機(jī)器人怎么換人工座席

項(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ǔ)句:

PERFORM query;

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

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

一個(gè)例子:

PERFORM create_mv('cs_session_page_requests_mv', my_query);

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。

您可能感興趣的文章:
  • PGSQL 實(shí)現(xiàn)查詢今天,昨天的數(shù)據(jù),一個(gè)月之內(nèi)的數(shù)據(jù)
  • pgsql 變量賦值方法及注意事項(xiàng)
  • pgsql 實(shí)現(xiàn)分頁(yè)查詢方式
  • pgsql之create user與create role的區(qū)別介紹
  • pgsql之pg_stat_replication的使用詳解
  • pgsql 如何刪除仍有活動(dòng)鏈接的數(shù)據(jù)庫(kù)
  • pgsql 解決包含有單引號(hào)的字符串操作

標(biāo)簽:溫州 海西 寶雞 杭州 昭通 辛集 濮陽(yáng) 榆林

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Postgresql 存儲(chǔ)過(guò)程(plpgsql)兩層for循環(huán)的操作》,本文關(guān)鍵詞  Postgresql,存儲(chǔ),過(guò)程,plpgsql,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Postgresql 存儲(chǔ)過(guò)程(plpgsql)兩層for循環(huán)的操作》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于Postgresql 存儲(chǔ)過(guò)程(plpgsql)兩層for循環(huán)的操作的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章