Advertisement
Smudla

CV_8_spolecne

Dec 2nd, 2015
33
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PL/SQL 2.70 KB | None | 0 0
  1. CREATE PACKAGE CV9_DATUMY AS
  2.    FUNCTION datumy_rozdil(datum_od DATE, datum_do DATE, typ CHAR) RETURN NUMBER;
  3.    FUNCTION pracovni_den(datum DATE) RETURN NUMBER;
  4.    FUNCTION den_v_mesici(datum DATE, prvni NUMBER) RETURN DATE;
  5. END CV9_DATUMY;
  6.  
  7.  
  8. /*
  9. */
  10.  
  11. CREATE OR REPLACE PACKAGE BODY CV9_DATUMY AS
  12. /*
  13. function datumy_rozdil(datum_od DATE, datum_do DATE, typ CHAR)
  14. return number as
  15. v_difference NUMBER;
  16. begin
  17. if
  18. datum_od IS NOT NULL
  19. and datum_do is not null then
  20. SELECT round(to_date(datum_od)-to_date(datum_do),2) into v_difference FROM DUAL;
  21. else
  22. dbms_output.put_line('Error 20404, Spatne parametry!');
  23. end if;
  24. exception
  25. WHEN datum_od is NULL
  26. and datum_do is NULL  THEN
  27.       dbms_output.put_line('Error 20404, Spatne parametry!');
  28. end;
  29. return v_difference;
  30. end CV9_DATUMY;
  31. */
  32.  
  33. FUNCTION datumy_rozdil(datum_od DATE, datum_do DATE, typ CHAR)
  34. RETURN NUMBER AS
  35. v_difference NUMBER;
  36. BEGIN
  37. IF
  38. datum_od IS NOT NULL
  39. AND datum_do IS NOT NULL
  40. AND typ IN ('D','H','M','S') THEN
  41. v_difference:= datum_do-datum_od;
  42. IF typ = 'D' THEN
  43. RETURN ROUND(v_difference,2);
  44. ELSIF typ = 'H' THEN
  45. RETURN ROUND(v_difference*24,2);
  46. ELSIF typ = 'M' THEN
  47. RETURN ROUND(v_difference*24*60,2);
  48. ELSE RETURN ROUND(v_difference*24*60*60,2);
  49. END IF;
  50. ELSE
  51. raise_application_error(-20000,'Spatne parametry!');
  52. END IF;
  53. EXCEPTION
  54. WHEN OTHERS THEN
  55. RETURN NULL;
  56. END datumy_rozdil;
  57.  
  58. FUNCTION pracovni_den(datum DATE) RETURN NUMBER AS
  59. v_day_number NUMBER;
  60. BEGIN
  61. v_day_number := TO_NUMBER (TO_CHAR(datum,'D'));
  62. IF V_DAY_NUMBER BETWEEN 1 AND 5 THEN
  63. RETURN 1;
  64. ELSE RETURN 0;
  65. END IF;
  66. END pracovni_den;
  67.  
  68. FUNCTION den_v_mesici(datum DATE, prvni NUMBER) RETURN DATE
  69.  AS
  70. BEGIN
  71. IF prvni = 1 THEN
  72. RETURN TRUNC(datum,'M');
  73. ELSIF prvni = 0 THEN
  74. RETURN LAST_DAY(datum);
  75. ELSE RETURN NULL;
  76. RETURN NULL;
  77. END IF;
  78. EXCEPTION
  79. WHEN OTHERS THEN
  80. RETURN NULL;
  81. END den_v_mesici;
  82.  
  83. END CV9_DATUMY;
  84.  
  85. CREATE OR REPLACE
  86. PROCEDURE cv9_prodluz_varchar
  87. (P_TABULKA IN VARCHAR2, P_O_KOLIK IN NUMBER) AS
  88. i_sloupce VARCHAR2(1500);
  89. i_prikaz VARCHAR2(1500);
  90. i_pocet NUMBER(3,0) := 0;
  91. BEGIN
  92. FOR x IN (SELECT column_name, data_length FROM user_tab_columns WHERE LOWER(table_name) = LOWER(p_tabulka) AND data_type = 'VARCHAR2')
  93. LOOP
  94.   i_sloupce := i_sloupce || x.column_name || ' ' || 'Varchar2(' || TO_CHAR(x.data_length + p_o_kolik) || '),';
  95.   i_pocet := i_pocet + 1;
  96.   END LOOP;
  97. IF i_pocet > 0 THEN
  98.   i_prikaz := 'ALTER TABLE ' || p_tabulka || ' modify (' || RTRIM(i_sloupce, ',') || ')';
  99.   DBMS_OUTPUT.put_line(i_prikaz);
  100.   EXECUTE IMMEDIATE i_prikaz;
  101. END IF;
  102.   DBMS_OUTPUT.put_line('Modifikovano ' || i_pocet || ' sloupců tabulky ' || p_tabulka);
  103. EXCEPTION
  104.   WHEN OTHERS THEN
  105.   DBMS_OUTPUT.put_line(SQLERRM);
  106. END cv9_prodluz_varchar;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement