Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Create Table aus Interbase Stored Procedure ausführen (https://www.delphipraxis.net/56288-create-table-aus-interbase-stored-procedure-ausfuehren.html)

smudo 3. Nov 2005 11:22

Datenbank: Interbase • Version: 6 • Zugriff über: IB-Expert, UIB-Komponenten

Create Table aus Interbase Stored Procedure ausführen
 
Hallo :hi: ,

ich möchte eine Stored Procedure nutzen, welche im Falle einer fehlenden Tabelle diese für mich anlegt:
Code:
begin
  select count(*) from RDB$RELATION_FIELDS where RDB$RELATION_NAME=:TABLENAME into :TABLEEXISTS;
  if (:TABLEEXISTS=0) then /* Tabelle existiert nicht */
  begin
    create table...;
  end
  suspend;
end
Leider bekomme ich eine Fehlermeldung mit Hinweis auf Create.
Kann man innerhalb einer Stored Procedure unter Interbase kein Create verwenden? :gruebel:
In MSSQL-Server gings auf jeden Fall.

Vielen Dank im Voraus

René

mumu 3. Nov 2005 11:54

Re: Create Table aus Interbase Stored Procedure ausführen
 
kommt glaub ich auf die definition der procedure bzw. function an. kannst du mal den kopf posten?

Lemmy 3. Nov 2005 12:03

Re: Create Table aus Interbase Stored Procedure ausführen
 
Hi,

in einer StoredProcedure (und Trigger) in IB und FB kann KEINE DDL-Anweisung (also create, drop, alter) ausgeführt werden!

Grüße
Lemmy

mumu 3. Nov 2005 12:11

Re: Create Table aus Interbase Stored Procedure ausführen
 
naja also ich kenn mich mit StoredProcedures in oracle weng aus und da ist es meiner meinung nach so, dass man des im kopf mit angegeben kann, ob DDL-Anweisungen erlaubt sind...

smudo 3. Nov 2005 13:35

Re: Create Table aus Interbase Stored Procedure ausführen
 
Zitat:

Zitat von mumu
kannst du mal den kopf posten?

Ja, aber ich glaub nicht, dass das hilfreich ist...
Code:
CREATE PROCEDURE SET_TIMESTAMPS (
    TABLENAME VARCHAR(99))
AS
DECLARE VARIABLE TABLEEXISTS INTEGER;
Zitat:

Zitat von Lemmy
in einer StoredProcedure (und Trigger) in IB und FB kann KEINE DDL-Anweisung (also create, drop, alter) ausgeführt werden!

Das klingt plausibel, banal und zerstört meine Pläne :wall:
Wie könnte ich das serverseitig sonst realisieren?

Lemmy 3. Nov 2005 14:19

Re: Create Table aus Interbase Stored Procedure ausführen
 
Hi,

kommt darauf an, was Du machen willst....

Generell kannst Du die DDL-Anweisung natürlich jeder Zeit durch nen Client ausführen lassen. Für weitere Tipps wären allerdings mehr Infos notwendig.

Lemmy

smudo 3. Nov 2005 15:26

Re: Create Table aus Interbase Stored Procedure ausführen
 
1. Ich empfange Daten und füge sie per Insert in meine DB ein.
2. Dabei wird ein Timestamp in einem ungünstigen Format übergeben, sodass ich diesen erstmal als char(30) speichere.
Vor dem Insert möchte ich aus verschiedenen Gründen das Format noch nicht anpassen
3. Nach dem Inserten sollen in eine Korrekturtabelle die TimeStamps im korrekten Format gespeichert werden,
sodass später darauf gejoint werden kann

Problem: Es soll alles möglichst automatisiert ablaufen, selbst das Erstellen der Korrekturtabellen.
Es sollen bspw. die PKs sowie alle Timestamp-Felder der Standardtabelle in die Korrekturtabelle übernommen werden.

Sicher lässt sich das recht schmerzlos von einem Delphi-Client aus realisieren, ich wollte diese Funktion aber gern serverseitig auslagern.

Und nun muss ich hören, dass mit SPs kein DDL möglich ist :cry:

Lemmy 3. Nov 2005 15:32

Re: Create Table aus Interbase Stored Procedure ausführen
 
Warum die Timestamps in einer Korrekturtabelle auslagern und diese nachher joinen? Warum nicht gleich in eine zusätzliche Tabellenspalte?

Lemmy

[edit]
noch was: ich habe keinen Schimmer wie Dein Applikationsdesign aussieht, doch irgend ein Client muss den import starten. Genau dieser Client kann, ganz automatisch, überprüfen ob eine Korrektrutabelle notwendig ist und diese dann anlegen.
[/edit]

smudo 4. Nov 2005 08:48

Re: Create Table aus Interbase Stored Procedure ausführen
 
Hallo Lemmy,

wir können das Zwiegespräch ja an dieser Stelle beenden :zwinker:
Du hast schon recht, es gibt viele andere Varianten und ich werde wohl auch eine davon nutzen.
Ich komme halt aus dem MSSQL-Server-Bereich und war es gewohnt, das Fat-Server-Prinzip anzuwenden.

Hab schon gemerkt, dass ich mich nun doch immer mehr umstellen muss.

Danke

René


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:12 Uhr.

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