Kyaria

DYNAMISCHES PL/SQL

Apr 30th, 2018
332
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PL/SQL 1.57 KB | None | 0 0
  1. --dyn aufgabe no1
  2.  
  3. CREATE OR REPLACE FUNCTION calc_tab(tab IN VARCHAR2) RETURN NUMBER AS
  4.  
  5. tab_name VARCHAR2(255) := tab;
  6. counter NUMBER := 0;
  7.  
  8. BEGIN
  9.  
  10. EXECUTE IMMEDIATE 'SELECT count(*) from ' || tab_name INTO counter;
  11.  
  12. RETURN counter;
  13.  
  14. END;
  15.  
  16. DECLARE
  17. num_bert NUMBER := 0;
  18. str_string VARCHAR2(255) := 'customer';
  19. BEGIN
  20. num_bert := calc_tab(str_string);
  21. DBMS_OUTPUT.put_line(num_bert);
  22. END;
  23.  
  24. --dyn aufgabe no2
  25.  
  26. CREATE OR REPLACE PROCEDURE del_tab(tab IN VARCHAR2) AS
  27.  
  28. to_del_tab VARCHAR2(255) := tab;
  29.  
  30. BEGIN
  31.  
  32. FOR i IN (SELECT table_name FROM user_tables WHERE table_name LIKE to_del_tab) LOOP
  33.     EXECUTE IMMEDIATE 'DROP TABLE ' || i.table_name;
  34. END LOOP;
  35. END;
  36.  
  37. DECLARE
  38. tab_nam VARCHAR2(255) := 'OFF%';
  39. BEGIN
  40. del_tab(tab_nam);
  41. END;
  42.  
  43. -- dyn aufgabe no3
  44.  
  45. CREATE OR REPLACE PROCEDURE i_want_a_2(tab_name IN VARCHAR2, col_name IN VARCHAR2, val_in IN NUMBER) AS
  46.  
  47. tab VARCHAR2(255) := tab_name;
  48. col VARCHAR2(255) := col_name;
  49. val NUMBER := val_in;
  50.  
  51. num_bernd NUMBER := 0;
  52. calc_bernd NUMBER := 100;
  53.  
  54. tab_vorhanden NUMBER := 0;
  55.  
  56. BEGIN
  57.  
  58. EXECUTE IMMEDIATE 'SELECT ' || col || ' from ' || tab_name INTO num_bernd;
  59.  
  60. calc_bernd := calc_bernd + (val);
  61. calc_bernd := calc_bernd / 100;
  62.  
  63. num_bernd := num_bernd * calc_bernd;
  64.  
  65. EXECUTE IMMEDIATE 'UPDATE '|| tab ||' set ' || col || ' = ' || num_bernd;
  66.  
  67. EXCEPTION WHEN OTHERS THEN
  68.     DBMS_OUTPUT.put_line('WRONG INPUT, ' || SQLERRM);
  69.  
  70.  
  71. END;
  72.  
  73.  
  74. DECLARE
  75. val_tab VARCHAR2(255) := 'CALC';
  76. val_col VARCHAR2(255) := 'CALC_VdAL';
  77. val_calc NUMBER := 12;
  78. BEGIN
  79.     i_want_a_2(val_tab, val_col, val_calc);
  80. END;
Advertisement