我是存储过程的新手。我想将具有20列值的记录插入lsa_user_info
表中。我正在调用存储过程来执行此任务。
此外,我希望结果集将返回所插入记录的主键值(user_id
)。但是,我却收到此错误:
org.postgresql.util.PSQLException:**列索引超出范围:20,列数:19。
lsa_user_info
表定义:
CREATE TABLE public.lsa_user_info
(
user_id integer NOT NULL DEFAULT nextval('lsa_user_info_user_id_seq'::regclass),created_datetime timestamp without time zone,created_user_id integer,email_id character varying(255),first_name character varying(255),last_name character varying(255),modified_datetime timestamp without time zone,modified_user_id integer,status_id integer,user_name character varying(255),user_timezone character varying,phone_extension character varying,phone_direct character varying(255),supervisor character varying(255),title character varying(255),fax character varying(255),preferred_name character varying(255),state character varying(255),supervisor_phone character varying(255),supervisor_extension character varying(255),loan_type character varying(255),investor_name character varying(255),language_indicator character varying(255),working_hrs character varying(255),group_id character varying(255),racfid character varying(255),uuid character varying(255),agent_type character varying(100),line_of_business integer DEFAULT 1,system_admin_flag boolean DEFAULT false,CONSTRAINT user_info_pkey PRIMARY KEY (user_id)
) WITH (OIDS=FALSE);
ALTER TABLE public.lsa_user_info
OWNER TO lsasdev;
GRANT ALL ON TABLE public.lsa_user_info TO lsasdev;
这是我的存储过程:
CREATE OR REPLACE FUNCTION public.insert_user_info(
email_id character varying,first_name character varying,last_name character varying,user_name character varying,phone_direct character varying,supervisor character varying,title character varying,fax character varying,preferred_name character varying,supervisor_phone character varying,supervisor_extension character varying,working_hrs character varying,group_id character varying,line_of_business integer,system_admin_flag boolean,racfid character varying) RETURNS numeric
AS
$BODY
BEGIN
INSERT INTO public.lsa_user_info(
email_id,first_name,last_name,modified_user_id,status_id,user_name,user_timezone,phone_extension,phone_direct,supervisor,title,fax,preferred_name,supervisor_phone,supervisor_extension,working_hrs,group_id,line_of_business,system_admin_flag,racfid) VALUES
( email_id,racfid );
RETURN 1;
END
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION public.insert_user_info(character varying,character varying,integer,boolean,character varying)
OWNER TO lsasdev;
这是我调用存储过程的代码:
public Integer invokeUserInfoStoredProc(UserInfoHibVO userInfoHibVO)throws Exception{
log.info("********** Execcution of Stored Procedure insert_user_info() started ********");
ResultSet resultset =null;
Connection connection =null;
CallableStatement storedProcedure = null;
BigDecimal resp =null;
Session session = sessionFactory.getcurrentSession();
SessionImpl sessionImpl = (SessionImpl) session;
Integer generatedUserId = null;
try {
connection = sessionImpl.connection();
connection.setautoCommit(false);
log.info("Connection to LSAS DB established successfully.");
storedProcedure = connection.prepareCall("{ ? = call
insert_user_info(?,?,?}");
storedProcedure.registerOutParameter(1,Types.NUMERIC);
storedProcedure.setString(2,userInfoHibVO.getEmail());
storedProcedure.setString(3,userInfoHibVO.getFirstName());
storedProcedure.setString(4,userInfoHibVO.getLastName());
storedProcedure.setInt(5,userInfoHibVO.getModifiedUserId()!=null ? userInfoHibVO.getModifiedUserId() : 0);
storedProcedure.setInt(6,userInfoHibVO.getUserStatus().getStatusId());
storedProcedure.setString(7,userInfoHibVO.getusername());
storedProcedure.setString(8,userInfoHibVO.getUserTimezone());
storedProcedure.setString(9,StringUtil.isnotEmpty(userInfoHibVO.getPhoneExtension()) ? userInfoHibVO.getPhoneExtension():"");
storedProcedure.setString(10,StringUtil.isnotEmpty(userInfoHibVO.getPhoneDirect()) ? userInfoHibVO.getPhoneDirect():"");
storedProcedure.setString(11,StringUtil.isnotEmpty(userInfoHibVO.getManager()) ? userInfoHibVO.getManager():"");
storedProcedure.setString(12,StringUtil.isnotEmpty(userInfoHibVO.getTitle()) ? userInfoHibVO.getTitle():"");
storedProcedure.setString(13,StringUtil.isnotEmpty(userInfoHibVO.getFax()) ? userInfoHibVO.getFax():"");
storedProcedure.setString(14,userInfoHibVO.getPreferredName());
storedProcedure.setString(15,StringUtil.isnotEmpty(userInfoHibVO.getSupervisorPhone())?userInfoHibVO.getSupervisorPhone():"");
storedProcedure.setString(16,userInfoHibVO.getSupervisorExtension());
storedProcedure.setString(17,StringUtil.isnotEmpty(userInfoHibVO.getWorkingHrs())? userInfoHibVO.getWorkingHrs():"");
storedProcedure.setString(18,StringUtil.isnotEmpty(userInfoHibVO.getGroup()) ? userInfoHibVO.getGroup():"");
storedProcedure.setInt(19,userInfoHibVO.getLob());
storedProcedure.setBoolean(20,false);
storedProcedure.setString(21,"");
storedProcedure.executeUpdate();
resp = (BigDecimal) storedProcedure.getObject(1);
resultset = storedProcedure.getGeneratedKeys();
if(resultset!=null && resultset.next())
generatedUserId= resultset.getInt(1);
log.info("********** Stored Procedure insert_user_info() Executed successfully ********");
}catch(Exception exp){
exp.printStackTrace();
log.error("Exception occurred in executing stored procedure for insert_user_info() data:" + exp);
}finally{
if(null!=resultset)resultset.close();
if(null!=storedProcedure)storedProcedure.close();
log.info("Stored proc insert_user_info() ended**************");
}
return generatedUserId;
}
请让我知道是什么问题?为什么我收到此错误:
列索引超出范围:20,列数:19。
请帮助我!预先感谢