mysql存储过程两个参数只运行一个

此为元数据表image.png

存储过程如下image.png

    call testln1('','')时如何只运行一个参数,也就是仅传入sid时 或者 仅传入 sname 或者同时传入时都能运行,这个应该怎么改呢,设计帆软的时候好多sql重复的,因此想这样进行调用

用户D3902656 发布于 2021-10-18 10:45
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共2回答
最佳回答
0
Z4u3z1Lv6专家互助
发布于2021-10-18 10:56(编辑于 2021-10-18 11:10)

前面不变,反正就这么一个意思,语法可能有问题(where的拼接以及最后SQL的)

begin

    DECLARE where_ CHAR(100);

    set where_='1=1'

    if (sid<>'') then

        set where_=where_+'userid='+sid

    else if (sname<>'') then

        set where_=where_+'USENAME='+sname

    end if;

    SELECT * FROM USERS WHERE where_

end

MYSQL的存储过程写不来

SELECT * FROM USERS WHERE 1=1 ${IF(LEN(SID)==0,"AND 1=1","AND USERID='"+SID+"'")} ${IF(LEN(sname)==0,"AND 1=1","AND USENAME='"+sname+"'")}

image.png

  • 用户D3902656 用户D3902656(提问者) 这样达不到重复调用的目的了,为了方便后期维护目前想到的只有写存储
    2021-10-18 10:59 
  • Z4u3z1 Z4u3z1 回复 用户D3902656(提问者) 补充了一下,不熟悉MYSQL的语法,反正就那么个意思:拼接WHERE。你自己改改
    2021-10-18 11:11 
  • 用户D3902656 用户D3902656(提问者) 这个意思我就懂了,谢谢
    2021-10-18 11:34 
最佳回答
0
shirokoLv6资深互助
发布于2021-10-18 10:55(编辑于 2021-10-18 11:15)

你这个怎么看也不像是传一个就能运行的呀

--

懂了,你可以在引用的时候用一个平时不会出现的值代替空,比如 call testln1('全选','全选')。

然后存储过程里改成

WHERE

(userid = sid or sid='全选')

AND (username = sname or sname='全选')

--

你的引用过程应该是在数据集进行的吧,就可以这样

call testln1('${if(len(id)=0,"全选",id)}','${if(len(name)=0,"全选",name)}')

  • 2关注人数
  • 346浏览人数
  • 最后回答于:2021-10-18 11:15
    请选择关闭问题的原因
    确定 取消
    返回顶部