字体有点问题先说下不好意思。 
是这样的我用MYSQL做存储过程测试第一次成功了 接着我想做个对多表进行操作的于是我创建了2个表 
第一个perducts这个表里有2个字段 name sexid其中sexid是外键 第2张表是专门做性别的 2个字段SexId是主键 sex才是实际插入的性别 
然后大家来看看我这个存储过程 
CREATE PROCEDURE `InsertPSex`( 
name varchar(20), 
Sex1 char(4) 
) BEGIN 
declare SID int(11) 
select SID=SexId from productssex where Sex=Sex1 
insert into products(name,sexid) values(name,SID); 
END; 
接着执行call InsertPSex('Su','女');就会有错误 
错误要上传图片所以这里就不上传了 应该是存储过程的语法 这个临时变量的声名和赋值可能那里出问题了 我今天才学 以前只会SQLSERVER的存储过程 
麻烦大家帮忙看看 回答问题是种美德谢谢共同进步!
放在数据库论坛上1天了没一个回帖没办法放这边了

解决方案 »

  1.   

    declare SID int(11);
    select SID=SexId from productssex where Sex=Sex1 ;
    加上分号试试
      

  2.   

    呵呵谢谢回复这个没用的还有标准语法有问题 就是临时变量这里以前只搞过SQLSERVER的麻烦后面的兄弟们跟上
      

  3.   

    哎本来是做JAVA的 现在越来越像DBA发展了真晕。。
      

  4.   

    是用into吧,你那中是mssql的写法select @v = xxxxxx
    CREATE PROCEDURE `test`.`InsertPSex`(
    name varchar(20),
    Sex1 char(4)
    )
    BEGIN
    declare SID int;
    select SexId from productssex where Sex=Sex1 into SID;
    insert into products(name,sexid) values(name,SID);
    END;
      

  5.   

    不行啊 还是提示这个错误 我晕 来回来就是这个错误
    SQL执行错误#1366 从数据库相应
    incorrect integer value: '女' for colunm 'Sex' at row 1
      

  6.   

    Sex=Sex1的sex是什么类型的
      

  7.   

    从错误提示看,你的productssex表里的Sex居然定义成了int类型,你仔细看看吧,改成varchar的
      

  8.   

    这个我早感觉到了 问题是SEX的属性就是VARCHAR20 本来我以为CHAR都不行 才改的 结果还是这个错误 我想还是存储过程里的问题 就是临时变量赋值那里
      

  9.   

    你好好检查下,我在本地测试过了,我的是mysql 5.0的
    要不你把你的表结构create出来,调用过程全都给出来,大家一起瞅瞅。
      

  10.   

    好吧 非常感谢了 现在我把这个表和存储过程全贴出来给大家 麻烦大家帮帮忙 搞了5天啦
    CREATE TABLE `products` (
      `Id` int(11) NOT NULL auto_increment,
      `name` varchar(20) default NULL,
      `sexid` int(11) NOT NULL default '0',
      PRIMARY KEY  (`Id`),
      KEY `SPSex` (`sexid`)
    ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;第2个表
    CREATE TABLE `productssex` (
      `SexId` int(11) NOT NULL auto_increment,
      `Sex` varchar(10) default NULL,
      PRIMARY KEY  (`SexId`)
    ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;接下来就是存储过程了CREATE PROCEDURE `test`.`InsertPSex`(
    name varchar(20),
    Sex1 varchar(10)
    )
    BEGIN
    declare SID int;
    select SexId from productssex where Sex=Sex1 into SID;
    insert into products(name,sexid) values(name,SID);
    END;这个就是所有信息了 谢谢麻烦有时间的大哥们帮忙调调 救人一命胜造七级浮屠 阿弥陀佛
      

  11.   


    -- 创建sp
    DELIMITER $$DROP PROCEDURE IF EXISTS `test`.`InsertPSex` $$
    CREATE PROCEDURE `test`.`InsertPSex` (
    name varchar(20),
    Sex1 varchar(10)
    )
    BEGIN
    declare SID int;
    select SexId from productssex where Sex=Sex1 into SID;
    insert into products(name,sexid) values(name,SID);
    END $$DELIMITER ;-- 准备一条数据:
    INSERT INTO productssex(Sex) VALUES('女');-- 执行sp
    CALL InsertPSex('SU','女');
    利用lz的脚本,执行完全没有任何问题,基本的几条语句怎么可能出状况呢?看图:
      

  12.   

    哎 我真想。怎么会这样啊。。表一样!存储过程一样 拿到我这边就不行了!???MYSQL也是5.0以上版本的啊 。。怎么会这样啊!!!
      

  13.   

    哎终于明白了 原来全是SQL-FONT惹的祸!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    真晕 彻底晕。。不能在以前的基础上改SP只能重新建立一个 。。哎谢谢大家帮我了、、