我是SQL Anywhere的新手。我正在将我们在PostgreSQL 9.1中开发的数据库移植到SQL Anywhere 12.0.1。我有一个函数返回模式的所有组合作为结果集。图案是一系列字母和数字,组由方括号括起。例如,“A1 [0O] [0O] [0OU] Z1”是可能的一种这样的模式。该函数应该做的是复制任何不在方括号中的字符,然后为方括号中的所有字符的每个组合返回一个字符串。因此,该函数返回的一个值应为“A1000Z1”;另一个是“A1O00Z1”,依此类推。
每当我调用该函数时,我都会从SQL Anywhere获得以下消息:
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存储过程中。当我打电话给我时,我得到了正确的返回值。只是这个人不会返回正确的值。
我的代码出了什么问题?
贝
答案 0 :(得分:1)
我发现问题不在存储过程中,而是在调用存储过程的语句中。
电话是这样写的:
SELECT "AllCombinations"( 'A1[0O][0O][0OU]Z1' );
这产生了错误。另一方面,如果我写这样的电话:
SELECT Combination FROM "AllCombinations"( 'A1[0O][0O][0OU]Z1' );
然后它有效。第一个语法是它在PostgreSQL中的调用方式;它还使用PostgreSQL的RETURN NEXT语句来返回值。不同的数据库,不同的语法。