Smudla

CV4 DB2

Nov 4th, 2015
48
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PL/SQL 4.24 KB | None | 0 0
  1. CREATE TABLE cv4_trpaslici_plat(id_trpaslika NUMBER(2,0),plat NUMBER(8,2));
  2. /
  3.  
  4. CREATE OR REPLACE
  5. PROCEDURE cv4_NASTAV_PLATY AS
  6.  
  7.   CURSOR c_trpaslici IS
  8.     SELECT
  9.       id_trpaslika,
  10.       vyska,
  11.       SUM(skutecnost)
  12.     FROM
  13.       A_O_SNEHURCE.trpaslici
  14.       JOIN A_O_SNEHURCE.tezby USING(id_trpaslika)
  15.     WHERE
  16.       den BETWEEN TO_DATE('5.2.2012','DD.MM.YYYY') AND TO_DATE('25.2.2012','DD.MM.YYYY')
  17.     GROUP BY
  18.       id_trpaslika, vyska;
  19.  
  20.   i_id_trpaslika A_O_SNEHURCE.trpaslici.id_trpaslika%TYPE;
  21.   i_vyska A_O_SNEHURCE.trpaslici.vyska%TYPE;
  22.   i_vytezeno NUMBER(6,0);
  23.  
  24.   i_vydaje NUMBER(8,2) DEFAULT 0;
  25.  
  26. BEGIN
  27.  
  28.   DELETE FROM cv4_trpaslici_plat;
  29.  
  30.   OPEN c_trpaslici;
  31.   LOOP
  32.     FETCH c_trpaslici INTO i_id_trpaslika, i_vyska, i_vytezeno;
  33.     EXIT WHEN c_trpaslici%NOTFOUND;
  34.    
  35.     IF i_vyska < 110 THEN
  36.       i_vydaje := i_vydaje + (i_vytezeno*1.25) + 30;
  37.       INSERT INTO cv4_trpaslici_plat(id_trpaslika,plat) VALUES (i_id_trpaslika, (i_vytezeno*1.25) + 30);
  38.     ELSE
  39.       i_vydaje := i_vydaje + (i_vytezeno*1.25);
  40.       INSERT INTO cv4_trpaslici_plat(id_trpaslika,plat) VALUES (i_id_trpaslika, (i_vytezeno*1.25));
  41.     END IF;
  42.    
  43.   END LOOP;
  44.   CLOSE c_trpaslici;
  45.  
  46.   COMMIT;
  47.  
  48.   DBMS_OUTPUT.put_line('Výdaje: ' || i_vydaje);
  49.  
  50. END cv4_NASTAV_PLATY;
  51. /
  52.  
  53. --příklad III:
  54. CREATE TABLE cv4_trpaslici_vlastnosti(jmeno VARCHAR2(20), vlastnosti VARCHAR2(100));
  55. /
  56.  
  57. CREATE OR REPLACE
  58. PROCEDURE cv4_TRPASLIK_VLASTNOSTI AS
  59.  
  60.   i_vlastnosti VARCHAR2(100);
  61.  
  62. BEGIN
  63.  
  64.   DELETE FROM cv4_trpaslici_vlastnosti;
  65.  
  66.   FOR c_trp IN (SELECT id_trpaslika, jmeno FROM A_O_SNEHURCE.trpaslici)
  67.   LOOP
  68.    
  69.     i_vlastnosti := NULL;
  70.    
  71.     FOR c_vlastnosti IN (SELECT vlastnost FROM A_O_SNEHURCE.POZNATKY JOIN A_O_SNEHURCE.VLASTNOSTI USING(ID_VLASTNOSTI) WHERE ID_TRPASLIKA = c_trp.id_trpaslika)
  72.     LOOP
  73.       i_vlastnosti := i_vlastnosti || c_vlastnosti.vlastnost || ';';
  74.     END LOOP;
  75.    
  76.     INSERT INTO cv4_trpaslici_vlastnosti(jmeno,vlastnosti) VALUES (c_trp.jmeno,i_vlastnosti);
  77.    
  78.   END LOOP;
  79.  
  80.   COMMIT;
  81.  
  82. END cv4_TRPASLIK_VLASTNOSTI;
  83. /
  84.  
  85. CREATE OR REPLACE PROCEDURE cv4_TRPASLICI_ZEBRICEK
  86. (
  87.   OD IN VARCHAR2  
  88. , DO IN VARCHAR2  
  89. ) AS
  90.   i NUMBER := 0;
  91. BEGIN
  92.  
  93.   DBMS_OUTPUT.put_line('Výpis za období ' || od || ' - ' || DO || ':');
  94.  
  95.   FOR X IN (
  96.     SELECT
  97.       jmeno, SUM(skutecnost) sum_skut
  98.     FROM
  99.       A_O_SNEHURCE.trpaslici
  100.       JOIN A_O_SNEHURCE.tezby USING(id_trpaslika)
  101.     WHERE
  102.       den >= TO_DATE(od,'DD.MM.YYYY')
  103.       AND den <= TO_DATE(DO,'DD.MM.YYYY')
  104.     GROUP BY
  105.       jmeno
  106.     ORDER BY 2 DESC
  107.   )
  108.   LOOP
  109.     i := i + 1;
  110.    
  111.     DBMS_OUTPUT.put_line(i || '. ' || x.jmeno);
  112.    
  113.     -- vypisují se jen první tři    
  114.     EXIT WHEN i >= 3;
  115.   END LOOP;
  116. END cv4_TRPASLICI_ZEBRICEK;
  117. /
  118.  
  119. CREATE OR REPLACE
  120. PROCEDURE cv4_delete_script(p_schema VARCHAR2) AS
  121.  
  122.   CURSOR c_script IS
  123.     SELECT
  124.       'drop table '||owner||'.'||table_name||' cascade constraints;'
  125.     FROM
  126.       all_tables
  127.     WHERE
  128.       UPPER(owner) = UPPER(p_schema)
  129.     ORDER BY
  130.       table_name;
  131.  
  132.   i_script_row VARCHAR2(500);
  133.  
  134. BEGIN
  135.  
  136.   OPEN c_script;
  137.   LOOP
  138.     FETCH c_script INTO i_script_row;
  139.     EXIT WHEN c_script%NOTFOUND;
  140.    
  141.     DBMS_OUTPUT.put_line(i_script_row);
  142.    
  143.   END LOOP;
  144.   CLOSE c_script;
  145.  
  146. END cv4_delete_script;
  147. /
  148.  
  149. CREATE OR REPLACE
  150. FUNCTION cv4_POMER_PLAT
  151. (
  152.   P_MZDA IN NUMBER  
  153. , P_ODDELENI_ID IN NUMBER DEFAULT NULL
  154. ) RETURN VARCHAR2
  155. AS
  156.   i_vysledek NUMBER;
  157. BEGIN
  158.  
  159.   SELECT
  160.     p_mzda/(SUM(MZDA)/COUNT(*)) * 100
  161.   INTO
  162.     i_vysledek
  163.   FROM
  164.     A_HR.zamestnanci
  165.   WHERE
  166.     ODDELENI_ID = NVL(P_ODDELENI_ID,ODDELENI_ID);
  167.    
  168.   RETURN ROUND(i_vysledek,2) || ' %';
  169.  
  170. EXCEPTION
  171.     WHEN OTHERS THEN
  172.       RETURN 'Chyba výpočtu.';
  173. END cv4_POMER_PLAT;
  174. /
  175.  
  176.  
  177. -- cv4_2:
  178.  
  179. CREATE OR REPLACE
  180. FUNCTION cv4_vekova_skupina(p_datum DATE) RETURN VARCHAR2
  181. AS
  182.  
  183.   i_vek NUMBER;
  184.  
  185. BEGIN
  186.  
  187.   i_vek := (SYSDATE - p_datum) / 365;
  188.  
  189.   CASE
  190.     WHEN i_vek >= 0 AND i_vek < 18 THEN
  191.       RETURN 'Dítě';
  192.     WHEN i_vek >= 18 AND i_vek < 65 THEN
  193.       RETURN 'Dospělý';
  194.     WHEN i_vek >= 65 THEN
  195.       RETURN 'Důchodce';
  196.     ELSE
  197.       RETURN 'Neznámá';
  198.   END CASE;
  199.    
  200.  
  201. END cv4_vekova_skupina;
  202. /
Add Comment
Please, Sign In to add comment