-2
我有一個表有ID
鍵列使用binary(16)
來存儲GUID/UUID,其餘列是varchar(45)
。爲什麼比較不正確地存儲過程/函數?
我已經寫了一個函數,該函數在給定其他列的情況下運行ID
的選擇,並且如果沒有找到ID
,則創建一個新的。我的問題是,這個函數返回一個不符合我的數據的ID
。如果我只是在工作臺上運行該函數的select部分,它將不會返回任何預期的結果。
這裏是我的功能:
CREATE DEFINER=`sa`@`192.100.100.%` FUNCTION `SelectReadingHeaders`(testType VARCHAR(45)
, COL1 VARCHAR(45)
, COL2 VARCHAR(45)
, COL3 VARCHAR(45)
, COL4 VARCHAR(45)
, COL5 VARCHAR(45)
, COL6 VARCHAR(45)
, COL7 VARCHAR(45)
, COL8 VARCHAR(45)
, COL9 VARCHAR(45)
, COL10 VARCHAR(45)
, COL11 VARCHAR(45)
, COL12 VARCHAR(45)
, COL13 VARCHAR(45)
, COL14 VARCHAR(45)
, COL15 VARCHAR(45)
, COL16 VARCHAR(45)) RETURNS binary(16)
BEGIN
DECLARE columnID BINARY(16);
SELECT `ID` FROM `ate`.`readings_columns`
WHERE (`TYPE` <=> testType
AND`COL1` <=> COL1
AND `COL2` <=> COL2
AND `COL3` <=> COL3
AND `COL4` <=> COL4
AND `COL5` <=> COL5
AND `COL6` <=> COL6
AND `COL7` <=> COL7
AND `COL8` <=> COL8
AND `COL9` <=> COL9
AND `COL10` <=> COL10
AND `COL11` <=> COL11
AND `COL12` <=> COL12
AND `COL13` <=> COL13
AND `COL14` <=> COL14
AND `COL15` <=> COL15
AND `COL16` <=> COL16)
LIMIT 1
INTO columnID;
IF columnID IS null THEN
SET columnID = GuidToBinary(UUID());
INSERT INTO `ate`.`readings_columns`
VALUES (columnID
, testType
, COL1
, COL2
, COL3
, COL4
, COL5
, COL6
, COL7
, COL8
, COL9
, COL10
, COL11
, COL12
, COL13
, COL14
, COL15
, COL16);
END IF;
RETURN columnID;
END
下一塊是我的測試呼叫,返回一個錯誤的結果。表中不存在這組列/測試類型。返回的值來自具有匹配的TYPE
列的行,以及末尾的一些空列,但不是完全匹配。 ToGuid是一個函數,使得二進制(16)GUID人類可讀:
SELECT ToGuid(SelectReadingHeaders('TCXOHunt','TEMPERATURE','ADC Ratio','AH0','AH1','AH2','BH0','BH1','BH2','INTERNALTEMPERATURE',null,null,null,null,null,null,null))
然而,如果我輸入選擇功能到一個新的查詢選項卡,則返回0結果不出所料:
SELECT ToGuid(`ID`) FROM `ate`.`readings_columns`
WHERE `TYPE` <=> 'TCXOHunt'
AND`COL1` <=> 'TEMPERATURE'
AND `COL2` <=> 'ADC Ratio'
AND `COL3` <=> 'AH0'
AND `COL4` <=> 'AH1'
AND `COL5` <=> 'AH2'
AND `COL6` <=> 'BH0'
AND `COL7` <=> 'BH1'
AND `COL8` <=> 'BH2'
AND `COL9` <=> 'INTERNALTEMPERATURE'
AND `COL10` <=> null
AND `COL11` <=> null
AND `COL12` <=> null
AND `COL13` <=> null
AND `COL14` <=> null
AND `COL15` <=> null
AND `COL16` <=> null
LIMIT 1
永遠不要將變量或參數命名爲與要比較的列相同。 – fancyPants
@fancyPants這應該是一個答案,因爲這是我的問題。 – Fr33dan