PostgreSql Procedure copy split string to table

來源:互聯網
上載者:User

標籤:postgresql   procedure   string to array   

我的情境是這樣,有一張表,裡面有一個欄位採用split string存資料。



雖然Hibernate本身提供了 org.hibernate.annotations.Type 注釋,可以通過實現org.hibernate.usertype.UserType來轉換這種可以結果資料,但是使用上並不方便。

為了幹掉這種資料,我採用了mapping表來取代。對於新的資料當然沒有問題,對於曆史資料,需要procedure來同步。這裡分享一個procedure。


主要是引用了 PostgreSql 的 regexp_split_to_table 函數。

regexp_split_to_table(stringtext, pattern text [, flagstext]) setof text Split string using a POSIX regular expression as the delimiter. See Section 9.7.3 for more information. regexp_split_to_table(‘hello world‘, E‘\\s+‘) hello

world

(2 rows)
從API描述可以發現,該函數可以將1,2,3這種規則字串以逗號為分隔字元拆分。

先來看一下函數的效果。


剛好滿足我們想要的結果,提供完全的procedure。

DROP FUNCTION IF EXISTS syncRef();CREATE OR REPLACE FUNCTION syncRef() RETURNS void AS$BODY$DECLARE r RECORD;sqlStr text := 'SELECT id,regexp_split_to_table(refIds,'','') as refId from tableA where "length"(refIds) > 0;';BEGINDELETE FROM tableB;FOR r IN EXECUTE sqlStr LOOPIF("length"(r.refId) > 0 AND r.refId != ',')THENINSERT INTO tableB(id,ref_id) VALUES(r.id,cast(r.refId AS BIGINT));END IF;END LOOP;RETURN;END$BODY$LANGUAGE plpgsql ;ALTER FUNCTION syncRef()  OWNER TO db;SELECT syncRef();DROP FUNCTION IF EXISTS syncRef();


PostgreSql Procedure copy split string to table

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.