Webmaster Forum Logo Part 1 Webmaster Forum Logo Part 2
Webmaster Forum Logo Part 3
     
 
  :: Anmeldung

Benutzername:

Registrierung...

Passwort:

Passwort vergessen?

angemeldet bleiben


  
  :: Umfrage
Welche sozialen Netzwerke benutzt du regelmäßig?

 Facebook
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 73%
 keines
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 22%
 Google+
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 19%
 Twitter
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 11%
 Xing
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 6%
 schülerVZ
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 6%
 meinVZ
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 4%
 studiVZ
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 4%
 MySpace
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 2%
 LinkedIn
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 2%

 ges. 393 Stimmen
 
  :: Buttons

Valid XHTML 1.0 Transitional

OnkelJürgen

Moderator

Dabei seit: 30.12.2002

Beiträge: 1 719

 

1 Zum Seitenanfang

Sonntag, 25. Januar 2009, 01:22

PL/SQL Subselect im UPDATE

Hallo,

folgendes Probelm: Ich sitze hier an meiner Oracle-Datenbank und bekomme es einfach nicht hin, folgendes SELECT liefert mir die IDs, die ich UPDATEN möchte:

MySQL-Abfrage(n)

1
SELECT a.datnr FROM dbp_datentraeger a, dbp_verleih_enthaelt b WHERE b.datnr = a.datnr AND b.VNR=62;


Dabei kann dieses SELECT auch mehrere Zeilen zurückgeben, die alle aktualisiert werden sollen, quasi so:

MySQL-Abfrage(n)

1
UPDATE dbp_datentraeger SET vanz = vanz-1 WHERE datnr=(SELECT a.datnr FROM dbp_datentraeger a, dbp_verleih_enthaelt b WHERE b.datnr = a.datnr AND b.vnr=62);


Das funktioniert aber nur solange nur eine Zeile zurückgegeben wird, sind es mehr kommt ein Fehler. Hat irgendwer eine Idee, wie man das UPDATE sonst gestalten könnte? Habe es auch schon mit einem Cursor probiert, aber aus irgendeinem Grund durchläuft er dann die Schliefe nichtmal einmal.

Beste Grüße,

OnkelJürgen

Edit:

Okay, hat sich erledigt folgendes funktioiniert, aber der doofe APEX-Client hat es nich korrekt angezeigt.

MySQL-Abfrage(n)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
declare

cursor cur is 
    SELECT b.datnr AS datnr FROM dbp_datentraeger a, dbp_verleih_enthaelt b WHERE b.datnr = a.datnr AND b.VNR=62 for UPDATE of a.VANZ;
    datnr DBP_DATENTRAEGER.DATNR%type;
    
    rec cur%rowtype;

begin
  for rec in cur loop
    update DBP_DATENTRAEGER a SET a.VANZ=a.VANZ-1 WHERE current of cur;

  end loop;

end;
Auf jede Frage gibt es eine Antwort, man muss nur lange genug danach suchen.


z.B. auf www.netscripter.de :-P

Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von »OnkelJürgen« (25. Januar 2009, 01:40)

 

MartyMcFly

Foren Gott

Dabei seit: 04.06.2003

Beiträge: 3 137

 

2 Zum Seitenanfang

Sonntag, 25. Januar 2009, 12:54

Es muss auch nicht

Quellcode

1
UPDATE dbp_datentraeger SET vanz = vanz-1 WHERE datnr=(SELECT a.datnr FROM dbp_datentraeger a, dbp_verleih_enthaelt b WHERE b.datnr = a.datnr AND b.vnr=62);

heissen, sondern

Quellcode

1
UPDATE dbp_datentraeger SET vanz = vanz-1 WHERE datnr in (SELECT a.datnr FROM dbp_datentraeger a, dbp_verleih_enthaelt b WHERE b.datnr = a.datnr AND b.vnr=62);


Gruss
Marty
 

OnkelJürgen

Moderator

Dabei seit: 30.12.2002

Beiträge: 1 719

 

3 Zum Seitenanfang

Sonntag, 25. Januar 2009, 13:29

Ach okay, danke. :)

Das IN war mir noch nicht bekannt ... muss ich glatt mal ausprobieren, wenn der elendige Server mal wieder läuft. Mittlerweile geht da gar nichts mehr.

Grüße,

OnkelJürgen
Auf jede Frage gibt es eine Antwort, man muss nur lange genug danach suchen.


z.B. auf www.netscripter.de :-P