获取sql列的值并将其用作列名

slmsl1lt  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(359)

是否可以从列中获取值并将其用作列名。

  1. CREATE OR REPLACE PROCEDURE INSERT_INTO_MODELLBAU IS
  2. BEGIN
  3. MERGE INTO modellbau k
  4. USING (
  5. SELECT jahr,
  6. **monat**
  7. FROM modell)
  8. m
  9. ON (k.jahr = m.jahr)
  10. WHEN MATCHED THEN
  11. UPDATE SET k."monat" = m.menge
  12. WHEN NOT MATCHED THEN
  13. INSERT (jahr, valueOf('monat')) <---
  14. VALUES (m.jahr, m.menge);
  15. end;

我的目标是从'monat'获取值,并将其用作update语句中的列名。“monat”列存储列名。

falq053o

falq053o1#

列出可能的列并使用 CASE 声明:

  1. CREATE OR REPLACE PROCEDURE INSERT_INTO_MODELLBAU IS
  2. BEGIN
  3. MERGE INTO al_modellbauk k
  4. USING (
  5. SELECT bereich,
  6. jahr,
  7. quelle,
  8. einheit,
  9. menge,
  10. monat
  11. FROM al_modellbau
  12. ) m
  13. ON (k.jahr = m.jahr AND k.quelle = m.quelle)
  14. WHEN MATCHED THEN
  15. UPDATE
  16. SET k.column1 = CASE m.monat WHEN 'COLUMN1' THEN m.menge ELSE k.column1 END,
  17. k.column2 = CASE m.monat WHEN 'COLUMN2' THEN m.menge ELSE k.column2 END,
  18. k.column3 = CASE m.monat WHEN 'COLUMN3' THEN m.menge ELSE k.column3 END
  19. WHEN NOT MATCHED THEN
  20. INSERT (
  21. bereich,
  22. jahr,
  23. quelle,
  24. einheit,
  25. column1,
  26. column2,
  27. column3
  28. )
  29. VALUES (
  30. m.bereich,
  31. m.jahr,
  32. m.quelle,
  33. m.einheit,
  34. CASE m.monat WHEN 'COLUMN1' THEN m.menge ELSE NULL END,
  35. CASE m.monat WHEN 'COLUMN2' THEN m.menge ELSE NULL END,
  36. CASE m.monat WHEN 'COLUMN3' THEN m.menge ELSE NULL END
  37. );
  38. end;
  39. /

另外,你(通常)不应该把 COMMIT 语句,而应该 COMMIT 从调用过程as的语句中,可以将多个过程链接在一起 COMMIT 或者 ROLLBACK 作为一个整体而不是单独的。

展开查看全部

相关问题