最近在做數據清理,所以也就多研究(複習)了下儲存過程,其中也不可避免的遇到了遊標、返回值等等概念。
背景
通過遊標取值,然後這些值作爲判斷條件到標準表進行select查詢到目標值,然而,某個字段可能爲空,從而導致結果找不到唯一的對應數據。
工作目的在於儘可能的減少空字段導致的查找不到結果問題,而且如果直接把找到的值作爲參數傳遞到標準表查詢,會出現一個條件是字段=null
的情況,從而導致找不到結果。
set @zhen='**';
select * from tb where shi='A市' and xian='B縣' and
zhen=(case when @zhen='C鎮' then 'C鎮' else '問題點')
思路
爲了解決傳入參數爲null
導致的找不到結果,zhen
字段當爲null
的時候,能夠消除null情況下對於select語句的影響。
方案一
最笨的方法,通過if else
來判斷,
if zhen is null then
select * from tb where shi='A市' and xian='B縣'
else
select * from tb where shi='A市' and xian='B縣' and zhen='C鎮'
end if;
很笨,冗雜,但是也確實有效。
方案二
利用通配符實現,’_'代表任意字符
select * from tb where shi='A市' and xian='B縣' and
zhen like (case when @zhen='C鎮' then 'C鎮' else '%_')
這種方案下有一個小缺陷,當標準表的zhen
字段爲null
的時候,無法匹配,但是在我這個問題下並不影響我獲得正確結果。