Mysql ошибка 1415

I am trying to create a MySQL function using phpMyAdmin and getting this error. #1415 - Not allowed to return a result set from a function The function code is as below: DELIMITER $$ CREATE

I am trying to create a MySQL function using phpMyAdmin and getting this error.

#1415 — Not allowed to return a result set from a function

The function code is as below:

DELIMITER $$
    
CREATE FUNCTION get_binary_count(a INT, c INT)
RETURNS INT
DETERMINISTIC 

BEGIN
    DECLARE c1, c2 INT;
    SET c1 = 0;
    SET c2 = 0;

    SELECT left_id  AS c1 FROM mlm_user_mst WHERE parent_id = a AND left_id > 0;
    SELECT right_id AS c2 FROM mlm_user_mst WHERE parent_id = a AND right_id > 0;

    IF (c1 > 0 AND c2 > 0) THEN
        SET c = c + 1;
        SET c = c + get_binary_count(c1, 0);
        SET c = c + get_binary_count(c2, 0);
    END IF;

    RETURN c;
END$$
 
DELIMITER ;

Any suggestions?

Thanks in advance.

informatik01's user avatar

informatik01

15.8k10 gold badges74 silver badges103 bronze badges

asked Aug 9, 2012 at 9:22

aslamdoctor's user avatar

aslamdoctoraslamdoctor

3,61511 gold badges52 silver badges93 bronze badges

1

Because

SELECT left_id AS c1 FROM mlm_user_mst WHERE parent_id=a AND left_id>0; 

doesn’t set the variable c1, it returns a set with a column named c1

You want

SELECT left_id INTO c1 FROM mlm_user_mst WHERE parent_id=a AND left_id>0; 

Similarly for c2.

answered Aug 9, 2012 at 9:24

podiluska's user avatar

that is because you are using SELECT queries whose output is not stored into variables or temporary inside FUNCTION which must. Function can return only one single value. So your code should be something like this:

CREATE TABLE t1 AS SELECT left_id AS c1 FROM mlm_user_mst WHERE parent_id=a AND left_id>0;
CREATE TABLE t2 AS SELECT right_id AS c2 FROM mlm_user_mst WHERE parent_id=a AND right_id>0;

or

SELECT left_id AS c1 INTO @c1 FROM mlm_user_mst WHERE parent_id=a AND left_id>0 LIMIT 1; 

SELECT right_id AS c2 INTO @c2 FROM mlm_user_mst WHERE parent_id=a AND right_id>0 LIMIT 1;

answered Aug 9, 2012 at 9:24

Omesh's user avatar

OmeshOmesh

27.2k6 gold badges41 silver badges50 bronze badges

I am not trying to return a result set and I have no idea what I’m doing wrong here.
MySQL 5.5

delimiter $$

CREATE FUNCTION CheckAccount(
    i_username varchar(50)
) RETURNS integer

BEGIN

    DECLARE v_validUserId int;
    DECLARE v_validMembership int;
    DECLARE o_Status integer;

    SELECT vvalidUserId = u.UserId
    FROM Users u
    WHERE u.Username = i_username;

    IF( v_validUserId IS NULL ) THEN
        SET o_Status = 2; -- Invalid username
    ELSE
        SET o_Status = 1; -- Good
    END IF;


    IF(o_Status != 2 ) THEN
            SELECT v_validMembership = 1
            FROM Users u
            JOIN UserMemberships um on um.UserId = u.userId
            JOIN Memberships m on m.MembershipId = um.MembershipId
            WHERE um.MembershipExpireDateTime > CURDATE()
            AND u.UserId = v_validUserId;

            IF( v_validMembership IS NULL ) THEN 
                SET o_Status = 3; -- Invalid membership
            END IF;
    END IF;

    RETURN o_status;

END $$
DELIMITER ;

Any help will be greatly appreciated!

Trinimon's user avatar

Trinimon

13.8k9 gold badges43 silver badges60 bronze badges

asked Apr 23, 2013 at 19:06

sqltracy's user avatar

I’m not sure if you can assign variables that way, try use INTO statement for your selects. For example:

SELECT 
    u.UserId INTO vvalidUserId 
FROM 
    Users u
WHERE 
    u.Username = i_username;

answered Apr 24, 2013 at 1:48

b.b3rn4rd's user avatar

b.b3rn4rdb.b3rn4rd

8,2842 gold badges41 silver badges55 bronze badges

1

Error Code: 1415. Not allowed to return a result set from a trigger

Discussion in ‘MySQL’ started by ying7690, Jul 4, 2011.


  1. ying7690

    ying7690
    New Member

    Joined:
    Jul 4, 2011
    Messages:
    3
    Likes Received:
    0
    Trophy Points:
    0

    I have the following code for trigger
    the syntax message was

    «Error Code: 1415. Not allowed to return a result set from a trigger»

    delimiter $$   CREATE TRIGGER  New_User AFTER INSERT ON  tblAdmin   FOR EACH ROW  BEGIN  DECLARE _AdminRECID char(36);  DECLARE _CreateUser varchar(50);  DECLARE _CreateDate datetime;  DECLARE _AuditUser varchar(50);  DECLARE _AuditDate datetime;  DECLARE _MenuRECID CHAR(36);   SELECT RECID = _AdminRECID, 	    CreateUser = _CreateUser, 	    CreateDate = _CreateDate, 	    AuditUser  = _AuditUser, 	    AuditDate  = _AuditDate  FROM tblAdmin;    SELECT RECID = _MenuRECID FROM tblMenu;    	  INSERT INTO tblAdmin_Access(RECID,AdminRECID,MenuRECID,Status,   CreateUser,CreateDate,AuditUser,AuditDate) 	 VALUES (UUID(),_AdminRECID,_MenuRECID,'A', _CreateUser,CURDATE(),_AuditUser,CURDATE());     END;

  2. ying7690

    ying7690
    New Member

    Joined:
    Jul 4, 2011
    Messages:
    3
    Likes Received:
    0
    Trophy Points:
    0

    Not allowed to return a result set from a trigger

    I have the following code for trigger
    the syntax message was

    «Error Code: 1415. Not allowed to return a result set from a trigger»

    delimiter $$
    
    CREATE TRIGGER  New_User AFTER INSERT ON  tblAdmin
    
    FOR EACH ROW
    BEGIN
    DECLARE _AdminRECID char(36);
    DECLARE _CreateUser varchar(50);
    DECLARE _CreateDate datetime;
    DECLARE _AuditUser varchar(50);
    DECLARE _AuditDate datetime;
    DECLARE _MenuRECID CHAR(36);
    
    SELECT RECID = _AdminRECID,
           CreateUser = _CreateUser,
           CreateDate = _CreateDate,
           AuditUser  = _AuditUser,
           AuditDate  = _AuditDate
    FROM tblAdmin;
    
    SELECT RECID = _MenuRECID
    FROM tblMenu;
    
    
    
        INSERT INTO tblAdmin_Access(RECID,AdminRECID,MenuRECID,Status,CreateUser,CreateDate,AuditUser,AuditDate)
        VALUES (UUID(),_AdminRECID,_MenuRECID,'A',_CreateUser,CURDATE(),_AuditUser,CURDATE());
    
    
    END;
    
    

  3. shabbir

    shabbir
    Administrator
    Staff Member

    Joined:
    Jul 12, 2004
    Messages:
    15,370
    Likes Received:
    387
    Trophy Points:
    83

    Please don’t create two separate threads and I have merged both of them for you.


  4. ying7690

    ying7690
    New Member

    Joined:
    Jul 4, 2011
    Messages:
    3
    Likes Received:
    0
    Trophy Points:
    0

    thanks.because i cant remove the previous thread…

Share This Page


Go4Expert

Понравилась статья? Поделить с друзьями:
  • Mysql как изменить длину поля
  • Mssql error code
  • Mysql как изменить not null на null
  • Ms sql server error 9003
  • Mysql storage error 28 from storage engine