programing

일부 값을 반환하는 저장 루틴을 만들 수 없습니다.

jooyons 2023. 9. 27. 17:55
반응형

일부 값을 반환하는 저장 루틴을 만들 수 없습니다.

저는 마리아 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

반응형