私はそれで30000から50000は(自動インクリメント)における欠損値のシーケンス
に及ぶことになっています「ポート」INT列を、持っているの検出、私は(ストアドプロシージャの挿入値を持つポートがありませんヌル)。だから、私はそのフィールドに格納されている値を '手動で'選択する必要があります。問題は、私がインクリメンタルに(30000,30001,30002 ....)ある特定のポイントでいくつかのエントリが削除される(それは30000,30002,30004などのように)削除されることができるということです。
これらの穴に合うように私のSPに配置する必要があります(例では30001,30003 ...です)。私の問題は、特定の値が既に 'ocuppied'であるかどうか、SP内でチェックする方法です。
私はMySQLのLOOPを使っていると思いました。
CREATE PROCEDURE teste()
BEGIN
DECLARE p INT;
DECLARE aux INT;
SET p = 30000;
label1: LOOP
SELECT Port FROM Reg WHERE Port = p INTO aux;
IF p = 50000 THEN
LEAVE label1;
END IF;
IF aux IS NULL THEN -- aux-1 is not null, so I can verify the "next miminum available position"
aux = aux - 1;
LEAVE label1;
ELSE
SET p = p + 1;
ITERATE label1;
END IF;
END LOOP label1;
RETURN aux;
END $$
私の問題は結果値を取得しています。そのRETURNステートメントを置くと、FUNCTIONでのみ許可されている情報が得られます。また、ループを終了すると、SELECTの結果は常にnullになります。
どうすればよいですか?
だから、質問は:どのように私は、シーケンスから欠損値を検出していますか? –
@SergeiTulentsevはい!私は次のエントリのためにそれを使用することができるように、最小欠損値が必要です。 – Tiago
私の答えを見てください。 –