我有SQL錯誤空列值「kladr_full_name」中的空值違反了非空約束。在數據庫中至極請求列中的空值違反非空約束
表執行:
СREATE TABLE kladr.kladr_name
(
kladr_code character varying(255) NOT NULL,
kladr_city_name character varying(121),
kladr_full_name character varying(487) NOT NULL,
kladr_index character varying(6),
kladr_name character varying(100) NOT NULL,
kladr_naspunkt_name character varying(121),
kladr_rayon_name character varying(121),
kladr_region_name character varying(121),
kladr_socr character varying(20),
CONSTRAINT kladr_name_pkey PRIMARY KEY (kladr_code)
)
WITH (
OIDS=FALSE
);
ALTER TABLE kladr.kladr_name
OWNER TO postgres;
請求分貝:
INSERT INTO kladr.kladr_name
(kladr_code,
kladr_name,
kladr_socr,
kladr_index,
kladr_region_name,
kladr_rayon_name,
kladr_city_name,
kladr_naspunkt_name,
kladr_full_name)
SELECT kladr_code,
Upper(kladr_name) kladr_name,
kladr_socr,
kladr_index,
(SELECT k1.kladr_socr
||' '
||k1.kladr_name
FROM kladr.kladr_tmp k1
WHERE k1.kladr_region = k.kladr_region
AND k1.kladr_rayon = '000'
AND k1.kladr_city = '000'
AND k1.kladr_nas_punkt = '000'
AND k1.kladr_mod = '00'
AND k1.kladr_status = '0')kladr_region_name,
(SELECT k1.kladr_socr
||' '
||k1.kladr_name
FROM kladr.kladr_tmp k1
WHERE k1.kladr_region = k.kladr_region
AND k1.kladr_rayon = k.kladr_rayon
AND k1.kladr_rayon <> '000'
AND k1.kladr_city = '000'
AND k1.kladr_nas_punkt = '000'
AND k1.kladr_name = '00') kladr_rayon_name,
(SELECT k1.kladr_socr
||' '
||k1.kladr_name
FROM kladr.kladr_tmp k1
WHERE k1.kladr_region = k.kladr_region
AND k1.kladr_rayon = k.kladr_rayon
AND k1.kladr_city = k.kladr_city
AND k1.kladr_city <> '000'
AND k1.kladr_nas_punkt = '000'
AND k1.kladr_mod = '00') kladr_city_name,
(SELECT k1.kladr_socr
||' '
||k1.kladr_name
FROM kladr.kladr_tmp k1
WHERE k1.kladr_region = k.kladr_region
AND k1.kladr_rayon = k.kladr_rayon
AND k1.kladr_city = k.kladr_city
AND k1.kladr_nas_punkt = k.kladr_nas_punkt
AND k1.kladr_nas_punkt <> '000'
AND k1.kladr_mod = '00') kladr_naspunkt_name,
(SELECT k1.kladr_socr
||' '
||k1.kladr_name
FROM kladr.kladr_tmp k1
WHERE k1.kladr_region = k.kladr_region
AND k1.kladr_rayon = '000'
AND k1.kladr_city = '000'
AND k1.kladr_nas_punkt = '000'
AND k1.kladr_mod = '00'
AND k1.kladr_status = '0')
||' '
||(SELECT k1.kladr_socr
||' '
||k1.kladr_name
FROM kladr.kladr_tmp k1
WHERE k1.kladr_region = k.kladr_region
AND k1.kladr_rayon = k.kladr_rayon
AND k1.kladr_rayon <> '000'
AND k1.kladr_city = '000'
AND k1.kladr_nas_punkt = '000'
AND k1.kladr_mod = '00')
||' '
||(SELECT k1.kladr_socr
||' '
||k1.kladr_name
FROM kladr.kladr_tmp k1
WHERE k1.kladr_region = k.kladr_region
AND k1.kladr_rayon = k.kladr_rayon
AND k1.kladr_city = k.kladr_city
AND k1.kladr_city <> '000'
AND k1.kladr_nas_punkt = '000'
AND k1.kladr_mod = '00')
||' '
||(SELECT k1.kladr_socr
||' '
||k1.kladr_name
FROM kladr.kladr_tmp k1
WHERE k1.kladr_region = k.kladr_region
AND k1.kladr_rayon = k.kladr_rayon
AND k1.kladr_city = k.kladr_city
AND k1.kladr_nas_punkt = k.kladr_nas_punkt
AND k1.kladr_nas_punkt <> '000'
AND k1.kladr_mod = '00')kladr_full_name
FROM kladr.kladr_tmp k
WHERE k.kladr_mod = '00'
DB的PostgreSQL。 jpa提供休眠。這可能是什麼原因?
現在的問題是如何修改這個查詢在Postgres中工作(在Oracle數據庫中工作之前)如果一些subquerys返回null?
也許你的子查詢'select'沒有返回任何行? – GriffeyDog
這個查詢返回什麼? SELECT k1.kladr_socr ||' ' || k1.kladr_name FROM kladr.kladr_tmp K1 WHERE k1.kladr_region = k.kladr_region AND k1.kladr_rayon = k.kladr_rayon AND k1.kladr_city = k.kladr_city AND k1.kladr_nas_punkt = k.kladr_nas_punkt AND k1.kladr_nas_punkt <>'000' AND k1.kladr_mod ='00' – jazzytomato
如果我在pgAdmin中發出這個請求,即使選擇沒有返回任何行,它也可以正常工作,但是當hibernate執行請求時,它會提示這個錯誤。 –