Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Stored pocedure (https://www.delphipraxis.net/22420-stored-pocedure.html)

Marcel Gascoyne 18. Mai 2004 11:30

Re: Stored pocedure
 
Zitat:

Zitat von Hansa
viel zu kompliziert :

SQL-Code:
SET TERM ^;

CREATE PROCEDURE HELPME RETURNS (LETZTEAENDERUNG TIMESTAMP)
AS
begin
  LETZTEAENDERUNG = 'NOW';
  suspend;
end
^
Was mich nur wundert : derselbe Code in einem Trigger geht bei mir von Delphi aus nicht. :shock:

Stimmt ;-) Die Abfrage ist etwas doof formuliert. Hab ja nur das Beispiel übernommen, aber Du hast schon recht, das Ergebnis ist das gleiche.

Gruß,
Marcel

Hansa 18. Mai 2004 12:20

Re: Stored pocedure
 
allerdings will es mir nicht gelingen, eine ID als Input-Parameter mitzugeben.

SQL-Code:
ALTER PROCEDURE HELPME (
    ID INTEGER)
AS
DECLARE VARIABLE L TIMESTAMP;
  SELECT LETZTEAENDERUNG FROM ART8 WHERE ID = :ID
  INTO :L;
  IF L <> 'NOW' THEN
    LETZTEAENDERUNG = 'NOW';
  SUSPEND;
Da stimmt irgendwas mit der Syntax nicht. 8) Er beschwert sich über das Select.


[EDIT]

so gehts :

SQL-Code:
ALTER PROCEDURE HELPME (
    ID INTEGER)
RETURNS (
    LETZTEAENDERUNG TIMESTAMP)
AS
DECLARE VARIABLE L TIMESTAMP;
BEGIN
  SELECT LETZTEAENDERUNG FROM ART8 WHERE ID = :ID
  INTO :L;
  IF (L <> 'NOW') THEN
    LETZTEAENDERUNG = 'NOW';
  SUSPEND;
END;
Jetzt ist nur noch die Frage, wie man solch eine Prozedur Feld/Tabellen- unabhängig machen kann.

kiar 18. Mai 2004 15:25

Re: Stored pocedure
 
hallo hansa,

vielleicht kann man, der procedure den Namen der tabelle mitgeben
SQL-Code:

ALTER PROCEDURE HELPME (
    ID INTEGER, TABName Varchar(20))
AS
und dann in der procedure einfach TbName aufrufen
SQL-Code:
SELECT LETZTEAENDERUNG FROM TABNAme WHERE
raik

Nicodius 18. Mai 2004 15:34

Re: Stored pocedure
 
hast du jetzt nen Interbase server? ... ich hab jetzt vielleicht was überlesen(nur auf topicanfang geschaut) allerdings ist das ne pottenzielle "Fehlerquelle" :mrgreen:

Hansa 18. Mai 2004 16:02

Re: Stored pocedure
 
und woher kommt TabName ? :mrgreen:

Marcel Gascoyne 18. Mai 2004 16:45

Re: Stored pocedure
 
Zitat:

Zitat von Hansa

Jetzt ist nur noch die Frage, wie man solch eine Prozedur Feld/Tabellen- unabhängig machen kann.

Wäre nun interessant ob Du Interbase oder Firebird verwendest. Ab Firebird 1.5 würde ich folgendes vorschlagen:

SQL-Code:
CREATE PROCEDURE HELPME (
  P_ID     INTEGER,
  P_TABELLE VARCHAR(31),
  P_FELD   VARCHAR(31)
)
RETURNS (
    LETZTEAENDERUNG TIMESTAMP
)
AS
DECLARE VARIABLE SQL VARCHAR(255);
BEGIN
  SQL = 'select ' || P_FELD || ' from ' || P_TABELLE || ' where ID = ' || CAST(P_ID AS VARCHAR(15));
 
  EXECUTE STATEMENT :SQL INTO :LETZTEAENDERUNG;

  IF (LETZTEAENDERUNG <> 'NOW') THEN
    LETZTEAENDERUNG = 'NOW';

  SUSPEND;
END;
Gruß,
Marcel

Hansa 18. Mai 2004 17:03

Re: Stored pocedure
 
Vorsichtshalber Firebird, aber eher dann 1.0.296 ? Wer weiß ? Zumindest will ich nicht etwas verwenden, das mit Borland-Interbase mit Sicherheit nicht mehr läuft. 8)

Robert_G 18. Mai 2004 17:33

Re: Stored pocedure
 
Würde es nicht auch so (oder so ähnlich :P ) funktionieren?
Rüchkgabewert -> Function, oder ist der IB Dialekt so verschieden von PL/SQL?

SQL-Code:
CREATE OR REPLACE FUNCTION HelpMe(p_ID     Integer
                                 ,p_Owner  Varchar2 := Null -- optional parameter
                                 ,p_Tabelle Varchar2
                                 ,p_Feld   Varchar2)
  RETURN Timestamp
IS
  LetzteAenderung Timestamp;
  TableIdent     Varchar2(65);
Begin

  If p_Owner Is not Null Then
    TableIdent := P_Owner || '.' || p_Tabelle;
  Else
    TableIdent := p_Tabelle;
  End If;

  EXECUTE IMMEDIATE 'SELECT ' || P_FELD || chr(10) ||
                    'FROM  ' || TableIdent || chr(10) ||
                    'WHERE ID = :i_ID'
    INTO LetzteAenderung
    USING P_ID;

  RETURN LetzteAenderung;

EXCEPTION
  When No_Data_Found Then
  -- Wenn nix da ist, braucht man auch keinen Fehler ;)
    RETURN Null;
End;

kiar 18. Mai 2004 17:39

Re: Stored pocedure
 
hallo robert,

firebird 1.0 kennt kein EXECUTE Statement, marcel ist ja auch von firebird 1.5 ausgegangen

Hansa 18. Mai 2004 17:43

Re: Stored pocedure
 
Zitat:

Zitat von Robert_G
-- Wenn nix da ist, braucht man auch keinen Fehler ;)
RETURN Null;

nene, so aber dann doch nicht. Wenn nichts da ist kann das sehr wohl einen Fehler darstellen. 8)


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:33 Uhr.
Seite 2 von 4     12 34      

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