Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

In SQL-variable mehr als 1 Ergebnis?

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von shakeya, 12 Juli 2012.

  1. shakeya

    shakeya Neuer Benutzer

    Hallo,

    ich weiß nun echt nicht mehr was ich machen soll. Und zwar habe ich eine stored_Procedure angelegt die einen User, samt seiner Bestellung löschen soll:

    Code:
    -- --------------------------------------------------------------------------------
    -- Routine DDL
    -- Note: comments before and after the routine body will not be stored by the server
    -- --------------------------------------------------------------------------------
    DELIMITER $$
     
    CREATE DEFINER=`dapro04`@`%` PROCEDURE `StoredProcedure_DELETEUSER`(IN custID INT(5))
    BEGIN
        DECLARE TempOrderID INT;
        DECLARE counter INT;
        SELECT COUNT(*) INTO counter FROM order1 WHERE order1.CustomerID = custID;
     
        WHILE counter > 0 DO 
    [COLOR=#ff0000]    SELECT OrderID INTO TempOrderID FROM order1 WHERE CustomerID = custID;  [/COLOR]
        DELETE FROM payment WHERE payment.OrderID = TempOrderID;
        DELETE FROM order_Detail WHERE order_Detail.OrderID = TempOrderID;
        DELETE FROM order1 WHERE order1.OrderID = TempOrderID;
        SELECT COUNT(*) INTO counter FROM order1 WHERE order1.CustomerID = custID;
        END WHILE;
     
        DELETE FROM customer WHERE customer.CustomerID = custID;
    END
    
    D.h. in der Rot markierten Zeile, versucht er sich die OrderIDs zu ziehen welche eben auf die jeweilige CustomerID passen. Nun kommen dort mehrere OrderIDs, deshalb kommt immer ein Fehler. Gibt es sowas wie Arrays in SQL ? Ich bin leider nicht fündig geworden... wie kann ich das Problem lösen?

    Bitte entschuldigt diese Anfängerfrage...

    Grüße,
    Shakeya

    EDIT: ok, es gibt wohl keine Arrays. Könnte ich irgendwie festlegen, dass er wenigstens die erste OrderID die er findet, in die Variable läd.. und das immer so weiter bis einfach keine Einträge mehr gefunden werden? Geht das?
     
  2. ukulele

    ukulele Datenbank-Guru

    Richtig, Arrays gibts nicht. Du kannst natürlich eine Tabelle anlegen, im wesentlichen ist das ja nichts anderes.

    Mit LIMIT 1 müsstest du problemlos immer genau einen Datensatz auswählen können.
    Code:
    SELECT    *
    FROM    tabelle
    WHERE    1 = 1
    LIMIT 1
    Du kannst aber auch (in der richtigen Reihenfolge) alles in einer Anweisung Löschen. Es sei denn du arbeitest mit Triggern oder Constraints, die so verschachtelt sind das die DB das nicht zuläßt. Du musst natürlich erst die abhängigen Datensätze (payment, orderdetail) löschen und dann die in der Haupttabelle (order1).

    Code:
    -- --------------------------------------------------------------------------------
    -- Routine DDL
    -- Note: comments before and after the routine body will not be stored by the server
    -- --------------------------------------------------------------------------------
    DELIMITER $$
     
    CREATE DEFINER=`dapro04`@`%` PROCEDURE `StoredProcedure_DELETEUSER`(IN custID INT(5))
    BEGIN
        DELETE FROM payment WHERE payment.OrderID IN ( SELECT OrderID FROM order1 WHERE CustomerID = custID )
        DELETE FROM order_Detail WHERE order_Detail.OrderID IN ( SELECT OrderID FROM order1 WHERE CustomerID = custID )
        DELETE FROM order1 WHERE order1.CustomerID = custID
     
        END WHILE
     
        DELETE F
    so in etwa
     
    PLSQL_SQL gefällt das.
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden