问题是这样滴~以下是存储过程内容BEGIN
DECLARE userExist INT;
DECLARE nasCanAccess INT;
DECLARE nasID INT;
DECLARE UniName VARCHAR(32);
DECLARE groupName VARCHAR(32); SELECT COUNT(UniName) INTO userExist FROM ar_users WHERE (`UserName` = UserName AND `IsGlobal` = 1);
IF userExist>0 THEN
SELECT UniName INTO UniName FROM ar_users WHERE (`UserName` = UserName AND `IsGlobal` = 1);
ELSE
SELECT COUNT(UniName) INTO userExist FROM ar_users WHERE (`UserName` = UserName AND `IsGlobal` = 0);
IF userExist>0 THEN
SELECT COUNT(UniName) INTO nasCanAccess FROM ar_usernas WHERE (`UserName` = UserName AND `NASID` = 1);
IF nasCanAccess>0 THEN
SELECT UniName INTO UniName FROM ar_usernas WHERE (`UserName` = UserName AND `NASID` = 1);
END IF;
END IF;
END IF;
SELECT `id`, `username`, `attribute`, `value`, `op` FROM ar_checks WHERE (`UniName` = UniName);
END嗯,直接CALL 这个存储过程无法得到数据,
但是,CALL之后,再执行
SELECT `id`, `username`, `attribute`, `value`, `op` FROM ar_checks WHERE (`UniName` = UniName);
却可以获得数据这是神马问题?如何解决呢?

解决方案 »

  1.   

    给出你的表结构及测试数据,包括你的 create procedure ..语句,这样别人可以直接测试模拟你的问题。
       建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
       参考一下这个贴子的提问方式http://topic.csdn.net/u/20091130/20/8343ee6a-417c-4c2d-9415-fa46604a00cf.html
       
       1. 你的 create table xxx .. 语句
       2. 你的 insert into xxx ... 语句
       3. 结果是什么样,(并给以简单的算法描述)
       4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL)
       
       这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。   
      

  2.   

    ng1800 (ng1800)
      '截至2010-09-11 18:34:08  用户结帖率0.00% 当您的问题得到解答后请及时结贴.
    http://topic.csdn.net/u/20090501/15/7548d251-aec2-4975-a9bf-ca09a5551ba5.html
    http://topic.csdn.net/u/20100428/09/BC9E0908-F250-42A6-8765-B50A82FE186A.html
    http://topic.csdn.net/u/20100626/09/f35a4763-4b59-49c3-8061-d48fdbc29561.html8、如何给分和结贴?
    http://community.csdn.net/Help/HelpCenter.htm#结帖
      

  3.   


    CREATE DEFINER = `root`@`localhost` PROCEDURE `NewProc`(IN UserName varchar(30),IN NasName varchar(30))
    BEGIN
    DECLARE userExist INT;
    DECLARE nasCanAccess INT;
    DECLARE nasID INT;
    DECLARE UniName VARCHAR(32);
    DECLARE groupName VARCHAR(32); SELECT COUNT(UniName) INTO userExist FROM ar_users WHERE (`UserName` = UserName AND `IsGlobal` = 1);
    IF userExist>0 THEN
    SELECT UniName INTO UniName FROM ar_users WHERE (`UserName` = UserName AND `IsGlobal` = 1);
    ELSE
    SELECT COUNT(UniName) INTO userExist FROM ar_users WHERE (`UserName` = UserName AND `IsGlobal` = 0);
    IF userExist>0 THEN
    SELECT COUNT(UniName) INTO nasCanAccess FROM ar_usernas WHERE (`UserName` = UserName AND `NASID` = 1);
    IF nasCanAccess>0 THEN
    SELECT UniName INTO UniName FROM ar_usernas WHERE (`UserName` = UserName AND `NASID` = 1);
    END IF;
    END IF;
    END IF;
    SELECT `id`, `username`, `attribute`, `value`, `op` FROM ar_checks WHERE (`UniName` = UniName);
    END;DROP TABLE IF EXISTS `ar_checks`;
    CREATE TABLE `ar_checks` (
      `id` int(11) NOT NULL DEFAULT '0',
      `uniname` varchar(64) DEFAULT NULL,
      `username` varchar(64) DEFAULT NULL,
      `attribute` varchar(64) DEFAULT NULL,
      `op` char(2) DEFAULT NULL,
      `value` varchar(254) DEFAULT NULL,
      `enabled` int(1) DEFAULT '1',
      PRIMARY KEY (`id`),
      KEY `uniname` (`uniname`),
      KEY `username` (`username`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;-- ----------------------------
    -- Records of ar_checks
    -- ----------------------------
    INSERT INTO `ar_checks` VALUES ('0', 'lonelyswan@nas1', 'lonelyswan', null, null, null, '1');-- ----------------------------
    -- Table structure for `ar_usernas`
    -- ----------------------------
    DROP TABLE IF EXISTS `ar_usernas`;
    CREATE TABLE `ar_usernas` (
      `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
      `uniname` varchar(64) DEFAULT NULL,
      `username` varchar(64) DEFAULT NULL,
      `nasid` int(11) DEFAULT NULL,
      `enabled` int(1) DEFAULT '1',
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;-- ----------------------------
    -- Records of ar_usernas
    -- ----------------------------
    INSERT INTO `ar_usernas` VALUES ('1', 'lonelyswan@nas1', 'lonelyswan', '1', '1');-- ----------------------------
    -- Table structure for `ar_users`
    -- ----------------------------
    DROP TABLE IF EXISTS `ar_users`;
    CREATE TABLE `ar_users` (
      `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
      `uniname` varchar(64) DEFAULT NULL,
      `username` varchar(64) DEFAULT NULL,
      `isglobal` int(1) DEFAULT '1',
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;-- ----------------------------
    -- Records of ar_users
    -- ----------------------------
    INSERT INTO `ar_users` VALUES ('1', 'lonelyswan@nas1', 'lonelyswan', '0');
      

  4.   

    SELECT `id`, `username`, `attribute`, `value`, `op` FROM ar_checks WHERE (`UniName` = 'lonelyswan');有符合条件 的记录吗?!mysql> select * from ar_checks;
    +----+-----------------+------------+-----------+------+-------+---------+
    | id | uniname         | username   | attribute | op   | value | enabled |
    +----+-----------------+------------+-----------+------+-------+---------+
    |  0 | lonelyswan@nas1 | lonelyswan | NULL      | NULL | NULL  |       1 |
    +----+-----------------+------------+-----------+------+-------+---------+
    1 row in set (0.00 sec)