2017-01-10 3 views
0

Ich führe erfolgreich eine Abfrage aus, indem ich die Spaltennamen einer Tabelle im information_schema auswähle, aber wenn ich die gleiche Abfrage in der gespeicherten Prozedur verwende, um sie mit einem Cursor zu verwenden, dann ist das information_schema unbekannt. Kann mir jemand den Grund sagen und mir helfen, das Problem zu lösen? Dank ist die Abfrageinformation_schema unbekannt in einer Prozedur

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

Und hier ist das Verfahren.

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; 

Dank

+0

ich die Abfrage über die information_schema Tabelle ausgeführt wird. Es scheint der Fehler zu sein. Vielen Dank –

Antwort

0

Ihr Code korrekt ist.

prüfen Rechte auf Prozedur Ausführung
oder ein Verfahren ersetzen mit

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