Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Tabellenname als Parameter für Stored Procedure (https://www.delphipraxis.net/151813-tabellenname-als-parameter-fuer-stored-procedure.html)

Mavarik 2. Jun 2010 13:52

Datenbank: MySQL • Version: 5.x • Zugriff über: SciBit Komponenten Direkt

Tabellenname als Parameter für Stored Procedure
 
Hallo!

Ich habe folgende Stored Procedure programmiert.

SQL-Code:
DROP PROCEDURE IF EXISTS `CALC` $$
CREATE PROCEDURE `CALC`(IN BASE VarCHAR(20))
BEGIN
  DECLARE done BOOLEAN DEFAULT FALSE;
...
  DECLARE cur1 CURSOR FOR SELECT ID, Betrag, EIN_AUS, Saldo, Kontonummer FROM BASE GROUP BY ISAMKey_2 ASC;
  DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = TRUE;
...
Aber anstatt den die übergebene Datenbank zu benutzen erhalte ich immer die Fehlermeldung...

Datenbank "Base" nicht gefunden...

Aufruf ist CALC('MeineDatenbank');

Wo ist der Trick?

Grsse Mavarik :mrgreen:

Forlan 2. Jun 2010 13:59

Re: Tabellenname als Parameter für Stored Procedure
 
Moin,

eine evtl. überflüssige Frage, aber bist du dir sicher das die DB Base heißt?

Edit:
Kurz vor Feierabend, Müll geschrieben, sorry...^^

Neutral General 2. Jun 2010 14:01

Re: Tabellenname als Parameter für Stored Procedure
 
Zitat:

Zitat von Forlan
Moin,

eine evtl. überflüssige Frage, aber bist du dir sicher das die DB Base heißt?

Base ist eine Variable.

@Mavarik: Also bei Firebird würde ich einen Doppelpunkt vor BASE machen. ==> FROM :BASE ...

Allerdings kann das bzgl. MySQL völliger Schwachsinn sein.

Mavarik 2. Jun 2010 14:03

Re: Tabellenname als Parameter für Stored Procedure
 
Zitat:

Zitat von Neutral General

@Mavarik: Also bei Firebird würde ich einen Doppelpunkt vor BASE machen. ==> FROM :BASE ...

Allerdings kann das bzgl. MySQL völliger Schwachsinn sein.

Funktioniert NICHT...

mkinzler 2. Jun 2010 14:04

Re: Tabellenname als Parameter für Stored Procedure
 
Die wenigsten DBMS unterstützen Parameter für Tabellen usw.

Mavarik 2. Jun 2010 14:05

Re: Tabellenname als Parameter für Stored Procedure
 
Zitat:

Zitat von mkinzler
Die wenigsten DBMS unterstützen Parameter für Tabellen usw.

DBMS?

Bedeutet geht oder geht nicht bei MySQL?

Mavarik

hoika 2. Jun 2010 14:07

Re: Tabellenname als Parameter für Stored Procedure
 
Hallo,

also eine Suche bei Google war wohl zu einfach ? ;)

"mysql stored procedure table as parameter"

1


Heiko

DeddyH 2. Jun 2010 14:09

Re: Tabellenname als Parameter für Stored Procedure
 
Geht, siehe http://dev.mysql.com/tech-resources/...toredproc.html

Mavarik 2. Jun 2010 14:14

Re: Tabellenname als Parameter für Stored Procedure
 
Tja Danke für die Links...

Aber wie funktioniert das mit

SQL-Code:
 SET @BASENAME = CONCAT("SELECT ID, Betrag, EIN_AUS, Saldo, Kontonummer FROM ",BASE,"GROUP BY ISAMKey_2 ASC"
 DECLARE cur1 CURSOR FOR @BASENAME;
Dann kommt der Fehler beim CURSOR DELCLARE...

Und PREAPRE und DECLARE kann ich nicht zuordnen....

Mavarik

hoika 2. Jun 2010 14:28

Re: Tabellenname als Parameter für Stored Procedure
 
Hallo,

Ein Bsp aus meinem Link

SQL-Code:
DELIMITER $$

DROP PROCEDURE IF EXISTS `eduplan`.`GetStakeholder`$$

CREATE PROCEDURE `eduplan`.`GetStakeholder`(usingtable varchar(255), usingid varchar(255), identifier varchar(255))
BEGIN
SET @qry = CONCAT('SELECT * FROM ', usingtable, ' WHERE ', usingid,' = ?');
PREPARE stmt1 FROM @qry;
SET @c = identifier;
EXECUTE stmt1 USING @c;
DEALLOCATE PREPARE stmt1;
END$$

DELIMITER ;

Oder so

SQL-Code:
declare @mySql varchar(220)
set @mysql = 'select customerid from customers'
exec ('DECLARE cur CURSOR FOR ' + @mysql)

Heiko


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:29 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz