COALESCE函數會依次檢查輸入的參數,返回第一個不是NULL的參數,只有當傳入 COALESCE函數的所有的參數都是NULL的時候,函數才會返回NULL。例如, COALESCE(piName,''),如果變量piName為NULL,那么函數會返回'',否則就會返回piName本身的值。
下面的例子展示了如何對參數進行檢查何初始化。
Person表用來存儲個人的基本信息,其定義如下:
表1: Person
下面是用於向表Person插入數據的存儲過程的參數預處理部分代碼:
SET poGenStatus = 0; SET piName = RTRIM(COALESCE(piName, '')); SET piRank = COALESCE(piRank, 0); -- make sure all required input parameters are not null IF ( piNum IS NULL OR piName = '' OR piAge IS NULL ) THEN SET poGenStatus = 34100; RETURN poGenStatus; END IF;
表Person中num、name和age都是非空字段。對於name字段,多個空格我們 也認為是空值,所以在進行判斷前我們調用RTRIM和COALESCE對其進行處理,然后使用 piName = '',對其進行非空判斷;對於Rank字段,我們希望如果用戶輸入的NULL,我們把它設置成"0",對其我們也使用COALESCE進行初始化;對 於"Age"和"Num" 我們直接使用 IS NULL進行非空判斷就可以了。
如果輸入參數沒有通過非空判斷,我們就對輸出參數poGenStatus設置一個確定的值(例子中為 34100)告知調用者:輸入參數錯誤。
下面是對參數初始化規則的一個總結,供大家參考:
1. 輸入參數為字符類型,且允許為空的,可以使用COALESCE(inputParameter,'')把NULL轉換成'';
2. 輸入類型為整型,且允許為空的,可以使用COALESCE(inputParameter,0),把空轉換成0;
3. 輸入參數為字符類型,且是非空非空格的,可以使用COALESCE(inputParameter,'')把NULL轉換成'',然后判斷函數返回值是否為'';
4. 輸入類型為整型,且是非空的,不需要使用COALESCE函數,直接使用IS NULL進行非空判斷