I have a function for insertion in postgresql
as follows:
CREATE OR REPLACE FUNCTION insert_orderhead(order_id integer, order_dt text, customer_id integer, route_id integer, routenum integer, ordertype text, create_station_id integer, create_stationtype text, create_time text, create_user_id integer, tran_time text, tran_user_id integer) RETURNS integer AS $BODY$
INSERT INTO ordermaster
VALUES(DEFAULT,
order_dt,
customer_id,
route_id,
routenum,
ordertype,
create_station_id,
create_stationtype,
create_time,
create_user_id,
tran_time,
tran_user_id) returning order_id $BODY$ LANGUAGE SQL VOLATILE COST 100;
ALTER FUNCTION insert_orderhead(integer, text, integer, integer, integer, text, integer, text, text, integer, text, integer) OWNER TO postgres;
And I am using java to insert and I am calling as follows:
cstorderhead = conn.prepareCall("{call insert_orderhead(?,?)}");
cstorderhead.setString(1, order_date);
cstorderhead.setInt(2, custidup);
.........
cstorderhead.executeUpdate();
The value is getting inserted correctly.
I need to return the last inserted id here it is the serial auto increment.
I tried as follows:
ResultSet rstd = cstorderhead.getGeneratedKeys();
if (rstd.next()) {
int newId = rstd.getInt(1);
out.print("Value returned=="+newId);
}
But it is not returning the last inserted id. What change I need to make my code to get it?
This is the table definition:
create table ordermaster
(
order_id serial NOT NULL, order_dt text, customer_id integer, route_id integer, routenum integer, ordertype text, create_station_id integer, create_stationtype text, create_time text, create_user_id integer, tran_time text, tran_user_id integer, CONSTRAINT order_id PRIMARY KEY (order_id)
);