2016-04-22 4 views
0

ich da eine Prozedur tun Abfrage versucht, in mysqlSQL laufen querys seit Verfahren

folgte ich folgendes:

DELIMITER # 

CREATE PROCEDURE returndata(IN xtable CHAR(255), IN xcolumn CHAR(255)) 
    BEGIN 
     IF (xcolumn = 'XALL') THEN 
      SELECT * FROM xtable; 
     ELSE 
      SELECT xcolumn FROM xtable; 
     END IF; 
    END; 
# 

DELIMITER ; 

aber gibt Fehler. jede Hilfe ist akzeptabel, oder ich könnte sagen, wenn das möglich ist?

EDIT Fehler, das Verfahren zu nennen:

MariaDB [pruebab]> CALL returndata('test', 'id'); 
ERROR 1146 (42S02): Table 'pruebab.xtable' doesn't exist 
+0

Können Sie die Fehlermeldung hinzufügen, die Sie bekommen? –

Antwort

0

Variablen werden nur in Ausdrücken in Abfragen ausgewertet, nicht, wo Spalte oder Tabellennamen erforderlich sind. Sie müssen eine vorbereitete Abfrage verwenden.

CREATE PROCEDURE returndata(IN xtable CHAR(255), IN xcolumn CHAR(255)) 
    BEGIN 
     IF (xcolumn = 'XALL') THEN 
      SET @SQL = CONCAT('SELECT * FROM ', xtable); 
     ELSE 
      SET @SQL = CONCAT('SELECT ', xcolumn, ' FROM ', xtable); 
     END IF; 
     PREPARE stmt FROM @SQL; 
     EXECUTE stmt; 
    END; 
+0

Ich habe wirklich gearbeitet, ich wusste nicht über den Satz: VORBEREITEN stmt FROM @SQL; AUSFÜHREN stmt; - ich werde mehr darüber nachdenken, thx. – nikomaster