私の問題はselectから得たすべての行をテーブルに挿入しています。ここに私の関数である。PostgreSQLで選択したすべての行をループします。
CREATE OR REPLACE FUNCTION imp_br_id_telefon_hlr_for_one_bank(id_bank bigint)
RETURNS void AS
$BODY$
DECLARE
v_record record;
v_query text;
BEGIN
FOR v_record IN
SELECT DISTINCT(bk_telefon.id) as id,
coalesce(bk_telefon.nr_kierunkowy || nr_telefonu, nr_telefonu) as nr_telefon FROM bk_telefon
INNER JOIN bp_dluznik2produkt ON bk_telefon.id_dluznik = bp_dluznik2produkt.id_dluznik
INNER JOIN bp_produkt ON bp_produkt.id = bp_dluznik2produkt.id_produkt
INNER JOIN d_bk_typ_telefon ON d_bk_typ_telefon.id = bk_telefon.id_typ_telefon
WHERE bp_produkt.id_bank IN(id_bank)
AND d_bk_typ_telefon.id NOT IN (5, 11, 20, 21, 22)
AND bk_telefon.active=true
AND bk_telefon.nr_telefonu NOT IN ('000000', '111111', '222222', '333333', '444444', '555555', '666666', '777777', '888888','999999')
AND bp_produkt.id_status_produkt NOT IN (10, 32, 33, 2)
AND bk_telefon.data_ins::date <= '2016-12-08'
LOOP
INSERT INTO br_raport_telefonow(id_telefon, nr_telefonu, data_generacji) VALUES (v_record.id, v_record.nr_telefon, CURRENT_DATE);
raise notice 'insertuje do weryfikacji';
END LOOP;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION imp_br_id_telefon_hlr_for_one_bank(bigint)
OWNER TO mwalko;
私はテーブル内の4453行(br_raport_telefonow)を得た。この機能を実行した後、私はちょうど(機能の一部である)クエリを実行すると:
はSELECT DISTINCT(bk_telefon.id) as id,
coalesce(bk_telefon.nr_kierunkowy || nr_telefonu, nr_telefonu) as nr_telefon FROM bk_telefon
INNER JOIN bp_dluznik2produkt ON bk_telefon.id_dluznik = bp_dluznik2produkt.id_dluznik
INNER JOIN bp_produkt ON bp_produkt.id = bp_dluznik2produkt.id_produkt
INNER JOIN d_bk_typ_telefon ON d_bk_typ_telefon.id = bk_telefon.id_typ_telefon
WHERE bp_produkt.id_bank IN(id_bank)
AND d_bk_typ_telefon.id NOT IN (5, 11, 20, 21, 22)
AND bk_telefon.active=true
AND bk_telefon.nr_telefonu NOT IN ('000000', '111111', '222222', '333333', '444444', '555555', '666666', '777777', '888888','999999')
AND bp_produkt.id_status_produkt NOT IN (10, 32, 33, 2)
AND bk_telefon.data_ins::date <= '2016-12-08'
それは426163個の行を返します。 。 selectから各行をループしてはいけませんか? 42k行がどこに失われたのか分かりません。私は何が欠けていますか?
してみてください。単純なSQLだけでも同じことができます。 'imp_br_id_telefon_hlr_for_one_bank'を実行すると引数が – joop
になりますが、SQL文では' bp_produkt.id_bank IN(id_bank) 'を使用できません。 –
1回の使用で機能します。 SELECT * FROM imp_br_id_telefon_hlr_for_one_bank(5)で実行しますが、もちろん引数を削除してid_bankとして5を追加することもできます。 – Michu93