我在postgresql中创建了一个存储过程,如下所示:
INSERT INTO ABC
(order_id,order_dt, customer_id, route_id, routenum, ordertype, create_station_id, create_stationtype, create_time,create_user_id,tran_time, tran_user_id,station_id)
values
(1,$1, $2, $3, $4, $5, $6, $7, LOCALTIMESTAMP, $8,
default, default,$9)
returning order_id;
order_id
类型SERIAL
- > primary key
插入时出现错误如下:
PSQLException: ERROR: null value in column "order_id" violates not-null constraint Where: SQL function "insert_ABC" statement 1.
我正在使用PostgreSQL 8.2
。它是在托管空间我这样做。
我知道发生错误,因为默认类型默认为null。
default
类型的SERIAL
相当于什么。
请指导我。
答案 0 :(得分:1)
您可以跳过order_id
中的INSERT INTO
:
CREATE TABLE ABC(order_id SERIAL PRIMARY KEY, order_dt INT -- rest of cols
);
INSERT INTO ABC(order_dt) -- rest of cols
VALUES (2) -- rest of values
RETURNING order_id;
或使用default
:
INSERT INTO ABC(order_id, order_dt)
VALUES (default, 2)
RETURNING order_id;
修改强>
你确定吗?检查演示:CREATE TABLE ABC(order_id SERIAL, order_dt INT);
INSERT INTO ABC(order_dt) -- rest of cols
VALUES (2) ;
INSERT INTO ABC(order_id, order_dt)
VALUES (default, 2) ;
的 SqlFiddleDemo
强>
输出:
╔═══════════╦══════════╗
║ order_id ║ order_dt ║
╠═══════════╬══════════╣
║ 1 ║ 2 ║
║ 2 ║ 2 ║
╚═══════════╩══════════╝
尝试使用SQLFiddle执行:
CREATE TABLE ABC(order_id SERIAL NULL, order_dt INT);
-- ERROR: conflicting NULL/NOT NULL declarations for
-- column "order_id" of table "abc"
我没有使用PostgreSQL 8.2
对其进行测试的环境,但如果允许使用NULL
定义order_id,则应将架构更改为NOT NULL