Java 使用可选参数调用存储过程
基本上我有一个接受8个参数的存储过程,它只基于所有这些参数执行查询并给我一个输出,但现在我有一个情况,我可以在1到8个参数之间的任意位置传递一个值或多个值,它应该能够完美地工作,并且应该根据已经传递的参数返回一些值。 我的StoredProcess在MySQL中,我通过Java代码中的CallableStatement调用它。 下面是我的StoredProcess的片段Java 使用可选参数调用存储过程,java,mysql,spring-mvc,jdbc,Java,Mysql,Spring Mvc,Jdbc,基本上我有一个接受8个参数的存储过程,它只基于所有这些参数执行查询并给我一个输出,但现在我有一个情况,我可以在1到8个参数之间的任意位置传递一个值或多个值,它应该能够完美地工作,并且应该根据已经传递的参数返回一些值。 我的StoredProcess在MySQL中,我通过Java代码中的CallableStatement调用它。 下面是我的StoredProcess的片段 DELIMITER $$ CREATE PROCEDURE get_details(IN cus_name varchar
DELIMITER $$
CREATE PROCEDURE get_details(IN cus_name varchar(255),u_id int, ent_type varchar(255)
,branchId varchar(255), from_date datetime,to_date datetime, val varchar(255),rep_status varchar(255)
)
BEGIN
SELECT
r.id,r.parent_request_id,r.customer_master_id,
r.user_master_id,r.request_status,
cm.customer_name,
u.unique_id,
c.branch_id,c.created_date,c.entity_name,
c.entity_status,c.entity_type,c.no_of_documents,
c.no_of_parties,c.request_id,c.validity,c.itr_validity
FROM request as r
left join user_master as u on r.user_master_id = u.id
left join customer_master as cm on u.customer_master_id = cm.id
left join customer_entity as c on r.id= c.request_id
where
customer_name = cus_name and
unique_id = u_id and
entity_type = ent_type and
branch_id = branchId and
created_date >= from_date and
created_date <= to_date and
validity = val and
request_status = rep_status and
entity_status='parent';
END$$
DELIMITER ;
分隔符$$
创建过程获取详细信息(在cus_name varchar(255)、u_id int、ent_type varchar(255)中)
,branchId varchar(255),from_date datetime,to_date datetime,val varchar(255),rep_status varchar(255)
)
开始
挑选
r、 id,r.父项\请求\ id,r.客户\主项\ id,
r、 用户\u主\u id,r.请求\u状态,
cm.客户名称,
u、 唯一标识,
c、 分支机构id,c.创建日期,c.实体名称,
c、 实体状态、c.实体类型、c.文件编号、,
c、 无第三方,c.请求id,c.有效性,c.itr有效性
从作为r的请求
左连接用户\u主机作为r上的u。用户\u主机\u id=u.id
左键将客户\主机作为cm连接到u上。客户\主机\ id=cm.id
在r.id=c.request\U id上以c的形式左键加入客户\U实体
哪里
客户名称=客户名称和
唯一的\u id=u\u id和
实体类型=ent类型和
branch_id=branchId和
创建日期>=从日期和
为存储过程中的可选参数创建了\u date,您可以这样编写
CREATE PROCEDURE get_details(IN cus_name varchar(255)='',u_id int=0, ent_type varchar(255)='',
branchId varchar(255)='', from_date datetime=null,to_date datetime=null, val varchar(255)='',rep_status varchar(255)=''
)
BEGIN
you query syntex
您在这方面有没有遇到任何错误,或者您到底想做什么?存储过程不支持可变数量的arguments@YCF_L是的,我确实在com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1078)的com.mysql.jdbc.SQLError.createSQLException(SQLError.java:989)中获得了java.sql.SQLException:No为参数1指定的值在com.mysql.jdbc.SQLError.createSQLException(SQLError.java:975)和com.mysql.jdbc.SQLError.createSQLException(SQLError.java:920)上,您可以编辑您的问题,也可以输入错误there@e4c5你能在几个例子中分享吗?不管怎样,你传递的是空值,而返回的不是值。
CREATE PROCEDURE get_details(IN cus_name varchar(255)='',u_id int=0, ent_type varchar(255)='',
branchId varchar(255)='', from_date datetime=null,to_date datetime=null, val varchar(255)='',rep_status varchar(255)=''
)
BEGIN
you query syntex