SQLAnywhereは初めてです。PostgreSQL9.1で開発したデータベースをSQLAnywhere12.0.1に移植しています。パターンのすべての組み合わせを結果セットとして返す関数があります。パターンは一連の文字と数字で、グループは角かっこで囲まれています。たとえば、「A1 [0O] [0O] [0OU] Z1」は、そのようなパターンの1つです。この関数は、角かっこで囲まれていない文字をそのままコピーし、角かっこで囲まれたすべての文字の組み合わせごとに1つの文字列を返すことになっています。したがって、exmpleの関数によって返される値の1つは、「A1000Z1」である必要があります。もう1つは「A1O00Z1」などです。
関数を呼び出すたびに、SQLAnywhereから次のメッセージが表示されます。
Coult not execute statement. Function 'AllCombinations' has invalid parameter 'Combination' ('OUT')
関数のソースは次のとおりです。
CREATE OR REPLACE PROCEDURE "AllCombinations" (
IN Plate VARCHAR(50)
) RESULT ( Combination VARCHAR(50) )
BEGIN
DECLARE @Combinations VARCHAR(8000);
DECLARE @Combination VARCHAR(50);
DECLARE i INT DEFAULT 1;
-- Create the temporary table to hold all of the combinations
CREATE TABLE #Combinations (
Combination VARCHAR(50) NOT NULL
);
-- Get all of the combinations AS a big string
SET @Combinations = "NextDigit"( Plate, 1, '' );
-- Begin a loop
BuildCombinations:
LOOP
-- Find the i-th combination
SELECT row_value INTO @Combination
FROM sa_split_list( @Combinations, '|')
WHERE line_num = i;
-- Do we have a string?
IF @Combination <> '' THEN
-- We do. Add it to the Combinations table
INSERT INTO #Combinations ( Combination ) VALUES ( @Combination );
ELSE
-- We do not. Exit the loop
LEAVE BuildCombinations;
END IF;
-- Move on to the next combination
SET i = i + 1;
END LOOP BuildCombinations;
-- Return all of the combinations we built
SELECT Combination FROM #Combinations;
END;
NextDigitストアドプロシージャに問題があるとは思わない。それを呼び出すと、正しい戻り値が返されます。これだけでは適切な値が返されません。
私のコードの何が問題になっていますか?
トニー