Announcement

Collapse
No announcement yet.

Delete * From tabele1 .... Fehler

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Delete * From tabele1 .... Fehler

    Hallo,

    ich habe eine einfache Prozedur geschrieben die alle Einträge einer Tabelle löschen soll die älter als 1 Monat sind und der Status (Spalte) auf processed ist. Also:

    CREATE OR REPLACE PROCEDURE delete_all_entries
    IS
    BEGIN
    DELETE FROM tabelle1 WHERE last_date > (SYSDATE - interval '1' month) AND (status = 'processed');
    END;

    Das frist er aber nicht. Wenn ich nach dem DELETE ein * hinsetze bekomme ich den Fehler:

    Syntax Error, expected:

    identifier

    paren_expr_list

    (

    Muss hir unbedingt auch eine SELECT Anweisung rein. oder?.

    Danke für jede Info!

    P.S. Bin noch Anfänger

  • #2
    Was ist denn die Fehlermeldung wenn Du den Stern weg lässt? Was genau frisst er da nicht? Dass nach DELETE kein * steht ist auch logisch. Im Endeffekt kommt das * ja aus einem SELECT und dort sagst Du dass Du alle Spalten haben möchtest. Bei einem DELETE macht das allerdings keinen Sinn. Entweder du löschst den Datensatz oder Du löschst ihn nicht. Spalten machen da keinen Sinn.

    Comment


    • #3
      Bin das nur ich oder ist eine Prozedur die delete_all_entries heißt aber scheinbar nur Datensätze eines bestimmten Zeitraums mit einem bestimmten Status löscht nicht eh irgendwie ein Lüge

      Comment


      • #4
        Die Prozedur mit dem gelogenen Namen sollte funktionieren, hier ein kleines Beispiel, das Du nächstes Mal selbst mitgeben kannst
        Code:
        DROP   TABLE tabelle1;
        
        CREATE TABLE tabelle1
         (last_date DATE,
          status    VARCHAR2(20));
        /
        
        INSERT INTO tabelle1 VALUES (to_date('12.08.2012','DD.MM.YYYY'), 'processed');
        INSERT INTO tabelle1 VALUES (to_date('12.08.2012','DD.MM.YYYY'), 'open');
        
        INSERT INTO tabelle1 VALUES (to_date('13.08.2012','DD.MM.YYYY'), 'processed');
        INSERT INTO tabelle1 VALUES (to_date('13.08.2012','DD.MM.YYYY'), 'open');
        
        INSERT INTO tabelle1 VALUES (to_date('12.09.2012','DD.MM.YYYY'), 'processed');
        INSERT INTO tabelle1 VALUES (to_date('12.09.2012','DD.MM.YYYY'), 'open');
        
        COMMIT;
        
        CREATE OR REPLACE PROCEDURE delete_all_entries
        IS
          BEGIN
          DELETE FROM tabelle1 WHERE last_date > (SYSDATE - interval '1' month) AND (status = 'processed');
        END;
        
        SHOW ERRORS
        
        exec delete_all_entries;
        
        SELECT * FROM tabelle1;
        
        
        ********************
        
        LAST_DATE STATUS              
        --------- --------------------
        12.08.2012	processed
        12.08.2012	open
        13.08.2012	open
        12.09.2012	open

        Comment

        Working...
        X