반응형
일부 값을 반환하는 저장 루틴을 만들 수 없습니다.
저는 마리아 DB에서 일하고 있습니다.저는 절차를 저장해 두었습니다.이제 반환 기능을 추가해야 합니다.이를 위해 이렇게 생긴 새로운 기능을 개발했습니다.
CREATE FUNCTION `insertChild`(`nodeId` INT, `newNodeName` INT)
RETURNS INT
LANGUAGE SQL
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN
Rollback;
START TRANSACTION;
SELECT @myRight := rgt FROM item_tree WHERE item_id = nodeId;
UPDATE item_tree SET rgt = rgt + 2 WHERE rgt >= @myRight;
UPDATE item_tree SET lft = lft + 2 WHERE lft > @myRight;
INSERT INTO item_tree(item_name, lft, rgt) VALUES(newNodeName, @myRight , @myRight + 1);
RETURN (SELECT (COUNT(parent.item_name) - 1) AS depth FROM item_tree AS node,
item_tree AS parent
WHERE node.item_id = last_insert_id() AND
node.lft BETWEEN parent.lft AND parent.rgt
GROUP BY node.item_name
ORDER BY node.lft);
COMMIT;
END
그런데 이게 안 돼요.SQL 오류(1415)를 반환하고 있습니다. 함수의 결과 집합을 반환할 수 없습니다.
여기에 무슨 문제가 있습니까?
미리 감사드립니다!
돌아오는 방법을 바꿨습니다.변수에 카운트를 설정하고 이를 반환합니다.아래 업데이트된 코드를 확인해주시기 바랍니다.
CREATE FUNCTION `insertChild`(`nodeId` INT, `newNodeName` INT)
RETURNS INT
LANGUAGE SQL
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN
Rollback;
START TRANSACTION;
SELECT @myRight := rgt FROM item_tree WHERE item_id = nodeId;
UPDATE item_tree SET rgt = rgt + 2 WHERE rgt >= @myRight;
UPDATE item_tree SET lft = lft + 2 WHERE lft > @myRight;
INSERT INTO item_tree(item_name, lft, rgt) VALUES(newNodeName, @myRight , @myRight + 1);
SELECT @myCount := (COUNT(parent.item_name) - 1) AS depth FROM item_tree AS node,
item_tree AS parent
WHERE node.item_id = last_insert_id() AND
node.lft BETWEEN parent.lft AND parent.rgt
GROUP BY node.item_name
ORDER BY node.lft;
RETURN @myCount;
COMMIT;
END
언급URL : https://stackoverflow.com/questions/34897666/unable-to-create-stored-routine-which-returns-some-value
반응형
'programing' 카테고리의 다른 글
| Oracle 테이블 열 문자 집합을 보려면 어떻게 해야 합니까? (0) | 2023.09.27 |
|---|---|
| 함수 내부의 전역 변수 값을 변경하는 방법 (0) | 2023.09.27 |
| JSON을 사용하여 Spring MVC 컨트롤러에 중첩 개체 게시 (0) | 2023.09.27 |
| 수동 조립 대 GCC (0) | 2023.09.27 |
| Python docstring의 클래스 메서드에 대한 링크 (0) | 2023.09.27 |