本人使用游标写了一段sql语句,创建了一个存储过程然后调用存储过程,但是执行不出来 也没有错误提示,语句如下,求帮助。。
CREATE PROCEDURE p_test()
BEGIN
   DECLARE fk_name varchar(64);   
   DECLARE sqlcmd varchar(255);   
   DECLARE table_name varchar(64);  
   DECLARE cur_ok bool DEFAULT false; 
   DECLARE cur CURSOR for SELECT a.CONSTRAINT_NAME,b.TABLE_NAME from information_schema.REFERENTIAL_CONSTRAINTS a,information_schema.TABLES b WHERE a.TABLE_NAME=b.TABLE_NAME;   
   DECLARE CONTINUE HANDLER FOR NOT FOUND SET cur_ok=true;  
   open cur; 
   REPEAT       
    FETCH cur INTO fk_name,table_name; 
     IF NOT cur_ok THEN              
        set @sqlcmd=CONCAT('alter table ', table_name, ' drop foreign key ', fk_name);      
        SELECT @sqlcmd;        
        PREPARE stmt FROM @sqlcmd;
        EXECUTE stmt;  
        DEALLOCATE PREPARE stmt;         
     END IF;    
     UNTIL cur_ok END REPEAT;
   close cur;
END;

解决方案 »

  1.   

           set @sqlcmd=CONCAT('alter table ', table_name, ' drop foreign key ', fk_name);     
           SELECT @sqlcmd;       
           PREPARE stmt FROM @sqlcmd;
           EXECUTE stmt; 
           DEALLOCATE PREPARE stmt;      是否有结果输出,贴出以供分析。
      

  2.   

    有时候可以时候不可以。。擦,删除了SELECT @sqlcmd这句,但是我现在想用游标删除所有存储过程,要用到declare语句,而declare必须包含在begin...end 之间,如果不创建存储过程直接在begin  end之间声明变量就会报错,这个怎么解决
      

  3.   


    SELECT a.CONSTRAINT_NAME,b.TABLE_NAME from information_schema.REFERENTIAL_CONSTRAINTS a,information_schema.TABLES b WHERE a.TABLE_NAME=b.TABLE_NAME AND b.TABLE_SCHEMA = 'db_name';set @sqlcmd=CONCAT('use db_name; alter table ', table_name, ' drop foreign key ', fk_name);