我有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执行请求时,它会提示这个错误。 –