테이블및 Name (varchar, unique)
으로 구성된 프로세스가 있습니다. 항상 ERROR 1172MySQL 함수 : 열 선택 및 반환
(42000) 결과 (표에 관계없이) 모든 입력과 함께 다음과 같은 기능을 선택
: 결과는 둘 이상의 행
CREATE FUNCTION LookupOrInsertProcess(nametwo VARCHAR(255))
RETURNS INT UNSIGNED
BEGIN
DECLARE myid INT UNSIGNED;
SELECT ID INTO myid FROM Processes WHERE Name=nametwo;
RETURN myid;
END$$
구성 그러나 아래 함수를 선택하면 항상 NULL이 반환됩니다.
CREATE FUNCTION LookupOrInsertProcess(nametwo VARCHAR(255))
RETURNS INT UNSIGNED
BEGIN
DECLARE myid INT UNSIGNED;
SELECT ID INTO myid FROM Processes WHERE Name=nametwo;
RETURN myid;
END$$
또한 다음은 올바른 결과를 나타냅니다 (숫자 30과 50은 임의의 숫자입니다).
CREATE FUNCTION LookupOrInsertProcess(nametwo VARCHAR(255))
RETURNS INT UNSIGNED
BEGIN
DECLARE myid INT UNSIGNED;
SELECT ID INTO myid FROM Processes WHERE Name=nametwo;
IF myid IS NULL THEN
RETURN 30;
ELSE
RETURN 50;
END IF;
END$$
도움이 되었습니까?
UPDATE : 테이블 열과 함수 param 사이의 충돌을 제거하기 위해 편집 됨. 그게 문제라고 나는 생각하지 않는다.
UPDATE2 : 입력 매개 변수가 테이블에 있거나 없을 때 다음과 같이 작동하는 것으로 보입니다. 왜, coalesce()가 없어도 함수는 테이블에있는 입력 매개 변수에 대해서도 NULL을 반환합니까?
CREATE FUNCTION LookupOrInsertProcess(nametwo VARCHAR(255))
RETURNS INT UNSIGNED
BEGIN
DECLARE myid INT UNSIGNED;
SELECT ID INTO myid FROM Processes WHERE Name=nametwo;
RETURN COALESCE(myid, 0);
END$$
DECLARE myid INT UNSIGNED;
는 열 이름과 동일하며 INT의 differnt 한 종류를 방지하기 때문에 입력 매개 변수의 이름을 변경하려고합니다. 서명 또는 서명을 사용하십시오. –
감사. 입력 매개 변수의 이름을 변경했습니다. 선언 된 var int를 unsigned로 만들었습니다. 변경 없음. – iraxef
@iraxef 쿼리에서 param의 이름을 변경 했습니까? – Parado