查询如果不存在,则不应跳过特定表的执行

时间:2013-02-12 09:51:23

标签: mysql stored-procedures

DROP PROCEDURE IF EXISTS Cursor_Test;# MySQL returned an empty result set (i.e. zero rows).
# MySQL returned an empty result set (i.e. zero rows).

DELIMITER $$

CREATE PROCEDURE Cursor_Test()
BEGIN

  DECLARE Project_Number_val VARCHAR( 255 );
  DECLARE Temp_List_val VARCHAR(255);
  DECLARE Project_List_val VARCHAR(255);
  DECLARE FoundCount INT;



  DECLARE no_more_rows BOOLEAN;
  DECLARE loop_cntr INT DEFAULT 0;
  DECLARE num_rows INT DEFAULT 0;


  DECLARE projects_cur CURSOR FOR
    SELECT Project_Id
    FROM Project_Details;


  DECLARE CONTINUE HANDLER FOR NOT FOUND
    SET no_more_rows = TRUE;


  OPEN projects_cur;
  select FOUND_ROWS() into num_rows;

  the_loop: LOOP

    FETCH  projects_cur
    INTO   Project_Number_val;


    IF no_more_rows THEN
        CLOSE projects_cur;
        LEAVE the_loop;
    END IF;

SET @Project_List_val = CONCAT(Project_Number_val, '_List');

   SET @sql1 = CONCAT('SELECT COUNT(1) INTO FoundCount
    FROM information_schema.tables
    WHERE table_schema = panel_rs
    AND table_name =', @Project_List_val);
PREPARE stmt FROM @sql1;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

    IF FoundCount = 1 THEN
SET @sql = CONCAT(' INSERT INTO test (Panel_Id)
                    SELECT Panel_Id 
                    FROM ', @Project_List_val);

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END IF;

    SET loop_cntr = loop_cntr + 1;
  END LOOP the_loop;


  select num_rows, loop_cntr;


END $$# MySQL returned an empty result set (i.e. zero rows).
# MySQL returned an empty result set (i.e. zero rows).


DELIMITER 
# MySQL returned an empty result set (i.e. zero rows).

为了检查sql1中上述查询中存在的表,在运行查询时,不会使用该值更新FoundCount变量。

你能建议在运行查询时如何更新变量吗?

或者有没有办法检查表存在并根据表存在的结果运行第二个查询

0 个答案:

没有答案