SQL C++ āĻ¨āĻ¯āĻŧ, āĻāĻŦāĻ āĻāĻžāĻāĻžāĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻ āĻ¨āĻ¯āĻŧāĨ¤ āĻ āĻ¤āĻāĻŦ, āĻ˛āĻāĻŋāĻā§āĻ¯āĻžāĻ˛ āĻāĻā§āĻ¸āĻĒā§āĻ°ā§āĻļāĻ¨ā§āĻ° āĻāĻŖāĻ¨āĻž āĻāĻŋāĻ¨ā§āĻ¨āĻāĻžāĻŦā§ āĻāĻā§ āĻāĻŦāĻ āĻāĻāĻŋ āĻŽā§āĻā§āĻ āĻāĻāĻ āĻāĻŋāĻ¨āĻŋāĻ¸ āĻ¨āĻ¯āĻŧ:
WHERE fncondX() AND fncondY()
= fncondX() && fncondY()
PostgreSQL āĻā§āĻ¯ā§āĻ¯āĻŧāĻžāĻ°ā§ āĻāĻā§āĻ¸āĻŋāĻāĻŋāĻāĻļāĻ¨ āĻĒā§āĻ˛ā§āĻ¯āĻžāĻ¨ āĻ
āĻĒā§āĻāĻŋāĻŽāĻžāĻāĻ āĻāĻ°āĻžāĻ° āĻĒā§āĻ°āĻā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ¯āĻŧ
āĻ
āĻ¤āĻāĻŦ, āĻāĻĒāĻ¨āĻŋ āĻ¯āĻĻāĻŋ āĻāĻāĻ¨āĻ āĻ
āĻā§āĻ°āĻžāĻ§āĻŋāĻāĻžāĻ° āĻĒāĻ°āĻŋāĻāĻžāĻ˛āĻ¨āĻž āĻāĻ°āĻ¤ā§ āĻāĻžāĻ¨ āĻ¤āĻŦā§ āĻāĻĒāĻ¨āĻžāĻā§ āĻāĻāĻŋ āĻāĻ āĻ¨ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§ āĻāĻ āĻļāĻ°ā§āĻ¤ āĻ
āĻ¸āĻŽ āĻāĻ°āĻž āĻļāĻ°ā§āĻ¤āĻžāĻŦāĻ˛ā§ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§
āĻĄā§āĻāĻž āĻāĻŦāĻ āĻ¤āĻžāĻĻā§āĻ° āĻ¸āĻžāĻĨā§ āĻāĻžāĻ āĻāĻ°āĻž āĻāĻŋāĻ¤ā§āĻ¤āĻŋ
#0: RTFM
āĻļā§āĻ°ā§ āĻšāĻā§āĻā§
āĻ¯āĻāĻ¨ āĻŽā§āĻ˛ā§āĻ¯āĻžāĻ¯āĻŧāĻ¨ā§āĻ° āĻā§āĻ°āĻŽ āĻā§āĻ°ā§āĻ¤ā§āĻŦāĻĒā§āĻ°ā§āĻŖ, āĻ¤āĻāĻ¨ āĻāĻāĻŋ āĻāĻ āĻ¨ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻā§āĻ¯āĻžāĻĒāĻāĻžāĻ° āĻāĻ°āĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§
CASE
. āĻāĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§āĻĒ, āĻāĻāĻŋ āĻāĻāĻāĻŋ āĻŦāĻžāĻā§āĻ¯ā§ āĻļā§āĻ¨ā§āĻ¯ āĻĻā§āĻŦāĻžāĻ°āĻž āĻŦāĻŋāĻāĻžāĻāĻ¨ āĻāĻĄāĻŧāĻžāĻ¨ā§āĻ° āĻāĻāĻāĻŋ āĻāĻĒāĻžāĻ¯āĻŧWHERE
āĻ āĻŦāĻŋāĻļā§āĻŦāĻ¸ā§āĻ¤SELECT ... WHERE x > 0 AND y/x > 1.5;
āĻ¨āĻŋāĻ°āĻžāĻĒāĻĻ āĻŦāĻŋāĻāĻ˛ā§āĻĒ:
SELECT ... WHERE CASE WHEN x > 0 THEN y/x > 1.5 ELSE false END;
āĻĄāĻŋāĻāĻžāĻāĻ¨āĻāĻŋ āĻāĻāĻžāĻŦā§ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻā§
CASE
āĻ āĻāĻŋāĻŦā§āĻ¯āĻā§āĻ¤āĻŋāĻāĻŋāĻā§ āĻ āĻĒā§āĻāĻŋāĻŽāĻžāĻāĻā§āĻļāĻžāĻ¨ āĻĨā§āĻā§ āĻ°āĻā§āĻˇāĻž āĻāĻ°ā§, āĻ¤āĻžāĻ āĻāĻāĻŋ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ā§ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻž āĻāĻāĻŋāĻ¤āĨ¤
#1: āĻā§āĻ°āĻŋāĻāĻžāĻ° āĻļāĻ°ā§āĻ¤
BEGIN
IF cond(NEW.fld) AND EXISTS(SELECT ...) THEN
...
END IF;
RETURN NEW;
END;
āĻ¸āĻŦāĻāĻŋāĻā§āĻ āĻāĻžāĻ˛ā§ āĻ˛āĻžāĻāĻā§, āĻāĻŋāĻ¨ā§āĻ¤ā§... āĻā§āĻ āĻĒā§āĻ°āĻ¤āĻŋāĻļā§āĻ°ā§āĻ¤āĻŋ āĻĻā§āĻ¯āĻŧ āĻ¨āĻž āĻ¯ā§ āĻŦāĻŋāĻ¨āĻŋāĻ¯āĻŧā§āĻ SELECT
āĻĒā§āĻ°āĻĨāĻŽ āĻļāĻ°ā§āĻ¤ āĻŽāĻŋāĻĨā§āĻ¯āĻž āĻšāĻ˛ā§ āĻŽā§āĻ¤ā§āĻ¯ā§āĻĻāĻ¨ā§āĻĄ āĻāĻžāĻ°ā§āĻ¯āĻāĻ° āĻāĻ°āĻž āĻšāĻŦā§ āĻ¨āĻžāĨ¤ āĻāĻ° āĻ¸āĻžāĻĨā§ āĻāĻāĻŋ āĻ āĻŋāĻ āĻāĻ°āĻž āĻ¯āĻžāĻ āĻ¨ā§āĻ¸ā§āĻā§āĻĄ IF
:
BEGIN
IF cond(NEW.fld) THEN
IF EXISTS(SELECT ...) THEN
...
END IF;
END IF;
RETURN NEW;
END;
āĻāĻāĻ¨ āĻāĻ¸ā§āĻ¨ āĻ¸āĻžāĻŦāĻ§āĻžāĻ¨ā§ āĻ¤āĻžāĻāĻžāĻ¨ - āĻā§āĻ°āĻŋāĻāĻžāĻ° āĻĢāĻžāĻāĻļāĻ¨ā§āĻ° āĻĒā§āĻ°ā§ āĻļāĻ°ā§āĻ°āĻāĻŋ "āĻŽā§āĻĄāĻŧāĻžāĻ¨ā§" āĻāĻā§ IF
. āĻāĻ° āĻŽāĻžāĻ¨ā§ āĻšāĻ˛ āĻ¯ā§ āĻā§āĻ¨āĻ āĻāĻŋāĻā§āĻ āĻāĻŽāĻžāĻĻā§āĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻĒāĻĻā§āĻ§āĻ¤āĻŋ āĻĨā§āĻā§ āĻāĻ āĻļāĻ°ā§āĻ¤āĻāĻŋ āĻ
āĻĒāĻ¸āĻžāĻ°āĻŖ āĻāĻ°āĻ¤ā§ āĻŦāĻžāĻ§āĻž āĻĻā§āĻ¯āĻŧ āĻ¨āĻž WHEN
- āĻļāĻ°ā§āĻ¤āĻžāĻŦāĻ˛ā§
BEGIN
IF EXISTS(SELECT ...) THEN
...
END IF;
RETURN NEW;
END;
...
CREATE TRIGGER ...
WHEN cond(NEW.fld);
āĻļāĻ°ā§āĻ¤āĻāĻŋ āĻŽāĻŋāĻĨā§āĻ¯āĻž āĻšāĻ˛ā§ āĻāĻ āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻāĻŋ āĻ¸āĻžāĻ°ā§āĻāĻžāĻ°ā§āĻ° āĻ¸āĻāĻ¸ā§āĻĨāĻžāĻ¨āĻā§āĻ˛āĻŋ āĻ¸āĻāĻ°āĻā§āĻˇāĻŖ āĻāĻ°āĻžāĻ° āĻā§āĻ¯āĻžāĻ°āĻžāĻ¨ā§āĻāĻŋāĻ¯ā§āĻā§āĻ¤ā§ˇ
#2: āĻŦāĻž/āĻāĻŦāĻ āĻā§āĻāĻ¨
SELECT ... WHERE EXISTS(... A) OR EXISTS(... B)
āĻ
āĻ¨ā§āĻ¯āĻĨāĻžāĻ¯āĻŧ, āĻāĻĒāĻ¨āĻŋ āĻāĻāĻ¯āĻŧ āĻ¸āĻā§āĻā§ āĻļā§āĻˇ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨ EXISTS
āĻšāĻŦā§ "āĻ¸āĻ¤ā§āĻ¯", āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻāĻāĻ¯āĻŧāĻ āĻĒā§āĻ°āĻŖ āĻšāĻŦā§.
āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻ¯āĻĻāĻŋ āĻāĻŽāĻ°āĻž āĻ¨āĻŋāĻļā§āĻāĻŋāĻ¤āĻāĻžāĻŦā§ āĻāĻžāĻ¨āĻŋ āĻ¯ā§ āĻ¤āĻžāĻĻā§āĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻāĻāĻāĻŋ "āĻ¸āĻ¤ā§āĻ¯" āĻĒā§āĻ°āĻžāĻ¯āĻŧāĻļāĻ (āĻŦāĻž "āĻŽāĻŋāĻĨā§āĻ¯āĻž" - āĻāĻ° āĻāĻ¨ā§āĻ¯ AND
-āĻā§āĻāĻ¨) - āĻāĻāĻž āĻāĻŋ āĻā§āĻ¨ā§āĻāĻžāĻŦā§ "āĻāĻ° āĻ
āĻā§āĻ°āĻžāĻ§āĻŋāĻāĻžāĻ° āĻŦā§āĻĻā§āĻ§āĻŋ" āĻāĻ°āĻž āĻ¸āĻŽā§āĻāĻŦ āĻ¯āĻžāĻ¤ā§ āĻĻā§āĻŦāĻŋāĻ¤ā§āĻ¯āĻŧāĻāĻŋ āĻāĻŦāĻžāĻ° āĻāĻžāĻ°ā§āĻ¯āĻāĻ° āĻ¨āĻž āĻšāĻ¯āĻŧ?
āĻĻā§āĻāĻž āĻ¯āĻžāĻā§āĻā§ āĻ¯ā§ āĻāĻāĻŋ āĻ¸āĻŽā§āĻāĻŦ - āĻ
ā§āĻ¯āĻžāĻ˛āĻāĻ°āĻŋāĻĻāĻŽāĻŋāĻ āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻāĻŋ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ā§āĻ° āĻŦāĻŋāĻˇāĻ¯āĻŧā§āĻ° āĻāĻžāĻāĻžāĻāĻžāĻāĻŋ
āĻāĻ˛ā§āĻ¨ CASE-āĻāĻ° āĻ āĻ§ā§āĻ¨ā§ āĻāĻ āĻĻā§āĻāĻŋ āĻļāĻ°ā§āĻ¤āĻ āĻļā§āĻ§ā§ "āĻ¨āĻžāĻĄāĻŧāĻž" āĻāĻ°āĻŋ:
SELECT ...
WHERE
CASE
WHEN EXISTS(... A) THEN TRUE
WHEN EXISTS(... B) THEN TRUE
END
āĻāĻ āĻā§āĻˇā§āĻ¤ā§āĻ°ā§ āĻāĻŽāĻ°āĻž āĻ¸āĻāĻā§āĻāĻžāĻ¯āĻŧāĻŋāĻ¤ āĻāĻ°āĻŋāĻ¨āĻŋ ELSE
-āĻŽāĻžāĻ¨, āĻ
āĻ°ā§āĻĨāĻžā§, āĻ¯āĻĻāĻŋ āĻāĻāĻ¯āĻŧ āĻļāĻ°ā§āĻ¤āĻ āĻŽāĻŋāĻĨā§āĻ¯āĻž āĻšāĻ¯āĻŧ CASE
āĻĢāĻŋāĻ°ā§ āĻāĻ¸āĻŦā§ NULL
, āĻ¯āĻž āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻŦā§āĻ¯āĻžāĻā§āĻ¯āĻž āĻāĻ°āĻž āĻšāĻ¯āĻŧ FALSE
в WHERE
- āĻļāĻ°ā§āĻ¤āĻžāĻŦāĻ˛ā§
āĻāĻ āĻāĻĻāĻžāĻšāĻ°āĻŖāĻāĻŋ āĻ āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻāĻĒāĻžāĻ¯āĻŧā§ āĻāĻāĻ¤ā§āĻ°āĻŋāĻ¤ āĻāĻ°āĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§ - āĻ¸ā§āĻŦāĻžāĻĻ āĻāĻŦāĻ āĻ°āĻā§āĻ° āĻāĻĒāĻ° āĻ¨āĻŋāĻ°ā§āĻāĻ° āĻāĻ°ā§:
SELECT ...
WHERE
CASE
WHEN NOT EXISTS(... A) THEN EXISTS(... B)
ELSE TRUE
END
#3: āĻāĻŋāĻāĻžāĻŦā§ āĻļāĻ°ā§āĻ¤ āĻ˛āĻŋāĻāĻ¤ā§ āĻšāĻ¯āĻŧ
āĻāĻŽāĻ°āĻž āĻāĻ āĻā§āĻ°āĻŋāĻāĻžāĻ°āĻāĻŋāĻ° "āĻ āĻĻā§āĻā§āĻ¤" āĻ āĻĒāĻžāĻ°ā§āĻļāĻ¨ā§āĻ° āĻāĻžāĻ°āĻŖ āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻŖ āĻāĻ°āĻ¤ā§ āĻĻā§āĻ āĻĻāĻŋāĻ¨ āĻāĻžāĻāĻŋāĻ¯āĻŧā§āĻāĻŋ - āĻā§āĻ¨ āĻ¤āĻž āĻĻā§āĻāĻž āĻ¯āĻžāĻāĨ¤
āĻā§āĻ¸:
IF( NEW."ĐĐžĐēŅĐŧĐĩĐŊŅ_" is null or NEW."ĐĐžĐēŅĐŧĐĩĐŊŅ_" = (select '"ĐĐžĐŧĐŋĐģĐĩĐēŅ"'::regclass::oid) or NEW."ĐĐžĐēŅĐŧĐĩĐŊŅ_" = (select to_regclass('"ĐĐžĐēŅĐŧĐĩĐŊŅĐĐžĐĐ°ŅĐŋĐģĐ°ŅĐĩ"')::oid)
AND ( OLD."ĐĐžĐēŅĐŧĐĩĐŊŅĐĐ°ŅĐ°ĐŅĐŗĐ°ĐŊиСаŅиŅ" <> NEW."ĐĐžĐēŅĐŧĐĩĐŊŅĐĐ°ŅĐ°ĐŅĐŗĐ°ĐŊиСаŅиŅ"
OR OLD."ĐŖĐ´Đ°ĐģĐĩĐŊ" <> NEW."ĐŖĐ´Đ°ĐģĐĩĐŊ"
OR OLD."ĐĐ°ŅĐ°" <> NEW."ĐĐ°ŅĐ°"
OR OLD."ĐŅĐĩĐŧŅ" <> NEW."ĐŅĐĩĐŧŅ"
OR OLD."ĐиŅОХОСдаĐģ" <> NEW."ĐиŅОХОСдаĐģ" ) ) THEN ...
āĻ¸āĻŽāĻ¸ā§āĻ¯āĻž #1: āĻ āĻ¸āĻŽāĻ¤āĻž NULL āĻā§ āĻ¸āĻŽā§āĻŽāĻžāĻ¨ āĻāĻ°ā§ āĻ¨āĻž
āĻāĻ° āĻ¸āĻŦāĻāĻŋāĻā§ āĻāĻ˛ā§āĻĒāĻ¨āĻž āĻāĻ°āĻž āĻ¯āĻžāĻ OLD
-āĻā§āĻˇā§āĻ¤ā§āĻ°ā§āĻ° āĻ
āĻ°ā§āĻĨ āĻāĻŋāĻ˛ NULL
. āĻāĻŋ āĻšāĻŦā§?
SELECT NULL <> 1 OR NULL <> 2;
-- NULL
āĻāĻ° āĻāĻžāĻā§āĻ° āĻĻā§āĻˇā§āĻāĻŋāĻā§āĻŖ āĻĨā§āĻā§ āĻāĻ¨ā§āĻĄāĻŋāĻļāĻ¨ āĻŦā§āĻ° āĻāĻ°āĻ¤ā§ āĻšāĻŦā§ NULL
āĻ¸āĻŽāĻ¤ā§āĻ˛ā§āĻ¯ FALSE
, āĻāĻĒāĻ°ā§ āĻāĻ˛ā§āĻ˛āĻŋāĻāĻŋāĻ¤.
āĻ°āĻžāĻ¯āĻŧ: āĻ
āĻĒāĻžāĻ°ā§āĻāĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§āĻ¨ IS DISTINCT FROM
ROW
-āĻ
āĻĒāĻžāĻ°ā§āĻāĻ°, āĻāĻāĻŦāĻžāĻ°ā§ āĻ¸āĻŽā§āĻĒā§āĻ°ā§āĻŖ āĻ°ā§āĻāĻ°ā§āĻĄ āĻ¤ā§āĻ˛āĻ¨āĻž āĻāĻ°ā§:
SELECT (NULL, NULL) IS DISTINCT FROM (1, 2);
-- TRUE
āĻ¸āĻŽāĻ¸ā§āĻ¯āĻž #2: āĻāĻāĻ āĻāĻžāĻ°ā§āĻ¯āĻāĻžāĻ°āĻŋāĻ¤āĻžāĻ° āĻŦāĻŋāĻāĻŋāĻ¨ā§āĻ¨ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨
āĻāĻ° āĻ¤ā§āĻ˛āĻ¨āĻž āĻāĻ°āĻž āĻ¯āĻžāĻ:
NEW."ĐĐžĐēŅĐŧĐĩĐŊŅ_" = (select '"ĐĐžĐŧĐŋĐģĐĩĐēŅ"'::regclass::oid)
NEW."ĐĐžĐēŅĐŧĐĩĐŊŅ_" = (select to_regclass('"ĐĐžĐēŅĐŧĐĩĐŊŅĐĐžĐĐ°ŅĐŋĐģĐ°ŅĐĩ"')::oid)
āĻāĻāĻžāĻ¨ā§ āĻŦāĻžāĻĄāĻŧāĻ¤āĻŋ āĻŦāĻŋāĻ¨āĻŋāĻ¯āĻŧā§āĻ āĻā§āĻ¨? SELECT
? āĻāĻāĻāĻŋ āĻ
āĻ¨ā§āĻˇā§āĻ āĻžāĻ¨ to_regclass
? āĻā§āĻ¨ āĻāĻāĻž āĻāĻ˛āĻžāĻĻāĻž? ..
āĻāĻ˛ā§āĻ¨ āĻ āĻŋāĻ āĻāĻ°āĻž āĻ¯āĻžāĻ:
NEW."ĐĐžĐēŅĐŧĐĩĐŊŅ_" = '"ĐĐžĐŧĐŋĐģĐĩĐēŅ"'::regclass::oid
NEW."ĐĐžĐēŅĐŧĐĩĐŊŅ_" = '"ĐĐžĐēŅĐŧĐĩĐŊŅĐĐžĐĐ°ŅĐŋĐģĐ°ŅĐĩ"'::regclass::oid
āĻ¸āĻŽāĻ¸ā§āĻ¯āĻž #3: āĻŦā§āĻ˛ āĻ āĻĒāĻžāĻ°ā§āĻļāĻ¨ā§āĻ° āĻ āĻā§āĻ°āĻžāĻ§āĻŋāĻāĻžāĻ°
āĻ¸ā§āĻ°ā§āĻ¸ āĻĢāĻ°āĻŽā§āĻ¯āĻžāĻ āĻāĻ°āĻž āĻ¯āĻžāĻ:
{... IS NULL} OR
{... ĐĐžĐŧĐŋĐģĐĩĐēŅ} OR
{... ĐĐžĐēŅĐŧĐĩĐŊŅĐĐžĐĐ°ŅĐŋĐģĐ°ŅĐĩ} AND
( {... ĐŊĐĩŅавĐĩĐŊŅŅва} )
āĻāĻĢ... āĻāĻ¸āĻ˛ā§, āĻĻā§āĻāĻž āĻā§āĻ˛ āĻ¯ā§ āĻĒā§āĻ°āĻĨāĻŽ āĻĻā§āĻāĻŋ āĻļāĻ°ā§āĻ¤ā§āĻ° āĻ¯ā§āĻā§āĻ¨āĻ āĻ¯āĻĻāĻŋ āĻ¸āĻ¤ā§āĻ¯ āĻšāĻ¯āĻŧ, āĻ¤āĻžāĻšāĻ˛ā§ āĻĒā§āĻ°ā§ āĻļāĻ°ā§āĻ¤āĻāĻŋ āĻĒāĻ°āĻŋāĻŖāĻ¤ āĻšāĻ¯āĻŧ TRUE
, āĻāĻāĻžāĻāĻ¨ā§āĻā§ āĻŦā§āĻˇāĻŽā§āĻ¯ āĻā§āĻ°āĻšāĻŖ āĻāĻžāĻĄāĻŧāĻž. āĻāĻŦāĻ āĻāĻāĻŋ āĻāĻŽāĻ°āĻž āĻ¯āĻž āĻā§āĻ¯āĻŧā§āĻāĻŋāĻ˛āĻžāĻŽ āĻ¤āĻž āĻ¨āĻ¯āĻŧāĨ¤
āĻāĻ˛ā§āĻ¨ āĻ āĻŋāĻ āĻāĻ°āĻž āĻ¯āĻžāĻ:
(
{... IS NULL} OR
{... ĐĐžĐŧĐŋĐģĐĩĐēŅ} OR
{... ĐĐžĐēŅĐŧĐĩĐŊŅĐĐžĐĐ°ŅĐŋĐģĐ°ŅĐĩ}
) AND
( {... ĐŊĐĩŅавĐĩĐŊŅŅва} )
āĻ¸āĻŽāĻ¸ā§āĻ¯āĻž #4 (āĻā§āĻ): āĻāĻāĻāĻŋ āĻā§āĻˇā§āĻ¤ā§āĻ°ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻŋāĻ˛ āĻŦāĻž āĻļāĻ°ā§āĻ¤
āĻĒā§āĻ°āĻā§āĻ¤āĻĒāĻā§āĻˇā§, āĻāĻŽāĻžāĻĻā§āĻ° 3 āĻ¨āĻŽā§āĻŦāĻ°ā§ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻž āĻāĻŋāĻ˛ āĻāĻžāĻ°āĻŖ āĻ¤āĻŋāĻ¨āĻāĻŋ āĻļāĻ°ā§āĻ¤ āĻāĻŋāĻ˛āĨ¤ āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻ¤āĻžāĻĻā§āĻ° āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤ā§ āĻāĻĒāĻ¨āĻŋ āĻĒā§āĻ°āĻā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻāĻāĻāĻŋ āĻĻāĻŋāĻ¯āĻŧā§ āĻĒā§āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨ coalesce ... IN
:
coalesce(NEW."ĐĐžĐēŅĐŧĐĩĐŊŅ_"::text, '') IN ('', '"ĐĐžĐŧĐŋĐģĐĩĐēŅ"', '"ĐĐžĐēŅĐŧĐĩĐŊŅĐĐžĐĐ°ŅĐŋĐģĐ°ŅĐĩ"')
āĻ¤āĻžāĻ āĻāĻŽāĻ°āĻž NULL
"āĻāĻŽāĻ°āĻž āĻ§āĻ°āĻŦ", āĻāĻŦāĻ āĻāĻ āĻŋāĻ¨ OR
āĻŦāĻ¨ā§āĻ§āĻ¨ā§ āĻĻāĻŋāĻ¯āĻŧā§ āĻŦā§āĻĄāĻŧāĻž āĻāĻ°āĻžāĻ° āĻĻāĻ°āĻāĻžāĻ° āĻ¨ā§āĻāĨ¤
āĻŽā§āĻā§
āĻāĻ¸ā§āĻ¨ āĻāĻŽāĻ°āĻž āĻ¯āĻž āĻĒā§āĻ¯āĻŧā§āĻāĻŋ āĻ¤āĻž āĻ°ā§āĻāĻ°ā§āĻĄ āĻāĻ°āĻŋ:
IF (
coalesce(NEW."ĐĐžĐēŅĐŧĐĩĐŊŅ_"::text, '') IN ('', '"ĐĐžĐŧĐŋĐģĐĩĐēŅ"', '"ĐĐžĐēŅĐŧĐĩĐŊŅĐĐžĐĐ°ŅĐŋĐģĐ°ŅĐĩ"') AND
(
OLD."ĐĐžĐēŅĐŧĐĩĐŊŅĐĐ°ŅĐ°ĐŅĐŗĐ°ĐŊиСаŅиŅ"
, OLD."ĐŖĐ´Đ°ĐģĐĩĐŊ"
, OLD."ĐĐ°ŅĐ°"
, OLD."ĐŅĐĩĐŧŅ"
, OLD."ĐиŅОХОСдаĐģ"
) IS DISTINCT FROM (
NEW."ĐĐžĐēŅĐŧĐĩĐŊŅĐĐ°ŅĐ°ĐŅĐŗĐ°ĐŊиСаŅиŅ"
, NEW."ĐŖĐ´Đ°ĐģĐĩĐŊ"
, NEW."ĐĐ°ŅĐ°"
, NEW."ĐŅĐĩĐŧŅ"
, NEW."ĐиŅОХОСдаĐģ"
)
) THEN ...
āĻāĻŦāĻ āĻ¯āĻĻāĻŋ āĻāĻĒāĻ¨āĻŋ āĻŦāĻŋāĻŦā§āĻāĻ¨āĻž āĻāĻ°ā§āĻ¨ āĻ¯ā§ āĻāĻ āĻā§āĻ°āĻŋāĻāĻžāĻ° āĻĢāĻžāĻāĻļāĻ¨ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§ UPDATE
- āĻĒā§āĻ°āĻžāĻĒā§āĻ¯āĻ¤āĻžāĻ° āĻāĻžāĻ°āĻŖā§ āĻā§āĻ°āĻŋāĻāĻžāĻ° OLD/NEW
āĻāĻĒāĻ°ā§āĻ° āĻ¸ā§āĻ¤āĻ°ā§āĻ° āĻ
āĻŦāĻ¸ā§āĻĨāĻžāĻ¯āĻŧ, āĻ¤āĻžāĻ°āĻĒāĻ° āĻāĻ āĻ
āĻŦāĻ¸ā§āĻĨāĻž āĻ¸āĻžāĻ§āĻžāĻ°āĻŖāĻ¤ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻāĻ°āĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§ WHEN
- āĻļāĻ°ā§āĻ¤, āĻ¯ā§āĻŽāĻ¨ # 1 āĻ āĻĻā§āĻāĻžāĻ¨ā§ āĻšāĻ¯āĻŧā§āĻā§...
āĻāĻ¤ā§āĻ¸: www.habr.com