PL/SQL For Schleife UPDATE statement syntax error

canberkcelik

Benutzer
Beiträge
7
Hallo Leute,

Ich will gerne z.B mein KW_01(Dropdown) bis KW_03 (Dropdown) nach KW_04(Dropdown) bis KW_06 (Dropdown) verschieben. Ich habe 53 column in eine Tabelle. Ich habe code geschrieben(siehe unten) aber funktioniert leider nicht richtig. Er macht sowas , wenn ich code starte.

Outer Loop counter is kw_04 Inner Loop counter is 1
Outer Loop counter is kw_04 Inner Loop counter is 2
Outer Loop counter is kw_04 Inner Loop counter is 3
Outer Loop counter is kw_05 Inner Loop counter is 1
Outer Loop counter is kw_05 Inner Loop counter is 2
Outer Loop counter is kw_05 Inner Loop counter is 3
Outer Loop counter is kw_06 Inner Loop counter is 1
Outer Loop counter is kw_06 Inner Loop counter is 2
Outer Loop counter is kw_06 Inner Loop counter is 3

KW_04,KW_05 und KW_06 ändert leider immer nach 3. Wie kann ich das Problem beheben? Vielen dank

WERTE: KW_01: 1, KW_02: 2, KW_03:3, KW_4:0, KW_05:0 und KW_06:0






DECLARE


plsql VARCHAR2(500);

BEGIN

For i in (SELECT COLUMN_ID FROM ALSI_BEDARFSPLANUNG
UNPIVOT
(COLUMN_VALUE
FOR COLUMN_ID IN ("KW_01", "KW_02", "KW_03", "KW_04", "KW_05", "KW_06"))
WHERE COLUMN_ID BETWEEN 'KW_04' AND 'KW_06' and ID = 1) LOOP

FOR o in (SELECT COLUMN_VALUE FROM ALSI_BEDARFSPLANUNG
UNPIVOT
(COLUMN_VALUE
FOR COLUMN_ID IN ("KW_01", "KW_02", "KW_03", "KW_04", "KW_05", "KW_06"))
WHERE COLUMN_ID BETWEEN 'KW_01' AND 'KW_03' and ID = 1)
LOOP

plsql := ' UPDATE ALSI_BEDARFSPLANUNG SET ' || i.COLUMN_ID || ' = ' || o.COLUMN_VALUE || ' where ID = 1 ';
EXECUTE IMMEDIATE plsql;
END LOOP;
END LOOP;

END;
 
Werbung:
Wenn Du das richtig machen würdest (siehe anderer Thread von heute), wäre es trivial:

Code:
test=# create table canberkcelik (id serial primary key, kw int, val int);
CREATE TABLE
test=*# insert into canberkcelik select s, s, random()*100 from generate_series(1,5) s;
INSERT 0 5
test=*# select * from canberkcelik;
 id | kw | val
----+----+-----
  1 |  1 |  33
  2 |  2 |  48
  3 |  3 |  20
  4 |  4 |  22
  5 |  5 |  32
(5 rows)

test=*# update canberkcelik set kw=kw+3 where kw in (3,4,5);
UPDATE 3
test=*# select * from canberkcelik;
 id | kw | val
----+----+-----
  1 |  1 |  33
  2 |  2 |  48
  3 |  6 |  20
  4 |  7 |  22
  5 |  8 |  32
(5 rows)

test=*#
 
Ich habe fast 100.000daten für z.B. KW_1. Das war ganz andere Frage. Hast du fehler gefunden oder nicht? danke
 

Anhänge

  • kw2.PNG
    kw2.PNG
    7,7 KB · Aufrufe: 4
Na gut...

Code:
test=# create table foo(id int primary key, kw1 int, kw2 int, kw3 int, kw4 int, kw5 int, kw6 int, kw7 int, kw8 int, kw9 int);
CREATE TABLE
test=*# insert into foo (id, kw3,kw4, kw5) values (1, 10,11,12);
INSERT 0 1
test=*# select * from foo;
 id | kw1 | kw2 | kw3 | kw4 | kw5 | kw6 | kw7 | kw8 | kw9
----+-----+-----+-----+-----+-----+-----+-----+-----+-----
  1 |     |     |  10 |  11 |  12 |     |     |     |   
(1 row)

test=*# with x as (select kw3,kw4,kw5 from foo where id = 1), y as (update foo set (kw3,kw4,kw5) = (null,null,null) where id = 1) update foo set (kw6,kw7,kw8) = (select * from x) where id = 1;
UPDATE 1
test=*# select * from foo;
 id | kw1 | kw2 | kw3 | kw4 | kw5 | kw6 | kw7 | kw8 | kw9
----+-----+-----+-----+-----+-----+-----+-----+-----+-----
  1 |     |     |  10 |  11 |  12 |  10 |  11 |  12 |   
(1 row)

test=*# rollback;
ROLLBACK
test=# create table foo(id int primary key, kw1 int, kw2 int, kw3 int, kw4 int, kw5 int, kw6 int, kw7 int, kw8 int, kw9 int);
CREATE TABLE
test=*# insert into foo (id, kw3,kw4, kw5) values (1, 10,11,12);
INSERT 0 1
test=*# select * from foo;
 id | kw1 | kw2 | kw3 | kw4 | kw5 | kw6 | kw7 | kw8 | kw9
----+-----+-----+-----+-----+-----+-----+-----+-----+-----
  1 |     |     |  10 |  11 |  12 |     |     |     |   
(1 row)

test=*# with x as (select kw3,kw4,kw5 from foo where id = 1) update foo set (kw3,kw4,kw5)=(null,null,null), (kw6,kw7,kw8) = (select * from x) where id = 1;
UPDATE 1
test=*# select * from foo;
 id | kw1 | kw2 | kw3 | kw4 | kw5 | kw6 | kw7 | kw8 | kw9
----+-----+-----+-----+-----+-----+-----+-----+-----+-----
  1 |     |     |     |     |     |  10 |  11 |  12 |   
(1 row)

test=*#

Suche Dir aus, ob Du die Einträge aus (kw3,kw4,kw5) nach (kw6,kw7,kw8) kopieren oder verschieben willst. Have fun.
 
Na gut...

Code:
test=# create table foo(id int primary key, kw1 int, kw2 int, kw3 int, kw4 int, kw5 int, kw6 int, kw7 int, kw8 int, kw9 int);
CREATE TABLE
test=*# insert into foo (id, kw3,kw4, kw5) values (1, 10,11,12);
INSERT 0 1
test=*# select * from foo;
 id | kw1 | kw2 | kw3 | kw4 | kw5 | kw6 | kw7 | kw8 | kw9
----+-----+-----+-----+-----+-----+-----+-----+-----+-----
  1 |     |     |  10 |  11 |  12 |     |     |     |
(1 row)

test=*# with x as (select kw3,kw4,kw5 from foo where id = 1), y as (update foo set (kw3,kw4,kw5) = (null,null,null) where id = 1) update foo set (kw6,kw7,kw8) = (select * from x) where id = 1;
UPDATE 1
test=*# select * from foo;
 id | kw1 | kw2 | kw3 | kw4 | kw5 | kw6 | kw7 | kw8 | kw9
----+-----+-----+-----+-----+-----+-----+-----+-----+-----
  1 |     |     |  10 |  11 |  12 |  10 |  11 |  12 |
(1 row)

test=*# rollback;
ROLLBACK
test=# create table foo(id int primary key, kw1 int, kw2 int, kw3 int, kw4 int, kw5 int, kw6 int, kw7 int, kw8 int, kw9 int);
CREATE TABLE
test=*# insert into foo (id, kw3,kw4, kw5) values (1, 10,11,12);
INSERT 0 1
test=*# select * from foo;
 id | kw1 | kw2 | kw3 | kw4 | kw5 | kw6 | kw7 | kw8 | kw9
----+-----+-----+-----+-----+-----+-----+-----+-----+-----
  1 |     |     |  10 |  11 |  12 |     |     |     |
(1 row)

test=*# with x as (select kw3,kw4,kw5 from foo where id = 1) update foo set (kw3,kw4,kw5)=(null,null,null), (kw6,kw7,kw8) = (select * from x) where id = 1;
UPDATE 1
test=*# select * from foo;
 id | kw1 | kw2 | kw3 | kw4 | kw5 | kw6 | kw7 | kw8 | kw9
----+-----+-----+-----+-----+-----+-----+-----+-----+-----
  1 |     |     |     |     |     |  10 |  11 |  12 |
(1 row)

test=*#

Suche Dir aus, ob Du die Einträge aus (kw3,kw4,kw5) nach (kw6,kw7,kw8) kopieren oder verschieben willst. Have fun.
Danke für Antwort aber Wieso hast du wieder statisch gemacht? Es kann sein, dass der user zwischen kw1 und kw21 verschieben möchte.
 
Zuletzt bearbeitet von einem Moderator:
Werbung:
Zurück
Oben