Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on Jan 16th, 2012  |  syntax: PL/SQL  |  size: 1.14 KB  |  hits: 78  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. CREATE OR REPLACE
  2. FUNCTION ZK_HR_BONUS(P_ID_ZAMESTNANCE NUMBER) RETURN NUMBER AS
  3. provize NUMBER;
  4. bonus NUMBER;
  5. mzda NUMBER;
  6. roky NUMBER;
  7. region VARCHAR(500);
  8. jeTam NUMBER;
  9.  
  10. CURSOR k1 IS SELECT ROUND((sysdate-datum_nastup)/365.25,0) roky, mzda, provize_procent, region_nazev FROM a_hr.zamestnanci
  11. join a_hr.oddeleni ON a_hr.oddeleni.oddeleni_id = a_hr.zamestnanci.oddeleni_id
  12. join a_hr.adresy ON a_hr.adresy.adresa_id = a_hr.oddeleni.adresa_id
  13. join a_hr.zeme ON a_hr.zeme.zeme_id = a_hr.adresy.zeme_id
  14. join a_hr.regiony ON a_hr.regiony.region_id = a_hr.zeme.region_id
  15. WHERE zamestnanec_id = P_ID_ZAMESTNANCE;
  16.  
  17. CURSOR k2 IS SELECT COUNT(*) FROM A_HR.zamestnanci WHERE zamestnanec_id = P_ID_ZAMESTNANCE;
  18.  
  19. BEGIN
  20.  
  21. OPEN k2;
  22. FETCH k2 INTO jeTam;
  23.  
  24. IF(jeTam = 0) THEN
  25. raise_application_error(-20001,'ID osoby neni v pozadovanem rozmezi');
  26. ELSE
  27.  
  28.   OPEN k1;
  29.       FETCH k1 INTO roky, mzda, provize, region;
  30.       IF(roky > 13 OR provize != NULL OR region = 'Europe') THEN
  31.         RETURN NULL;
  32.       END IF;
  33.      
  34.       RETURN ROUND((mzda/10) * roky);
  35.   CLOSE k1;  
  36.  
  37. END IF;
  38.  
  39. END ZK_HR_BONUS;
  40.  
  41.  
  42. SELECT ZK_HR_BONUS(100) FROM dual;