create procedure pdemo
  BEGIN
    DECLARE  cur1 CURSOR FOR SELECT p1 FROM table;
      loop
          fetch cur1 into @a;
     begin
     DECLARE  cur2 CURSOR FOR SELECT id,@a FROM table;
 
    ..
    ..
     end;
   .. 
 END;
我得结果这样
         SELECT id,@a FROM table;    //假设 @a=name
       就相当于  SELECT id,'name' FROM table;
                结果就是: 1   name
                           2   name
但是我像让它成为真正的列,是否有方法 ,谢谢

解决方案 »

  1.   

    set @sql=concat("SELECT id,",@a,"FROM table")
      

  2.   

    没理解,这样的话,每次fetch出来的都是一个值,有意义吗?
      

  3.   

    呵呵,,你可能是看完了,我意思是你没明白我意思。
    我知道游标是取记录循环分析,
    我是说。
    SELECT id,@a FROM table;这条语句出来结果是
       1   john
       2   tom 
    这样的,而不是直接把字符串name给我弄出来、。
      

  4.   

    呵呵,原来你是这个意思啊,这实现不了你只能把可能的列都列出来 DECLARE cur2 CURSOR FOR SELECT id,... FROM table;
    然后再循环里面处理,if @a = 'name' then .........
      

  5.   

    列不确定的前提是表不确定如果你table也要动态换,那真是悲剧了
      

  6.   

    怎么不可以
    DECLARE cur2 CURSOR FOR SELECT * FROM tt;
    ...
    set @asql=concat('create table tt as SELECT id,',@a,' FROM table');
    prepare stml from @asql;
    execute stml;
    ...
      

  7.   

    可能是行,,但是 为什么 我用 prepare @sql  from @sql_1  非要用 不带@的才行??为什么啊
      

  8.   

    prepare sql from @sql_1 
    语法要求
      

  9.   


    mysql> SET @s = 'SELECT SQRT(POW(?,2) + POW(?,2)) AS hypotenuse';
    mysql> PREPARE stmt2 FROM @s;
    mysql> SET @a = 6;
    mysql> SET @b = 8;
    mysql> EXECUTE stmt2 USING @a, @b;
    +------------+
    | hypotenuse |
    +------------+
    | 10 |
    +------------+
    mysql> DEALLOCATE PREPARE stmt2;
      

  10.   

    手册上的例子
    PREPARE stmt2 FROM @s;