GUID/UUIDを格納するためにbinary(16)
を使用してID
キー列を持つテーブルがあり、残りの列は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
列の行、および最後のNULL列の一部ですが、完全一致ではありません。 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