2017-01-10 1 views
0

Je lance avec succès une requête en sélectionnant les noms de colonnes d'une table dans le schéma d'information, cependant si j'exécute la même requête dans la procédure stockée pour l'utiliser avec un curseur, alors le schéma d'information est inconnu. Quelqu'un peut-il me dire la raison et aussi m'aider à résoudre le problème? grâce Voici la requêteinformation_schema inconnu dans une procédure

SELECT column_name 
FROM information_schema.columns 
WHERE table_schema = 'database_name' 
AND table_name='Table_name'; 

Et voici la procédure.

DELIMITER $$ 

    CREATE PROCEDURE build_column_names_str (INOUT column_list varchar(4000)) 
    BEGIN 

    DECLARE v_finished INTEGER DEFAULT 0; 
      DECLARE v_column varchar(100) DEFAULT ""; 

    -- declare cursor for column names 
    DEClARE column_cursor CURSOR FOR 
    SELECT column_name 
     FROM information_schema.columns 
     WHERE table_schema = 'database_name' 
     AND table_name='Table_name'; 

    -- declare NOT FOUND handler 
    DECLARE CONTINUE HANDLER 
    FOR NOT FOUND SET v_finished = 1; 

    OPEN column_cursor; 

    get_column: LOOP 

    FETCH column_cursor INTO v_column; 

    IF v_finished = 1 THEN 
    LEAVE get_column; 
    END IF; 

    -- build column name list 
    SET column_list = CONCAT(v_column,",",column_list); 

    END LOOP get_column; 

    CLOSE column_cursor; 

    END$$ 

    DELIMITER ; 

    SET @column_list = ""; 
    CALL build_column_names_str(@column_list); 
    SELECT @column_list; 

Merci

+0

je courais la requête sur la table INFORMATION_SCHEMA. Cela semble être l'erreur. Merci –

Répondre

0

Votre code est correct.

Vérifiez privilèges sur l'exécution de la procédure
ou remplacer une procédure avec

SELECT group_concat(column_name) 
     FROM information_schema.columns 
     WHERE table_schema = 'database_name' 
     AND table_name='Table_name';