wbear p.s тема ушла в глубокий оофтоп...
p.s 4321 пиши плз яснее, твои посты читать интересно.. но тяжело :)
да я в офтопе, и об свойом, об дуффичьем.
сципиально раскрою по запросу, шоб было ясно, токо выйдет дюже длинна :
есть таблички ххх_heap - "свалки". куда бросаюцца данные из внешней прилады (аксесс). Есь таблички назначения xxx с версиями, куда это всё попадает. Когда я кидал данные напрямую, (без "свалок"), то кидал простым инсертом, а на инсерт вешал примерно такой триггер (ужастен в силу того, что писался для 7.3., а в нем IS DISTINCT FROM бажит жутко)
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175.
CREATE OR REPLACE FUNCTION ftr_checkreplica_acc_kassaj_j1prikhodnyej_orderaj1()
RETURNS "trigger" AS
$BODY$
DECLARE
_lastold RECORD;
_isupdated bool;
_buf int4;
BEGIN
select * INTO _lastold
FROM acc_kassaj_j1prikhodnyej_orderaj1 AS a
WHERE a.js = NEW.js
ORDER BY a.actual, a.numbloaded DESC LIMIT 1 ;
IF FOUND THEN
--RAISE NOTICE 'FOUND';
IF NOT COALESCE(((_lastold.jnj_pj2o= NEW.jnj_pj2o)
OR ((_lastold.jnj_pj2o IS NULL) AND (NEW.jnj_pj2o IS NULL))),FALSE)
THEN _isupdated = TRUE;
ELSIF NOT COALESCE(((_lastold.data= NEW.data)
OR ((_lastold.data IS NULL) AND (NEW.data IS NULL))),FALSE)
THEN _isupdated = TRUE;
ELSIF NOT COALESCE(((_lastold.vremja= NEW.vremja)
OR ((_lastold.vremja IS NULL) AND (NEW.vremja IS NULL))),FALSE)
THEN _isupdated = TRUE;
ELSIF NOT COALESCE(((_lastold.kurs= NEW.kurs)
OR ((_lastold.kurs IS NULL) AND (NEW.kurs IS NULL))),FALSE)
THEN _isupdated = TRUE;
/* --не интересует
ELSIF NOT COALESCE(((_lastold.debet= NEW.debet)
OR ((_lastold.debet IS NULL) AND (NEW.debet IS NULL))),FALSE)
THEN _isupdated = TRUE;
ELSIF NOT COALESCE(((_lastold.kredit= NEW.kredit)
OR ((_lastold.kredit IS NULL) AND (NEW.kredit IS NULL))),FALSE)
THEN _isupdated = TRUE;
--не интересует
*/
ELSIF NOT COALESCE(((_lastold.klient= NEW.klient)
OR ((_lastold.klient IS NULL) AND (NEW.klient IS NULL))),FALSE)
THEN _isupdated = TRUE;
ELSIF NOT COALESCE(((_lastold.poluchateljt= NEW.poluchateljt)
OR ((_lastold.poluchateljt IS NULL) AND (NEW.poluchateljt IS NULL))),FALSE)
THEN _isupdated = TRUE;
ELSIF NOT COALESCE(((_lastold.osnovanie= NEW.osnovanie)
OR ((_lastold.osnovanie IS NULL) AND (NEW.osnovanie IS NULL))),FALSE)
THEN _isupdated = TRUE;
ELSIF NOT COALESCE(((_lastold.summaj1rj1= NEW.summaj1rj1)
OR ((_lastold.summaj1rj1 IS NULL) AND (NEW.summaj1rj1 IS NULL))),FALSE)
THEN _isupdated = TRUE;
ELSIF NOT COALESCE(((_lastold.summaj1jdj1= NEW.summaj1jdj1)
OR ((_lastold.summaj1jdj1 IS NULL) AND (NEW.summaj1jdj1 IS NULL))),FALSE)
THEN _isupdated = TRUE;
ELSIF NOT COALESCE(((_lastold.prilozhenie= NEW.prilozhenie)
OR ((_lastold.prilozhenie IS NULL) AND (NEW.prilozhenie IS NULL))),FALSE)
THEN _isupdated = TRUE;
ELSIF NOT COALESCE(((_lastold.tipj_dok= NEW.tipj_dok)
OR ((_lastold.tipj_dok IS NULL) AND (NEW.tipj_dok IS NULL))),FALSE)
THEN _isupdated = TRUE;
ELSIF NOT COALESCE(((_lastold.jpj_nds= NEW.jpj_nds)
OR ((_lastold.jpj_nds IS NULL) AND (NEW.jpj_nds IS NULL))),FALSE)
THEN _isupdated = TRUE;
ELSIF NOT COALESCE(((_lastold.jnscheta= NEW.jnscheta)
OR ((_lastold.jnscheta IS NULL) AND (NEW.jnscheta IS NULL))),FALSE)
THEN _isupdated = TRUE;
ELSIF NOT COALESCE(((_lastold.operacija= NEW.operacija)
OR ((_lastold.operacija IS NULL) AND (NEW.operacija IS NULL))),FALSE)
THEN _isupdated = TRUE;
ELSIF NOT COALESCE(((_lastold.c_count= NEW.c_count)
OR ((_lastold.c_count IS NULL) AND (NEW.c_count IS NULL))),FALSE)
THEN _isupdated = TRUE;
ELSIF NOT COALESCE(((_lastold.c_nakl= NEW.c_nakl)
OR ((_lastold.c_nakl IS NULL) AND (NEW.c_nakl IS NULL))),FALSE)
THEN _isupdated = TRUE;
/*
ELSIF NOT COALESCE(((_lastold.username= NEW.username)
OR ((_lastold.username IS NULL) AND (NEW.username IS NULL))),FALSE)
THEN _isupdated = TRUE;
*/
ELSIF NOT COALESCE(((_lastold.c_owner= NEW.c_owner)
OR ((_lastold.c_owner IS NULL) AND (NEW.c_owner IS NULL))),FALSE)
THEN _isupdated = TRUE;
ELSIF NOT COALESCE(((_lastold.ndone= NEW.ndone)
OR ((_lastold.ndone IS NULL) AND (NEW.ndone IS NULL))),FALSE)
THEN _isupdated = TRUE;
ELSIF NOT COALESCE(((_lastold.lvzaim= NEW.lvzaim)
OR ((_lastold.lvzaim IS NULL) AND (NEW.lvzaim IS NULL))),FALSE)
THEN _isupdated = TRUE;
ELSIF NOT COALESCE(((_lastold.paydate= NEW.paydate)
OR ((_lastold.paydate IS NULL) AND (NEW.paydate IS NULL))),FALSE)
THEN _isupdated = TRUE;
ELSIF NOT COALESCE(((_lastold.lrewrite= NEW.lrewrite)
OR ((_lastold.lrewrite IS NULL) AND (NEW.lrewrite IS NULL))),FALSE)
THEN _isupdated = TRUE;
ELSIF NOT COALESCE(((_lastold.pkoext= NEW.pkoext)
OR ((_lastold.pkoext IS NULL) AND (NEW.pkoext IS NULL))),FALSE)
THEN _isupdated = TRUE;
ELSIF NOT COALESCE(((_lastold.nyear= NEW.nyear)
OR ((_lastold.nyear IS NULL) AND (NEW.nyear IS NULL))),FALSE)
THEN _isupdated = TRUE;
ELSIF NOT COALESCE(((_lastold.whatorg= NEW.whatorg)
OR ((_lastold.whatorg IS NULL) AND (NEW.whatorg IS NULL))),FALSE)
THEN _isupdated = TRUE;
ELSIF NOT COALESCE(((_lastold.nnew= NEW.nnew)
OR ((_lastold.nnew IS NULL) AND (NEW.nnew IS NULL))),FALSE)
THEN _isupdated = TRUE;
/*
ELSIF NOT COALESCE(((_lastold.newcode= NEW.newcode)
OR ((_lastold.newcode IS NULL) AND (NEW.newcode IS NULL))),FALSE)
THEN _isupdated = TRUE;
ELSIF NOT COALESCE(((_lastold.ehkspeditor= NEW.ehkspeditor)
OR ((_lastold.ehkspeditor IS NULL) AND (NEW.ehkspeditor IS NULL))),FALSE)
THEN _isupdated = TRUE;
ELSIF NOT COALESCE(((_lastold.lehkspeditor= NEW.lehkspeditor)
OR ((_lastold.lehkspeditor IS NULL) AND (NEW.lehkspeditor IS NULL))),FALSE)
THEN _isupdated = TRUE;
*/
ELSIF NOT COALESCE(((_lastold.c_currency= NEW.c_currency)
OR ((_lastold.c_currency IS NULL) AND (NEW.c_currency IS NULL))),FALSE)
THEN _isupdated = TRUE;
ELSIF NOT COALESCE(((_lastold.jpnsp= NEW.jpnsp)
OR ((_lastold.jpnsp IS NULL) AND (NEW.jpnsp IS NULL))),FALSE)
THEN _isupdated = TRUE;
/*
ELSIF NOT COALESCE(((_lastold.dov_n= NEW.dov_n)
OR ((_lastold.dov_n IS NULL) AND (NEW.dov_n IS NULL))),FALSE)
THEN _isupdated = TRUE;
ELSIF NOT COALESCE(((_lastold.dov_data= NEW.dov_data)
OR ((_lastold.dov_data IS NULL) AND (NEW.dov_data IS NULL))),FALSE)
THEN _isupdated = TRUE;
ELSIF NOT COALESCE(((_lastold.dov_dni= NEW.dov_dni)
OR ((_lastold.dov_dni IS NULL) AND (NEW.dov_dni IS NULL))),FALSE)
THEN _isupdated = TRUE;
ELSIF NOT COALESCE(((_lastold.dov_summa= NEW.dov_summa)
OR ((_lastold.dov_summa IS NULL) AND (NEW.dov_summa IS NULL))),FALSE)
THEN _isupdated = TRUE;
ELSIF NOT COALESCE(((_lastold.dov_ehkspeditor= NEW.dov_ehkspeditor)
OR ((_lastold.dov_ehkspeditor IS NULL) AND (NEW.dov_ehkspeditor IS NULL))),FALSE)
THEN _isupdated = TRUE;
ELSIF NOT COALESCE(((_lastold.dov_type= NEW.dov_type)
OR ((_lastold.dov_type IS NULL) AND (NEW.dov_type IS NULL))),FALSE)
THEN _isupdated = TRUE;
ELSIF NOT COALESCE(((_lastold.makedate= NEW.makedate)
OR ((_lastold.makedate IS NULL) AND (NEW.makedate IS NULL))),FALSE)
THEN _isupdated = TRUE;
ELSIF NOT COALESCE(((_lastold.updatedate= NEW.updatedate)
OR ((_lastold.updatedate IS NULL) AND (NEW.updatedate IS NULL))),FALSE)
THEN _isupdated = TRUE;
*/
END IF;
--RAISE NOTICE '_isupdated %',_isupdated;
--RAISE NOTICE 'lastold.c_type IS NULL %',_lastold.c_type;
IF _isupdated = TRUE THEN
--скинем флаг предыдущей актуальной
UPDATE acc_kassaj_j1prikhodnyej_orderaj1
SET actual= 0
WHERE acc_kassaj_j1prikhodnyej_orderaj1.js = NEW.js
AND acc_kassaj_j1prikhodnyej_orderaj1.actual= - 1 ;
--
RETURN NEW; --вставка новой актуальной версии
ELSE
--обновляем старое, если помечена как удаленная
UPDATE acc_kassaj_j1prikhodnyej_orderaj1
SET actual= - 1
WHERE acc_kassaj_j1prikhodnyej_orderaj1.numbloaded = _lastold.numbloaded
AND actual= 0 ;
_buf:= f_set_acc_kassaj_j1prikhodnyej_orderaj1_numbloaded_seq();
RETURN NULL;--отказываемся от вставки
END IF;
ELSE
--вставка новой актуальной записи
RETURN NEW;
END IF;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE;
(понятно, что длинная гробовая часть выполняет ROW(.....) IS DISTINCT ROW(...)
вот с ней все улетат в космаз. по вермени. в 1000-и секунд на 7.3 и в 100-ни - на 8.1. (можно переписать дистинкт компактно - для 8-ки, но незачем)
вставка в тесте велась из свалки - acc_kassaj_j1prikhodnyej_orderaj1_heap.
теперь, если вместо инсерта вести вставку хранимкой, внутри которой находится то, что написано в триггере (чтобы было понятно - приведу текст : но боюса, читать его будет лень )
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191.
CREATE OR REPLACE FUNCTION f_acc_kassaj_j1prikhodnyej_orderaj1_add_checkreplica()
RETURNS void AS
$BODY$
DECLARE
h RECORD;
_lastold RECORD;
_isupdated bool;
_buf int4;
BEGIN
FOR h IN SELECT * FROM acc_kassaj_j1prikhodnyej_orderaj1_heap LOOP
select * INTO _lastold
FROM acc_kassaj_j1prikhodnyej_orderaj1 AS a
WHERE a.js = h.js
ORDER BY a.actual, a.numbloaded DESC LIMIT 1 ;
IF FOUND THEN
--RAISE NOTICE 'FOUND';
_isupdated:= 0 ;
IF NOT COALESCE(((_lastold.jnj_pj2o= h.jnj_pj2o)
OR ((_lastold.jnj_pj2o IS NULL) AND (h.jnj_pj2o IS NULL))),FALSE)
THEN _isupdated = TRUE;
ELSIF NOT COALESCE(((_lastold.data= h.data)
OR ((_lastold.data IS NULL) AND (h.data IS NULL))),FALSE)
THEN _isupdated = TRUE;
ELSIF NOT COALESCE(((_lastold.vremja= h.vremja)
OR ((_lastold.vremja IS NULL) AND (h.vremja IS NULL))),FALSE)
THEN _isupdated = TRUE;
ELSIF NOT COALESCE(((_lastold.kurs= h.kurs)
OR ((_lastold.kurs IS NULL) AND (h.kurs IS NULL))),FALSE)
THEN _isupdated = TRUE;
ELSIF NOT COALESCE(((_lastold.debet= h.debet)
OR ((_lastold.debet IS NULL) AND (h.debet IS NULL))),FALSE)
THEN _isupdated = TRUE;
ELSIF NOT COALESCE(((_lastold.kredit= h.kredit)
OR ((_lastold.kredit IS NULL) AND (h.kredit IS NULL))),FALSE)
THEN _isupdated = TRUE;
ELSIF NOT COALESCE(((_lastold.klient= h.klient)
OR ((_lastold.klient IS NULL) AND (h.klient IS NULL))),FALSE)
THEN _isupdated = TRUE;
ELSIF NOT COALESCE(((_lastold.poluchateljt= h.poluchateljt)
OR ((_lastold.poluchateljt IS NULL) AND (h.poluchateljt IS NULL))),FALSE)
THEN _isupdated = TRUE;
ELSIF NOT COALESCE(((_lastold.osnovanie= h.osnovanie)
OR ((_lastold.osnovanie IS NULL) AND (h.osnovanie IS NULL))),FALSE)
THEN _isupdated = TRUE;
ELSIF NOT COALESCE(((_lastold.summaj1rj1= h.summaj1rj1)
OR ((_lastold.summaj1rj1 IS NULL) AND (h.summaj1rj1 IS NULL))),FALSE)
THEN _isupdated = TRUE;
ELSIF NOT COALESCE(((_lastold.summaj1jdj1= h.summaj1jdj1)
OR ((_lastold.summaj1jdj1 IS NULL) AND (h.summaj1jdj1 IS NULL))),FALSE)
THEN _isupdated = TRUE;
ELSIF NOT COALESCE(((_lastold.prilozhenie= h.prilozhenie)
OR ((_lastold.prilozhenie IS NULL) AND (h.prilozhenie IS NULL))),FALSE)
THEN _isupdated = TRUE;
ELSIF NOT COALESCE(((_lastold.tipj_dok= h.tipj_dok)
OR ((_lastold.tipj_dok IS NULL) AND (h.tipj_dok IS NULL))),FALSE)
THEN _isupdated = TRUE;
ELSIF NOT COALESCE(((_lastold.jpj_nds= h.jpj_nds)
OR ((_lastold.jpj_nds IS NULL) AND (h.jpj_nds IS NULL))),FALSE)
THEN _isupdated = TRUE;
ELSIF NOT COALESCE(((_lastold.jnscheta= h.jnscheta)
OR ((_lastold.jnscheta IS NULL) AND (h.jnscheta IS NULL))),FALSE)
THEN _isupdated = TRUE;
ELSIF NOT COALESCE(((_lastold.operacija= h.operacija)
OR ((_lastold.operacija IS NULL) AND (h.operacija IS NULL))),FALSE)
THEN _isupdated = TRUE;
ELSIF NOT COALESCE(((_lastold.c_count= h.c_count)
OR ((_lastold.c_count IS NULL) AND (h.c_count IS NULL))),FALSE)
THEN _isupdated = TRUE;
ELSIF NOT COALESCE(((_lastold.c_nakl= h.c_nakl)
OR ((_lastold.c_nakl IS NULL) AND (h.c_nakl IS NULL))),FALSE)
THEN _isupdated = TRUE;
ELSIF NOT COALESCE(((_lastold.username= h.username)
OR ((_lastold.username IS NULL) AND (h.username IS NULL))),FALSE)
THEN _isupdated = TRUE;
ELSIF NOT COALESCE(((_lastold.c_owner= h.c_owner)
OR ((_lastold.c_owner IS NULL) AND (h.c_owner IS NULL))),FALSE)
THEN _isupdated = TRUE;
ELSIF NOT COALESCE(((_lastold.ndone= h.ndone)
OR ((_lastold.ndone IS NULL) AND (h.ndone IS NULL))),FALSE)
THEN _isupdated = TRUE;
ELSIF NOT COALESCE(((_lastold.lvzaim= h.lvzaim)
OR ((_lastold.lvzaim IS NULL) AND (h.lvzaim IS NULL))),FALSE)
THEN _isupdated = TRUE;
ELSIF NOT COALESCE(((_lastold.paydate= h.paydate)
OR ((_lastold.paydate IS NULL) AND (h.paydate IS NULL))),FALSE)
THEN _isupdated = TRUE;
ELSIF NOT COALESCE(((_lastold.lrewrite= h.lrewrite)
OR ((_lastold.lrewrite IS NULL) AND (h.lrewrite IS NULL))),FALSE)
THEN _isupdated = TRUE;
ELSIF NOT COALESCE(((_lastold.pkoext= h.pkoext)
OR ((_lastold.pkoext IS NULL) AND (h.pkoext IS NULL))),FALSE)
THEN _isupdated = TRUE;
ELSIF NOT COALESCE(((_lastold.nyear= h.nyear)
OR ((_lastold.nyear IS NULL) AND (h.nyear IS NULL))),FALSE)
THEN _isupdated = TRUE;
ELSIF NOT COALESCE(((_lastold.whatorg= h.whatorg)
OR ((_lastold.whatorg IS NULL) AND (h.whatorg IS NULL))),FALSE)
THEN _isupdated = TRUE;
ELSIF NOT COALESCE(((_lastold.nnew= h.nnew)
OR ((_lastold.nnew IS NULL) AND (h.nnew IS NULL))),FALSE)
THEN _isupdated = TRUE;
ELSIF NOT COALESCE(((_lastold.newcode= h.newcode)
OR ((_lastold.newcode IS NULL) AND (h.newcode IS NULL))),FALSE)
THEN _isupdated = TRUE;
ELSIF NOT COALESCE(((_lastold.ehkspeditor= h.ehkspeditor)
OR ((_lastold.ehkspeditor IS NULL) AND (h.ehkspeditor IS NULL))),FALSE)
THEN _isupdated = TRUE;
ELSIF NOT COALESCE(((_lastold.lehkspeditor= h.lehkspeditor)
OR ((_lastold.lehkspeditor IS NULL) AND (h.lehkspeditor IS NULL))),FALSE)
THEN _isupdated = TRUE;
ELSIF NOT COALESCE(((_lastold.c_currency= h.c_currency)
OR ((_lastold.c_currency IS NULL) AND (h.c_currency IS NULL))),FALSE)
THEN _isupdated = TRUE;
ELSIF NOT COALESCE(((_lastold.jpnsp= h.jpnsp)
OR ((_lastold.jpnsp IS NULL) AND (h.jpnsp IS NULL))),FALSE)
THEN _isupdated = TRUE;
ELSIF NOT COALESCE(((_lastold.dov_n= h.dov_n)
OR ((_lastold.dov_n IS NULL) AND (h.dov_n IS NULL))),FALSE)
THEN _isupdated = TRUE;
ELSIF NOT COALESCE(((_lastold.dov_data= h.dov_data)
OR ((_lastold.dov_data IS NULL) AND (h.dov_data IS NULL))),FALSE)
THEN _isupdated = TRUE;
ELSIF NOT COALESCE(((_lastold.dov_dni= h.dov_dni)
OR ((_lastold.dov_dni IS NULL) AND (h.dov_dni IS NULL))),FALSE)
THEN _isupdated = TRUE;
ELSIF NOT COALESCE(((_lastold.dov_summa= h.dov_summa)
OR ((_lastold.dov_summa IS NULL) AND (h.dov_summa IS NULL))),FALSE)
THEN _isupdated = TRUE;
ELSIF NOT COALESCE(((_lastold.dov_ehkspeditor= h.dov_ehkspeditor)
OR ((_lastold.dov_ehkspeditor IS NULL) AND (h.dov_ehkspeditor IS NULL))),FALSE)
THEN _isupdated = TRUE;
ELSIF NOT COALESCE(((_lastold.dov_type= h.dov_type)
OR ((_lastold.dov_type IS NULL) AND (h.dov_type IS NULL))),FALSE)
THEN _isupdated = TRUE;
ELSIF NOT COALESCE(((_lastold.makedate= h.makedate)
OR ((_lastold.makedate IS NULL) AND (h.makedate IS NULL))),FALSE)
THEN _isupdated = TRUE;
ELSIF NOT COALESCE(((_lastold.updatedate= h.updatedate)
OR ((_lastold.updatedate IS NULL) AND (h.updatedate IS NULL))),FALSE)
THEN _isupdated = TRUE;
END IF;
--RAISE NOTICE '_isupdated %',_isupdated;
--RAISE NOTICE 'lastold.c_type IS NULL %',_lastold.c_type;
IF _isupdated = TRUE THEN
--скинем флаг предыдущей актуальной
UPDATE acc_kassaj_j1prikhodnyej_orderaj1
SET actual= 0
WHERE acc_kassaj_j1prikhodnyej_orderaj1.js = h.js
AND acc_kassaj_j1prikhodnyej_orderaj1.actual= - 1 ;
--
INSERT INTO acc_kassaj_j1prikhodnyej_orderaj1
( js, jnj_pj2o, data, vremja, kurs, debet, kredit, klient,
poluchateljt, osnovanie, summaj1rj1, summaj1jdj1, prilozhenie, tipj_dok, jpj_nds, jnscheta, operacija,
c_count, c_nakl, username, c_owner, ndone, lvzaim, paydate, lrewrite, pkoext, nyear, whatorg, nnew, newcode,
ehkspeditor, lehkspeditor, c_currency, jpnsp, dov_n, dov_data, dov_dni, dov_summa, dov_ehkspeditor, dov_type,
makedate, updatedate )
VALUES(h.js, h.jnj_pj2o, h.data, h.vremja, h.kurs, h.debet, h.kredit, h.klient, h.poluchateljt, h.osnovanie,
h.summaj1rj1, h.summaj1jdj1, h.prilozhenie, h.tipj_dok, h.jpj_nds, h.jnscheta, h.operacija, h.c_count,
h.c_nakl, h.username, h.c_owner, h.ndone, h.lvzaim, h.paydate, h.lrewrite, h.pkoext, h.nyear, h.whatorg,
h.nnew, h.newcode, h.ehkspeditor, h.lehkspeditor, h.c_currency, h.jpnsp, h.dov_n, h.dov_data, h.dov_dni,
h.dov_summa, h.dov_ehkspeditor, h.dov_type, h.makedate, h.updatedate);
--вставка новой актуальной версии
ELSE
--обновляем старое, если помечена как удаленная
UPDATE acc_kassaj_j1prikhodnyej_orderaj1
SET actual= - 1
WHERE acc_kassaj_j1prikhodnyej_orderaj1.numbloaded = _lastold.numbloaded
AND actual= 0 ;
--отказываемся от вставки
END IF;
ELSE
--вставка новой актуальной записи
INSERT INTO acc_kassaj_j1prikhodnyej_orderaj1
( js, jnj_pj2o, data, vremja, kurs, debet, kredit, klient,
poluchateljt, osnovanie, summaj1rj1, summaj1jdj1, prilozhenie, tipj_dok, jpj_nds, jnscheta, operacija,
c_count, c_nakl, username, c_owner, ndone, lvzaim, paydate, lrewrite, pkoext, nyear, whatorg, nnew, newcode,
ehkspeditor, lehkspeditor, c_currency, jpnsp, dov_n, dov_data, dov_dni, dov_summa, dov_ehkspeditor, dov_type,
makedate, updatedate )
VALUES(h.js, h.jnj_pj2o, h.data, h.vremja, h.kurs, h.debet, h.kredit, h.klient, h.poluchateljt, h.osnovanie,
h.summaj1rj1, h.summaj1jdj1, h.prilozhenie, h.tipj_dok, h.jpj_nds, h.jnscheta, h.operacija, h.c_count,
h.c_nakl, h.username, h.c_owner, h.ndone, h.lvzaim, h.paydate, h.lrewrite, h.pkoext, h.nyear, h.whatorg,
h.nnew, h.newcode, h.ehkspeditor, h.lehkspeditor, h.c_currency, h.jpnsp, h.dov_n, h.dov_data, h.dov_dni,
h.dov_summa, h.dov_ehkspeditor, h.dov_type, h.makedate, h.updatedate);
END IF;
END LOOP;
RETURN;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE;
то то же самое действие прокатит на порядок(и) быстрее.
а если по простому написать инсерт + апдейт (т.к. всё уже на сервере, и от непосредственной вставки извне мы ушли - триггер не нужен), то получаем
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219. 220. 221. 222. 223. 224. 225. 226. 227. 228. 229. 230. 231. 232. 233. 234. 235. 236. 237. 238. 239. 240. 241. 242. 243. 244. 245. 246. 247. 248. 249. 250. 251. 252. 253. 254. 255. 256. 257. 258. 259. 260. 261. 262. 263. 264. 265. 266. 267. 268. 269. 270. 271. 272. 273. 274. 275. 276. 277. 278. 279. 280. 281. 282. 283. 284.
CREATE OR REPLACE FUNCTION f_acc_kassaj_j1prikhodnyej_orderaj1_add_checkreplica_sql_old()
RETURNS void AS
$BODY$
-- работает и в 7.4 - где баг с IS DISTINCT FROM
UPDATE acc_kassaj_j1prikhodnyej_orderaj1
SET actual = 0
FROM acc_kassaj_j1prikhodnyej_orderaj1_heap AS h
LEFT JOIN acc_kassaj_j1prikhodnyej_orderaj1 AS p USING (js)
WHERE
acc_kassaj_j1prikhodnyej_orderaj1.js= h.js
AND
acc_kassaj_j1prikhodnyej_orderaj1.actual = - 1
AND
p.actual = - 1
AND
NOT (
COALESCE(((p.jnj_pj2o= h.jnj_pj2o)
OR ((p.jnj_pj2o IS NULL) AND (h.jnj_pj2o IS NULL))),FALSE)
AND
COALESCE(((p.data= h.data)
OR ((p.data IS NULL) AND (h.data IS NULL))),FALSE)
AND
COALESCE(((p.vremja= h.vremja)
OR ((p.vremja IS NULL) AND (h.vremja IS NULL))),FALSE)
AND
COALESCE(((p.kurs= h.kurs)
OR ((p.kurs IS NULL) AND (h.kurs IS NULL))),FALSE)
AND
COALESCE(((p.debet= h.debet)
OR ((p.debet IS NULL) AND (h.debet IS NULL))),FALSE)
AND
COALESCE(((p.kredit= h.kredit)
OR ((p.kredit IS NULL) AND (h.kredit IS NULL))),FALSE)
AND
COALESCE(((p.klient= h.klient)
OR ((p.klient IS NULL) AND (h.klient IS NULL))),FALSE)
AND
COALESCE(((p.poluchateljt= h.poluchateljt)
OR ((p.poluchateljt IS NULL) AND (h.poluchateljt IS NULL))),FALSE)
AND
COALESCE(((p.osnovanie= h.osnovanie)
OR ((p.osnovanie IS NULL) AND (h.osnovanie IS NULL))),FALSE)
AND
COALESCE(((p.summaj1rj1= h.summaj1rj1)
OR ((p.summaj1rj1 IS NULL) AND (h.summaj1rj1 IS NULL))),FALSE)
AND
COALESCE(((p.summaj1jdj1= h.summaj1jdj1)
OR ((p.summaj1jdj1 IS NULL) AND (h.summaj1jdj1 IS NULL))),FALSE)
AND
COALESCE(((p.prilozhenie= h.prilozhenie)
OR ((p.prilozhenie IS NULL) AND (h.prilozhenie IS NULL))),FALSE)
AND
COALESCE(((p.tipj_dok= h.tipj_dok)
OR ((p.tipj_dok IS NULL) AND (h.tipj_dok IS NULL))),FALSE)
AND
COALESCE(((p.jpj_nds= h.jpj_nds)
OR ((p.jpj_nds IS NULL) AND (h.jpj_nds IS NULL))),FALSE)
AND
COALESCE(((p.jnscheta= h.jnscheta)
OR ((p.jnscheta IS NULL) AND (h.jnscheta IS NULL))),FALSE)
AND
COALESCE(((p.operacija= h.operacija)
OR ((p.operacija IS NULL) AND (h.operacija IS NULL))),FALSE)
AND
COALESCE(((p.c_count= h.c_count)
OR ((p.c_count IS NULL) AND (h.c_count IS NULL))),FALSE)
AND
COALESCE(((p.c_nakl= h.c_nakl)
OR ((p.c_nakl IS NULL) AND (h.c_nakl IS NULL))),FALSE)
AND
COALESCE(((p.username= h.username)
OR ((p.username IS NULL) AND (h.username IS NULL))),FALSE)
AND
COALESCE(((p.c_owner= h.c_owner)
OR ((p.c_owner IS NULL) AND (h.c_owner IS NULL))),FALSE)
AND
COALESCE(((p.ndone= h.ndone)
OR ((p.ndone IS NULL) AND (h.ndone IS NULL))),FALSE)
AND
COALESCE(((p.lvzaim= h.lvzaim)
OR ((p.lvzaim IS NULL) AND (h.lvzaim IS NULL))),FALSE)
AND
COALESCE(((p.paydate= h.paydate)
OR ((p.paydate IS NULL) AND (h.paydate IS NULL))),FALSE)
AND
COALESCE(((p.lrewrite= h.lrewrite)
OR ((p.lrewrite IS NULL) AND (h.lrewrite IS NULL))),FALSE)
AND
COALESCE(((p.pkoext= h.pkoext)
OR ((p.pkoext IS NULL) AND (h.pkoext IS NULL))),FALSE)
AND
COALESCE(((p.nyear= h.nyear)
OR ((p.nyear IS NULL) AND (h.nyear IS NULL))),FALSE)
AND
COALESCE(((p.whatorg= h.whatorg)
OR ((p.whatorg IS NULL) AND (h.whatorg IS NULL))),FALSE)
AND
COALESCE(((p.nnew= h.nnew)
OR ((p.nnew IS NULL) AND (h.nnew IS NULL))),FALSE)
AND
COALESCE(((p.newcode= h.newcode)
OR ((p.newcode IS NULL) AND (h.newcode IS NULL))),FALSE)
AND
COALESCE(((p.ehkspeditor= h.ehkspeditor)
OR ((p.ehkspeditor IS NULL) AND (h.ehkspeditor IS NULL))),FALSE)
AND
COALESCE(((p.lehkspeditor= h.lehkspeditor)
OR ((p.lehkspeditor IS NULL) AND (h.lehkspeditor IS NULL))),FALSE)
AND
COALESCE(((p.c_currency= h.c_currency)
OR ((p.c_currency IS NULL) AND (h.c_currency IS NULL))),FALSE)
AND
COALESCE(((p.jpnsp= h.jpnsp)
OR ((p.jpnsp IS NULL) AND (h.jpnsp IS NULL))),FALSE)
AND
COALESCE(((p.dov_n= h.dov_n)
OR ((p.dov_n IS NULL) AND (h.dov_n IS NULL))),FALSE)
AND
COALESCE(((p.dov_data= h.dov_data)
OR ((p.dov_data IS NULL) AND (h.dov_data IS NULL))),FALSE)
AND
COALESCE(((p.dov_dni= h.dov_dni)
OR ((p.dov_dni IS NULL) AND (h.dov_dni IS NULL))),FALSE)
AND
COALESCE(((p.dov_summa= h.dov_summa)
OR ((p.dov_summa IS NULL) AND (h.dov_summa IS NULL))),FALSE)
AND
COALESCE(((p.dov_ehkspeditor= h.dov_ehkspeditor)
OR ((p.dov_ehkspeditor IS NULL) AND (h.dov_ehkspeditor IS NULL))),FALSE)
AND
COALESCE(((p.dov_type= h.dov_type)
OR ((p.dov_type IS NULL) AND (h.dov_type IS NULL))),FALSE)
AND
COALESCE(((p.makedate= h.makedate)
OR ((p.makedate IS NULL) AND (h.makedate IS NULL))),FALSE)
AND
COALESCE(((p.updatedate= h.updatedate)
OR ((p.updatedate IS NULL) AND (h.updatedate IS NULL))),FALSE)
)
;
INSERT INTO acc_kassaj_j1prikhodnyej_orderaj1 ( js, jnj_pj2o, data, vremja, kurs, debet, kredit, klient,
poluchateljt, osnovanie, summaj1rj1, summaj1jdj1, prilozhenie, tipj_dok, jpj_nds, jnscheta, operacija,
c_count, c_nakl, username, c_owner, ndone, lvzaim, paydate, lrewrite, pkoext, nyear, whatorg, nnew, newcode,
ehkspeditor, lehkspeditor, c_currency, jpnsp, dov_n, dov_data, dov_dni, dov_summa, dov_ehkspeditor, dov_type,
makedate, updatedate )
SELECT h.js, h.jnj_pj2o, h.data, h.vremja, h.kurs, h.debet, h.kredit, h.klient, h.poluchateljt, h.osnovanie,
h.summaj1rj1, h.summaj1jdj1, h.prilozhenie, h.tipj_dok, h.jpj_nds, h.jnscheta, h.operacija, h.c_count,
h.c_nakl, h.username, h.c_owner, h.ndone, h.lvzaim, h.paydate, h.lrewrite, h.pkoext, h.nyear, h.whatorg,
h.nnew, h.newcode, h.ehkspeditor, h.lehkspeditor, h.c_currency, h.jpnsp, h.dov_n, h.dov_data, h.dov_dni,
h.dov_summa, h.dov_ehkspeditor, h.dov_type, h.makedate, h.updatedate
FROM acc_kassaj_j1prikhodnyej_orderaj1_heap AS h
LEFT JOIN acc_kassaj_j1prikhodnyej_orderaj1 AS p USING(js)
WHERE
NOT EXISTS(SELECT js FROM acc_kassaj_j1prikhodnyej_orderaj1
AS p2 WHERE p2.actual =- 1 AND p2.js = h.js)
--(p.actual = -1 OR p.js IS NULL)
AND
NOT (
COALESCE(((p.jnj_pj2o= h.jnj_pj2o)
OR ((p.jnj_pj2o IS NULL) AND (h.jnj_pj2o IS NULL))),FALSE)
AND
COALESCE(((p.data= h.data)
OR ((p.data IS NULL) AND (h.data IS NULL))),FALSE)
AND
COALESCE(((p.vremja= h.vremja)
OR ((p.vremja IS NULL) AND (h.vremja IS NULL))),FALSE)
AND
COALESCE(((p.kurs= h.kurs)
OR ((p.kurs IS NULL) AND (h.kurs IS NULL))),FALSE)
AND
COALESCE(((p.debet= h.debet)
OR ((p.debet IS NULL) AND (h.debet IS NULL))),FALSE)
AND
COALESCE(((p.kredit= h.kredit)
OR ((p.kredit IS NULL) AND (h.kredit IS NULL))),FALSE)
AND
COALESCE(((p.klient= h.klient)
OR ((p.klient IS NULL) AND (h.klient IS NULL))),FALSE)
AND
COALESCE(((p.poluchateljt= h.poluchateljt)
OR ((p.poluchateljt IS NULL) AND (h.poluchateljt IS NULL))),FALSE)
AND
COALESCE(((p.osnovanie= h.osnovanie)
OR ((p.osnovanie IS NULL) AND (h.osnovanie IS NULL))),FALSE)
AND
COALESCE(((p.summaj1rj1= h.summaj1rj1)
OR ((p.summaj1rj1 IS NULL) AND (h.summaj1rj1 IS NULL))),FALSE)
AND
COALESCE(((p.summaj1jdj1= h.summaj1jdj1)
OR ((p.summaj1jdj1 IS NULL) AND (h.summaj1jdj1 IS NULL))),FALSE)
AND
COALESCE(((p.prilozhenie= h.prilozhenie)
OR ((p.prilozhenie IS NULL) AND (h.prilozhenie IS NULL))),FALSE)
AND
COALESCE(((p.tipj_dok= h.tipj_dok)
OR ((p.tipj_dok IS NULL) AND (h.tipj_dok IS NULL))),FALSE)
AND
COALESCE(((p.jpj_nds= h.jpj_nds)
OR ((p.jpj_nds IS NULL) AND (h.jpj_nds IS NULL))),FALSE)
AND
COALESCE(((p.jnscheta= h.jnscheta)
OR ((p.jnscheta IS NULL) AND (h.jnscheta IS NULL))),FALSE)
AND
COALESCE(((p.operacija= h.operacija)
OR ((p.operacija IS NULL) AND (h.operacija IS NULL))),FALSE)
AND
COALESCE(((p.c_count= h.c_count)
OR ((p.c_count IS NULL) AND (h.c_count IS NULL))),FALSE)
AND
COALESCE(((p.c_nakl= h.c_nakl)
OR ((p.c_nakl IS NULL) AND (h.c_nakl IS NULL))),FALSE)
AND
COALESCE(((p.username= h.username)
OR ((p.username IS NULL) AND (h.username IS NULL))),FALSE)
AND
COALESCE(((p.c_owner= h.c_owner)
OR ((p.c_owner IS NULL) AND (h.c_owner IS NULL))),FALSE)
AND
COALESCE(((p.ndone= h.ndone)
OR ((p.ndone IS NULL) AND (h.ndone IS NULL))),FALSE)
AND
COALESCE(((p.lvzaim= h.lvzaim)
OR ((p.lvzaim IS NULL) AND (h.lvzaim IS NULL))),FALSE)
AND
COALESCE(((p.paydate= h.paydate)
OR ((p.paydate IS NULL) AND (h.paydate IS NULL))),FALSE)
AND
COALESCE(((p.lrewrite= h.lrewrite)
OR ((p.lrewrite IS NULL) AND (h.lrewrite IS NULL))),FALSE)
AND
COALESCE(((p.pkoext= h.pkoext)
OR ((p.pkoext IS NULL) AND (h.pkoext IS NULL))),FALSE)
AND
COALESCE(((p.nyear= h.nyear)
OR ((p.nyear IS NULL) AND (h.nyear IS NULL))),FALSE)
AND
COALESCE(((p.whatorg= h.whatorg)
OR ((p.whatorg IS NULL) AND (h.whatorg IS NULL))),FALSE)
AND
COALESCE(((p.nnew= h.nnew)
OR ((p.nnew IS NULL) AND (h.nnew IS NULL))),FALSE)
AND
COALESCE(((p.newcode= h.newcode)
OR ((p.newcode IS NULL) AND (h.newcode IS NULL))),FALSE)
AND
COALESCE(((p.ehkspeditor= h.ehkspeditor)
OR ((p.ehkspeditor IS NULL) AND (h.ehkspeditor IS NULL))),FALSE)
AND
COALESCE(((p.lehkspeditor= h.lehkspeditor)
OR ((p.lehkspeditor IS NULL) AND (h.lehkspeditor IS NULL))),FALSE)
AND
COALESCE(((p.c_currency= h.c_currency)
OR ((p.c_currency IS NULL) AND (h.c_currency IS NULL))),FALSE)
AND
COALESCE(((p.jpnsp= h.jpnsp)
OR ((p.jpnsp IS NULL) AND (h.jpnsp IS NULL))),FALSE)
AND
COALESCE(((p.dov_n= h.dov_n)
OR ((p.dov_n IS NULL) AND (h.dov_n IS NULL))),FALSE)
AND
COALESCE(((p.dov_data= h.dov_data)
OR ((p.dov_data IS NULL) AND (h.dov_data IS NULL))),FALSE)
AND
COALESCE(((p.dov_dni= h.dov_dni)
OR ((p.dov_dni IS NULL) AND (h.dov_dni IS NULL))),FALSE)
AND
COALESCE(((p.dov_summa= h.dov_summa)
OR ((p.dov_summa IS NULL) AND (h.dov_summa IS NULL))),FALSE)
AND
COALESCE(((p.dov_ehkspeditor= h.dov_ehkspeditor)
OR ((p.dov_ehkspeditor IS NULL) AND (h.dov_ehkspeditor IS NULL))),FALSE)
AND
COALESCE(((p.dov_type= h.dov_type)
OR ((p.dov_type IS NULL) AND (h.dov_type IS NULL))),FALSE)
AND
COALESCE(((p.makedate= h.makedate)
OR ((p.makedate IS NULL) AND (h.makedate IS NULL))),FALSE)
AND
COALESCE(((p.updatedate= h.updatedate)
OR ((p.updatedate IS NULL) AND (h.updatedate IS NULL))),FALSE)
);
$BODY$
LANGUAGE 'sql' VOLATILE;
уже 3 сек. в 7-ке и 0.6 в 8-ке.
для справок текст в 8-ке , из за отсутствия бага, много короче
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74.
CREATE OR REPLACE FUNCTION f_acc_kassaj_j1prikhodnyej_orderaj1_add_checkreplica_sql()
RETURNS void AS
$BODY$UPDATE acc_kassaj_j1prikhodnyej_orderaj1
SET actual = 0
FROM
/*
SELECT acc_kassaj_j1prikhodnyej_orderaj1.*
FROM acc_kassaj_j1prikhodnyej_orderaj1
INNER JOIN
*/
acc_kassaj_j1prikhodnyej_orderaj1_heap AS h
-- USING (js)
LEFT JOIN acc_kassaj_j1prikhodnyej_orderaj1 AS p USING (js)
WHERE
acc_kassaj_j1prikhodnyej_orderaj1.js= h.js
AND
acc_kassaj_j1prikhodnyej_orderaj1.actual = - 1
AND
p.actual = - 1
AND
(
(p.jnj_pj2o, p.data, p.vremja, p.kurs, p.debet, p.kredit, p.klient, p.poluchateljt, p.osnovanie,
p.summaj1rj1, p.summaj1jdj1, p.prilozhenie, p.tipj_dok, p.jpj_nds, p.jnscheta, p.operacija, p.c_count,
p.c_nakl, p.username, p.c_owner, p.ndone, p.lvzaim, p.paydate, p.lrewrite, p.pkoext, p.nyear, p.whatorg,
p.nnew, p.newcode, p.ehkspeditor, p.lehkspeditor, p.c_currency, p.jpnsp, p.dov_n, p.dov_data, p.dov_dni,
p.dov_summa, p.dov_ehkspeditor, p.dov_type, p.makedate, p.updatedate)
IS DISTINCT FROM
(h.jnj_pj2o, h.data, h.vremja, h.kurs, h.debet, h.kredit, h.klient, h.poluchateljt, h.osnovanie,
h.summaj1rj1, h.summaj1jdj1, h.prilozhenie, h.tipj_dok, h.jpj_nds, h.jnscheta, h.operacija, h.c_count,
h.c_nakl, h.username, h.c_owner, h.ndone, h.lvzaim, h.paydate, h.lrewrite, h.pkoext, h.nyear, h.whatorg,
h.nnew, h.newcode, h.ehkspeditor, h.lehkspeditor, h.c_currency, h.jpnsp, h.dov_n, h.dov_data, h.dov_dni,
h.dov_summa, h.dov_ehkspeditor, h.dov_type, h.makedate, h.updatedate)
)
;
INSERT INTO acc_kassaj_j1prikhodnyej_orderaj1 ( js, jnj_pj2o, data, vremja, kurs, debet, kredit, klient,
poluchateljt, osnovanie, summaj1rj1, summaj1jdj1, prilozhenie, tipj_dok, jpj_nds, jnscheta, operacija,
c_count, c_nakl, username, c_owner, ndone, lvzaim, paydate, lrewrite, pkoext, nyear, whatorg, nnew, newcode,
ehkspeditor, lehkspeditor, c_currency, jpnsp, dov_n, dov_data, dov_dni, dov_summa, dov_ehkspeditor, dov_type,
makedate, updatedate )
SELECT h.js, h.jnj_pj2o, h.data, h.vremja, h.kurs, h.debet, h.kredit, h.klient, h.poluchateljt, h.osnovanie,
h.summaj1rj1, h.summaj1jdj1, h.prilozhenie, h.tipj_dok, h.jpj_nds, h.jnscheta, h.operacija, h.c_count,
h.c_nakl, h.username, h.c_owner, h.ndone, h.lvzaim, h.paydate, h.lrewrite, h.pkoext, h.nyear, h.whatorg,
h.nnew, h.newcode, h.ehkspeditor, h.lehkspeditor, h.c_currency, h.jpnsp, h.dov_n, h.dov_data, h.dov_dni,
h.dov_summa, h.dov_ehkspeditor, h.dov_type, h.makedate, h.updatedate
FROM acc_kassaj_j1prikhodnyej_orderaj1_heap AS h
LEFT JOIN acc_kassaj_j1prikhodnyej_orderaj1 AS p
--USING(js)
ON h.js=p.js AND p.actual =- 1
WHERE
p.js is null
--уже не надо проверять дистинктность с неактуальными
/*
NOT EXISTS(SELECT js FROM acc_kassaj_j1prikhodnyej_orderaj1
AS p2 WHERE p2.actual =-1 AND p2.js = h.js)
--(p.actual = -1 OR p.js IS NULL)
AND
(
(p.jnj_pj2o, p.data, p.vremja, p.kurs, p.debet, p.kredit, p.klient, p.poluchateljt, p.osnovanie,
p.summaj1rj1, p.summaj1jdj1, p.prilozhenie, p.tipj_dok, p.jpj_nds, p.jnscheta, p.operacija, p.c_count,
p.c_nakl, p.username, p.c_owner, p.ndone, p.lvzaim, p.paydate, p.lrewrite, p.pkoext, p.nyear, p.whatorg,
p.nnew, p.newcode, p.ehkspeditor, p.lehkspeditor, p.c_currency, p.jpnsp, p.dov_n, p.dov_data, p.dov_dni,
p.dov_summa, p.dov_ehkspeditor, p.dov_type, p.makedate, p.updatedate)
IS DISTINCT FROM
(h.jnj_pj2o, h.data, h.vremja, h.kurs, h.debet, h.kredit, h.klient, h.poluchateljt, h.osnovanie,
h.summaj1rj1, h.summaj1jdj1, h.prilozhenie, h.tipj_dok, h.jpj_nds, h.jnscheta, h.operacija, h.c_count,
h.c_nakl, h.username, h.c_owner, h.ndone, h.lvzaim, h.paydate, h.lrewrite, h.pkoext, h.nyear, h.whatorg,
h.nnew, h.newcode, h.ehkspeditor, h.lehkspeditor, h.c_currency, h.jpnsp, h.dov_n, h.dov_data, h.dov_dni,
h.dov_summa, h.dov_ehkspeditor, h.dov_type, h.makedate, h.updatedate)
)
*/;$BODY$
LANGUAGE 'sql' VOLATILE;
надеюс, ястно об чем я тут сам с собой офтопил? токо вот осилит ли хто это прочитать
|