Ankündigung

Einklappen
Keine Ankündigung bisher.

Trigger/Procedure Erstellung (Guthaben bei neuem Kunden, Hallo)

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Trigger/Procedure Erstellung (Guthaben bei neuem Kunden, Hallo)

    Hallo,
    ich schreibe demnächst eine Klausur und benötige ein paar Muster-Trigger/Procedures.
    Zum einen möchte ich gerne eine Procedure erstellen, die zu Beginn "Hallo %Benutzername%" ausgibt.

    Die "Hallo-Procedure" habe ich soweit geschrieben:

    Code:
    CREATE PROCEDURE 'Hallo' (OUT 'isvalid' VARCHAR(80)) NOT DETERMINISTIC NO SQL SQL SECURITY DEFINER BEGIN SET isvalid = 'Hallo';
    END
    CALL 'Hallo'(
    @p0
    );
    SELECT @p0 AS 'isvalid';
    Ich weiß allerdings nicht, wie ich dort eine Variabel, die den Benutzernamen ausgibt, einfügen soll.

    Des Weiteren benötige ich einen Trigger, der jedem neu angelegten Benutzer einen bestimmten Betrag zuweist. Habt ihr da eine Idee?
    Code:
    CREATE TRIGGER `guthaben` BEFORE INSERT ON `kunde` FOR EACH ROW INSERT INTO `wetten`.`kunde` (`ID`, `vorname`, `name`, `guthaben`) VALUES (NULL, '', '', '5');
    in dem Fall ein Guthaben von "5", aber ich denke so funktioniert das nicht.

    Vielen Dank für Antworten!

  • #2
    Zitat von petepan Beitrag anzeigen
    Hallo,
    ich schreibe demnächst eine Klausur und benötige ein paar Muster-Trigger/Procedures.


    Vielen Dank für Antworten!
    Code:
    test=# create or replace function hallo(out message text) as $$begin message = 'Moin moin'; end; $$language plpgsql;
    CREATE FUNCTION
    Time: 0,618 ms
    test=*# select hallo();
       hallo
    -----------
     Moin moin
    (1 row)
    
    Time: 0,192 ms
    test=*# create table t1 (user_id int, name text);
    CREATE TABLE
    Time: 6,705 ms
    test=*# create table t2 (user_id int, wert int);
    CREATE TABLE
    Time: 0,769 ms
    test=*# create or replace function my_insert() returns trigger as $$begin insert into t2 values (new.user_id, 5); return new; end; $$language plpgsql;
    CREATE FUNCTION
    Time: 0,461 ms
    test=*# create trigger my_trigger after insert on t1 for each row execute procedure my_insert();
    CREATE TRIGGER
    Time: 0,423 ms
    test=*# insert into t1 values(1, 'max');
    INSERT 0 1
    Time: 0,690 ms
    test=*# select * from t2;
     user_id | wert
    ---------+------
           1 |    5
    (1 row)

    Und jetzt lies endlich die Doku!
    PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

    Kommentar


    • #3
      Welches Datenbanksystem verwendest du denn? Gerade bei Umgebungsvariablen wie z.B. User ist das kaum einheitlich.

      Kommentar


      • #4
        Hallo,

        danke für die Antworten!

        @akretschmer Hast du dafür eine genaue Befehlsliste (besonders für CREATE TRIGGER/FUNCTION)?
        @Tropi Ich nutze MySQL mit phpMyAdmin als Administrationsoberfläche.

        Kommentar


        • #5
          Ist der Trigger in etwa so zu realisieren?

          Code:
          //1 = neuer Kunde ; 0 = Bestandskunde
          CREATE TRIGGER Standardwert ON kunde
          FOR INSERT
          AS
          IF ((SELECT neuerkunde FROM kunde) == 1)
          BEGIN
          UPDATE kunde 
          SET guthaben = 5);
          END
          oder so? Nur wie fische ich dann die neuen Benutzer aus?

          Code:
          DELIMITER //
          
          CREATE TRIGGER Guthabenpruefung AFTER INSERT 
          ON Kunde FOR EACH ROW BEGIN UPDATE Kunde SET Guthaben = 
          Guthaben+5 WHERE ID = ???; 
          
          END;
          
          // DELIMITER ;
          Danke!

          Kommentar


          • #6
            Zitat von petepan Beitrag anzeigen

            oder so? Nur wie fische ich dann die neuen Benutzer aus?


            Danke!

            NEW ist Dein neuer Freund.
            PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

            Kommentar


            • #7
              Zitat von petepan Beitrag anzeigen
              Hallo,

              danke für die Antworten!

              @akretschmer Hast du dafür eine genaue Befehlsliste (besonders für CREATE TRIGGER/FUNCTION)?

              Natürlich. Die Doku.

              Code:
              Command:     CREATE TRIGGER
              Description: define a new trigger
              Syntax:
              CREATE [ CONSTRAINT ] TRIGGER name { BEFORE | AFTER | INSTEAD OF } { event [ OR ... ] }
                  ON table_name
                  [ FROM referenced_table_name ]
                  { NOT DEFERRABLE | [ DEFERRABLE ] { INITIALLY IMMEDIATE | INITIALLY DEFERRED } }
                  [ FOR [ EACH ] { ROW | STATEMENT } ]
                  [ WHEN ( condition ) ]
                  EXECUTE PROCEDURE function_name ( arguments )
              
              where event can be one of:
              
                  INSERT
                  UPDATE [ OF column_name [, ... ] ]
                  DELETE
                  TRUNCATE
              und

              Code:
              Command:     CREATE FUNCTION
              Description: define a new function
              Syntax:
              CREATE [ OR REPLACE ] FUNCTION
                  name ( [ [ argmode ] [ argname ] argtype [ { DEFAULT | = } default_expr ] [, ...] ] )
                  [ RETURNS rettype
                    | RETURNS TABLE ( column_name column_type [, ...] ) ]
                { LANGUAGE lang_name
                  | WINDOW
                  | IMMUTABLE | STABLE | VOLATILE | [ NOT ] LEAKPROOF
                  | CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT
                  | [ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER
                  | COST execution_cost
                  | ROWS result_rows
                  | SET configuration_parameter { TO value | = value | FROM CURRENT }
                  | AS 'definition'
                  | AS 'obj_file', 'link_symbol'
                } ...
                  [ WITH ( attribute [, ...] ) ]
              In Kurzform. Die Online-Doku im Web ist ausführlicher.
              PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

              Kommentar

              Lädt...
              X