Advertisement
Bhaad

Drzymała czwartek

Jun 14th, 2018
49
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PL/SQL 12.29 KB | None | 0 0
  1. --ZADANIE 1--
  2. SELECT * FROM emp;
  3.  
  4. CREATE OR REPLACE PACKAGE PRAC AS
  5.   PROCEDURE DODAJ
  6. (
  7.   ID_PRAC NUMBER,
  8.   IMIE VARCHAR2,
  9.   ID_SZEF NUMBER,
  10.   PENSJA NUMBER,
  11.   ID_DZIALU NUMBER
  12. );
  13.  PROCEDURE ZWOLNIJ (
  14.  ID_PRAC NUMBER
  15.  );
  16. END PRAC;
  17.  
  18. -- body
  19.  
  20. CREATE OR REPLACE
  21. PACKAGE BODY PRAC AS
  22.  
  23.   PROCEDURE DODAJ
  24. (
  25.   ID_PRAC NUMBER,
  26.   IMIE VARCHAR2,
  27.   ID_SZEF NUMBER,
  28.   PENSJA NUMBER,
  29.   ID_DZIALU NUMBER
  30. ) AS
  31.   BEGIN
  32.     INSERT INTO emp(empno, ename, mgr, sal, deptno) VALUES (id_prac, imie, id_szef, pensja, id_dzialu);
  33.   END DODAJ;
  34.  
  35.   PROCEDURE zwolnij (
  36.  id_prac NUMBER
  37.  ) AS
  38.   BEGIN
  39.     DELETE FROM emp WHERE empno=id_prac;
  40.   END zwolnij;
  41.  
  42. END PRAC;
  43.  
  44. SELECT * FROM emp;
  45.  
  46. --run zwolnij
  47. DECLARE
  48.   ID_PRAC NUMBER;
  49. BEGIN
  50.   ID_PRAC := 7782;
  51.  
  52.   PRAC.ZWOLNIJ(
  53.     ID_PRAC => ID_PRAC
  54.   );
  55. END;
  56.  
  57. --run dodaj
  58. DECLARE
  59.   ID_PRAC NUMBER;
  60.   IMIE VARCHAR2(200);
  61.   ID_SZEF NUMBER;
  62.   PENSJA NUMBER;
  63.   ID_DZIALU NUMBER;
  64. BEGIN
  65.   ID_PRAC := 7728;
  66.   IMIE := 'QWERTY';
  67.   ID_SZEF := 7839;
  68.   PENSJA := 1000;
  69.   ID_DZIALU := 10;
  70.  
  71.   PRAC.DODAJ(
  72.     ID_PRAC => ID_PRAC,
  73.     IMIE => IMIE,
  74.     ID_SZEF => ID_SZEF,
  75.     PENSJA => PENSJA,
  76.     ID_DZIALU => ID_DZIALU
  77.   );
  78. END;
  79.  
  80. --ZADANIE 2--
  81.  
  82. CREATE OR REPLACE
  83. PACKAGE PAKIET2 AS
  84.  PROCEDURE PODNIES
  85. (
  86.   ID_PRAC IN NUMBER
  87. , SUMA IN NUMBER
  88. );
  89.  
  90. PROCEDURE PODNIES
  91. (
  92.    SUMA IN NUMBER
  93. );
  94. END PAKIET2;
  95.  
  96.  
  97. --body
  98.  
  99. CREATE OR REPLACE
  100. PACKAGE BODY PAKIET2 AS
  101.  
  102.   PROCEDURE PODNIES
  103. (
  104.   ID_PRAC IN NUMBER
  105. , SUMA IN NUMBER
  106. ) AS
  107.   BEGIN
  108.     UPDATE emp SET sal = sal+suma WHERE empno=id_prac;
  109.   END PODNIES;
  110.  
  111.   PROCEDURE PODNIES
  112. (
  113.    SUMA IN NUMBER
  114. ) AS
  115.   BEGIN
  116.      UPDATE emp SET sal = sal+suma;
  117.   END PODNIES;
  118.  
  119. END PAKIET2;
  120.  
  121. --run
  122.  
  123. SELECT * FROM emp;
  124.  
  125. DECLARE
  126.   ID_PRAC NUMBER;
  127.   SUMA NUMBER;
  128. BEGIN
  129.   ID_PRAC := 7782;
  130.   SUMA := 300;
  131.  
  132.   PAKIET2.PODNIES(
  133.     ID_PRAC => ID_PRAC,
  134.     SUMA => SUMA
  135.   );
  136. END;
  137.  
  138.  
  139. DECLARE
  140.   SUMA NUMBER;
  141. BEGIN
  142.   SUMA := 1000;
  143.  
  144.   PAKIET2.PODNIES(
  145.     SUMA => SUMA
  146.   );
  147. END;
  148.  
  149.  
  150.  
  151. --KURSOS NIEJAWNY--
  152.  
  153. INSERT INTO DEPT(DEPTNO, DNAME) VALUES (21, 'IMSI');
  154. INSERT INTO DEPT(DEPTNO, DNAME) VALUES (22, 'IMSI');
  155. INSERT INTO DEPT(DEPTNO, DNAME) VALUES (23, 'IMSI');
  156. INSERT INTO DEPT(DEPTNO, DNAME) VALUES (24, 'IMSI');
  157. COMMIT;
  158.        
  159. BEGIN
  160.         DELETE DEPT WHERE DNAME = 'IMSI';
  161.         IF SQL%FOUND THEN
  162.             DBMS_OUTPUT.PUT_LINE(SQL%ROWCOUNT || ' rekordy zostaly skasowane');
  163.         END IF;
  164.         COMMIT;
  165.     END;
  166.  
  167.  
  168. BEGIN
  169. INSERT INTO dept(deptno,dname) VALUES (22,'IMSI');
  170. IF SQL%FOUND THEN
  171. DBMS_OUTPUT.put_line(sql%rowcount ||'rekord zostal dodany');
  172. END IF;
  173. COMMIT;
  174. END;
  175.  
  176. SELECT * FROM dept;
  177.  
  178. --KURSOR JAWNY--
  179.  
  180. DECLARE  --zadeklarowanie kursora
  181.     CURSOR kur1 IS SELECT sal
  182.     FROM emp ORDER BY 1;
  183.       zm kur1%ROWTYPE;
  184.     BEGIN  --otwarcie kursora
  185.       OPEN kur1;
  186.     LOOP
  187.     FETCH kur1 INTO zm;
  188.     EXIT WHEN kur1%notfound;
  189.     DBMS_OUTPUT.put_line(zm.sal);
  190.     END LOOP;
  191.     CLOSE kur1;  --zakmięcie kursora
  192. END;
  193.  
  194.  
  195. --kursor z parametrem
  196. DECLARE
  197.     CURSOR kur1(n NUMBER) IS SELECT sal
  198.     FROM emp
  199.     WHERE sal>n ORDER BY 1;
  200.         zm kur1%ROWTYPE;
  201.     BEGIN
  202.         OPEN kur1(2000);
  203.     LOOP
  204.     FETCH kur1 INTO zm;
  205.     EXIT WHEN kur1%notfound;
  206.     DBMS_OUTPUT.put_line(zm.sal);
  207.     END LOOP;
  208.     CLOSE kur1;
  209. END;
  210.  
  211. --petla for loop dla kursora
  212.  
  213. DECLARE
  214.     CURSOR kur1 IS SELECT sal
  215.     FROM emp ORDER BY 1;
  216.     zm kur1%ROWTYPE;
  217.     BEGIN
  218.     FOR zm IN kur1
  219.     LOOP
  220.     DBMS_OUTPUT.put_line(zm.sal);
  221. --exit when kur1%notfound;
  222.     END LOOP;
  223. END;
  224.  
  225. --zad
  226. --za pomoca kursora zrealzowac,by w zaleznosciod nazwiska pracownika wyswietlany byl pracownik i dzial
  227. --w ktorym on pracuje (jesli jego nazwisko jest na litere od a do g) lub samo nazwisko pracownika.
  228.  
  229.  
  230. SET serveroutput ON
  231.  
  232. DECLARE
  233.     CURSOR  kur1(nazwisko VARCHAR) IS SELECT * FROM emp
  234.     WHERE nazwisko = ename ORDER BY SAL;
  235.     zm emp%ROWTYPE;
  236.     SIGN CHAR;
  237. BEGIN
  238.     OPEN kur1('ALLEN');
  239.     LOOP
  240.         FETCH kur1 INTO zm;
  241.         EXIT WHEN kur1%notfound;
  242.         IF SUBSTR(zm.ename, 1, 1)BETWEEN 'A' AND 'G' THEN
  243.           DBMS_OUTPUT.put_line(zm.ename || ' pensja ' || zm.sal || ' dep ' || zm.deptno);
  244.         ELSE
  245.           DBMS_OUTPUT.put_line(zm.ename);
  246.         END IF;
  247.     END LOOP;
  248.     CLOSE kur1;
  249. END;
  250.  
  251.  
  252.  
  253. ---------------------------------------
  254. DECLARE
  255.     CURSOR  kur1 IS SELECT * FROM emp;
  256.     zm emp%ROWTYPE;
  257.     SIGN CHAR;
  258.     sr1 NUMBER DEFAULT 0;
  259.     prow NUMBER DEFAULT 0;
  260. BEGIN
  261.     OPEN kur1;
  262.     LOOP
  263.         FETCH kur1 INTO zm;
  264.         EXIT WHEN kur1%notfound;
  265.         sr1:=sr1+zm.sal;
  266.         prow:=prow+zm.sal+NVL(zm.comm,0);
  267.         DBMS_OUTPUT.put_line('Pracownik ' || zm.ename || ' pensja ' || zm.sal || ' suma pensji '|| sr1 || ' suma pen z prow ' || prow);
  268.     END LOOP;
  269.     DBMS_OUTPUT.put_line('Suma pensji ' || sr1);
  270.     DBMS_OUTPUT.put_line('Suma pensji z prow ' || prow);
  271.     CLOSE kur1;
  272. END;
  273.  
  274.  
  275. /*
  276. W pakiecie zaozyc dwie procedury:
  277. 1- pierwsza ma podnosic o pensje danemu jako parametr wejsciowy pracownikowi (EMPNO) o wsp. podwyzki jako 2 parametr
  278.  
  279. 2- druga procedura, ktora w zaleznosci od podanego numeru jako atrybut wejsciowy ustala komu taka podwyzka dawana
  280. (wykorzystujemy w niej zdefiniowane kursory i piersza procedure)
  281. Jezeli podany atrybut wejsciowy to:
  282.  
  283. 1- wtedy wsp. podw. wynosi 1.3 Podnosimy pensje pracownikom, ktorzy zarabiaja w przedziale od 2000$ do 0$
  284. 2- wtedy wsp. podw. wynosi 1.2 Podnosimy pensje pracownikom, ktorzy zarabiaja w przedziale od 3000$ do 2000$
  285. 3- wtedy wsp. podw. wynosi 1.1 Podnosimy pensje pracownikom, ktorzy zarabiaja w przedziale od 4000$ do 3000$
  286. */
  287.  
  288. --SPECYFIKACJA PAKIETU
  289. CREATE OR REPLACE PACKAGE PA2 AS
  290.     PROCEDURE PODWYZKA (id_prac NUMBER, WSP NUMBER  DEFAULT 1.1);
  291.     PROCEDURE KOMU (NR NUMBER);
  292. END PA2;
  293.  
  294. --NAJPIERWSZ SPECYFIKACJA, PÓZNIEJ CIALO PAKIETU
  295.  
  296.  
  297. --CIALO PAKIETU
  298. CREATE OR REPLACE PACKAGE BODY PA2 AS
  299. PROCEDURE PODWYZKA(id_prac NUMBER, WSP NUMBER  DEFAULT 1.1) AS
  300. BEGIN
  301.  UPDATE EMP SET SAL=SAL*WSP WHERE EMPNO=id_prac;
  302.  END PODWYZKA;
  303.  
  304. PROCEDURE KOMU(NR NUMBER) AS
  305. n NUMBER(10);
  306. wsp NUMBER;
  307. CURSOR KUR1 (N NUMBER,N1 NUMBER) IS SELECT EMPNO, ENAME FROM EMP WHERE SAL < N AND  SAL> N1 ORDER BY 1;
  308. WYNIK KUR1%ROWTYPE;
  309. BEGIN
  310.     IF NR=1 THEN
  311.     WSP:=1.3;
  312.     OPEN KUR1(2000,1);
  313.     ELSIF NR=2 THEN
  314.     WSP:=1.2;
  315.     OPEN KUR1(3000,2000);
  316.     ELSIF NR =3 THEN
  317.     WSP:= 1.1;
  318.     OPEN KUR1(4000,3000);
  319.     END IF;
  320. LOOP
  321. FETCH KUR1 INTO WYNIK;
  322. EXIT WHEN KUR1%NOTFOUND;
  323. DBMS_OUTPUT.PUT_LINE(WYNIK.ENAME);
  324. PODWYZKA(WYNIK.EMPNO,WSP);
  325. END LOOP;
  326. CLOSE KUR1;
  327. END KOMU;
  328. END PA2;
  329.  
  330. DECLARE
  331.   NR NUMBER;
  332. BEGIN
  333.   NR := 2;
  334.  
  335.   PA2.KOMU(
  336.     NR => NR
  337.   );
  338. --rollback;
  339. END;
  340.  
  341.  
  342. -- zmienne kursorowe - ref kursory (ref cursor) (wskaźniki) to już bardziej obiektowe bazy danych
  343.  
  344. SET serveroutput ON;
  345.  
  346. DECLARE
  347.     TYPE rkur1 IS REF CURSOR;
  348.     kur1 rkur1;
  349.     zm1 emp.sal%TYPE;
  350.     zm2 emp.ename%TYPE;
  351. BEGIN
  352.     OPEN kur1 FOR SELECT ename,sal FROM emp  WHERE sal>2000 ORDER BY 2;
  353. LOOP
  354.     FETCH kur1 INTO zm2,zm1;
  355.     EXIT WHEN kur1%notfound;
  356.     DBMS_OUTPUT.PUT_LINE(zm1||'  '||zm2);
  357. END LOOP;
  358.     CLOSE kur1;
  359. END;
  360.  
  361.  
  362. ----PAKIET Z REF KURSOREM---------------------------------------
  363.  
  364. CREATE OR REPLACE PACKAGE EMP_OR_DEPT
  365. AS
  366.     TYPE CV_TYPE IS REF CURSOR;
  367.     PROCEDURE OPEN_CV(CV IN OUT CV_TYPE, TBL IN INTEGER);
  368. END EMP_OR_DEPT;
  369.  
  370.  
  371. ----
  372. CREATE OR REPLACE PACKAGE BODY EMP_OR_DEPT
  373. AS
  374.     PROCEDURE OPEN_CV(CV IN OUT CV_TYPE, TBL IN INTEGER) IS
  375.     BEGIN
  376.         IF TBL = 1 THEN
  377.             OPEN CV FOR SELECT * FROM DEPT;
  378.         ELSIF TBL = 2 THEN
  379.             OPEN CV FOR SELECT * FROM EMP;
  380.         END IF;
  381.     END OPEN_CV;
  382. END EMP_OR_DEPT;
  383.  
  384.  
  385. ----
  386. DECLARE
  387.     CV EMP_OR_DEPT.CV_TYPE;
  388.     DEPT_REC DEPT%ROWTYPE;
  389.     EMP_REC EMP%ROWTYPE;
  390. BEGIN
  391.     EMP_OR_DEPT.OPEN_CV(CV, 1);
  392.     FETCH CV INTO DEPT_REC;
  393.     DBMS_OUTPUT.PUT_LINE(DEPT_REC.DEPTNO || ' ' || DEPT_REC.DNAME);
  394.     CLOSE CV;
  395.    
  396.     EMP_OR_DEPT.OPEN_CV(CV, 2);
  397.     FETCH CV INTO EMP_REC;
  398.     DBMS_OUTPUT.PUT_LINE(EMP_REC.EMPNO || ' ' || EMP_REC.ENAME);
  399.     CLOSE CV;
  400. END;
  401.  
  402.  
  403. -----------------------JAVA-----------------------------
  404.  
  405. --SUMA
  406. --klasa z metoda statyczna suma dwoch liczb wdrozyc w oracla w podstaci funkcji
  407. CREATE JAVA SOURCE NAMED "JavaAppliction1"
  408. AS
  409. PUBLIC class JavaApplication1
  410. {
  411.     PUBLIC static int suma(int a, int b)
  412.     {
  413.         RETURN a+b;
  414.     }  
  415. }
  416.  
  417.  
  418. CREATE OR REPLACE FUNCTION sumator(a NUMBER, b NUMBER) RETURN NUMBER AS
  419. LANGUAGE JAVA NAME 'JavaApplication1.suma (int, int) return int';
  420.  
  421.  
  422. SELECT sumator(3,5) FROM DUAL;
  423.  
  424.  
  425. SET SERVEROUTPUT ON;
  426.  
  427. DECLARE
  428.     A NUMBER;
  429.     B NUMBER;
  430.     v_Return NUMBER;
  431. BEGIN
  432.     A := 4;
  433.     B := 5;
  434.    
  435.     v_Return := SUMATOR(A => A,B => B);
  436.     DBMS_OUTPUT.PUT_LINE('Suma = ' || v_Return);
  437. END;
  438.  
  439.  
  440. --ZAMIANA
  441. --kod java ktory zamieni dwie podawane liczby ze soba. zrealizowany kod jako procedura */
  442.  
  443. CREATE JAVA SOURCE NAMED "P2"
  444. AS
  445. PUBLIC class P2
  446. {
  447.     PUBLIC static void zamiana(int [] a, int [] b)
  448.     {
  449.         int temp;
  450.         temp = a[0];
  451.         a[0] = b[0];
  452.         b[0] = temp;
  453.     }  
  454. }
  455.  
  456. CREATE OR REPLACE PROCEDURE zamiana(a IN OUT NUMBER, b IN OUT NUMBER) AS
  457. LANGUAGE JAVA NAME 'P2.zamiana (int [], int [])';
  458.  
  459.  
  460. DECLARE
  461.     A NUMBER;
  462.     B NUMBER;
  463. BEGIN
  464.     A := 5;
  465.     B := 4;
  466.    
  467.     DBMS_OUTPUT.PUT_LINE('A = ' || A || ' B = ' || B);
  468.     ZAMIANA(A => A, B => B);
  469.     DBMS_OUTPUT.PUT_LINE('A = ' || A || ' B = ' || B);
  470. END;
  471.  
  472.  
  473. --DZIELENIE
  474. --klasa ze statyczna metoda dzielenie w ktorej bedzie exception
  475.  
  476. CREATE JAVA SOURCE NAMED "P3"
  477. AS
  478. PUBLIC class P3
  479. {
  480.     PUBLIC static double dzielenie(double x, double y)
  481.     {
  482.         try
  483.         {
  484.             RETURN x/y;
  485.         }
  486.         catch(EXCEPTION ex)
  487.         {
  488.             System.err.println("Blad! Nie dzieli sie przez zero");
  489.             RETURN 0;
  490.         }
  491.     }  
  492. }
  493.  
  494. CREATE OR REPLACE FUNCTION dzielenie(a REAL, b REAL) RETURN REAL AS
  495. LANGUAGE JAVA NAME 'P3.dzielenie (double, double) return double';
  496.  
  497.  
  498. SELECT dzielenie(15.0,0.0) FROM DUAL;
  499.  
  500. DECLARE
  501.     A REAL;
  502.     B REAL;
  503.     v_Return REAL;
  504. BEGIN
  505.     A := 5.0;
  506.     B := 2.0;
  507.    
  508.     v_Return := DZIELENIE(A => A,B => B);
  509.     DBMS_OUTPUT.PUT_LINE('Dzielenie = ' || v_Return);
  510. END;
  511.  
  512. --PI
  513. CREATE JAVA SOURCE NAMED "pi"
  514. AS
  515. PUBLIC class pi
  516. {
  517.    PUBLIC static double getPI()
  518.     {
  519.         RETURN Math.PI;
  520.     }
  521. }
  522.  
  523.  
  524. CREATE OR REPLACE FUNCTION getPI
  525. RETURN REAL AS LANGUAGE JAVA
  526. name 'p4.getPI() return double';
  527.  
  528.  
  529. SELECT getPI FROM dual;
  530.  
  531. --LOG
  532. --napisz klase z dwiema metodami, jedna zwraca logarytm z podanej liczby a druga wyswietla log
  533. CREATE OR REPLACE JAVA source named "Logarytm"
  534. AS
  535. PUBLIC class Logarytm
  536. {
  537.     PUBLIC static double zwroc()
  538.     {
  539.         double x = Math.E;
  540.         RETURN x;
  541.     }
  542.     PUBLIC static double policz(double liczba)
  543.     {
  544.         RETURN Math.LOG(liczba);
  545.     }
  546.    
  547. }
  548.  
  549.  
  550. CREATE OR REPLACE FUNCTION policz(a REAL)
  551. RETURN REAL AS LANGUAGE JAVA
  552. name 'Logarytm.policz(double) return double';
  553.  
  554.  
  555. CREATE OR REPLACE FUNCTION zwroc
  556. RETURN REAL AS LANGUAGE JAVA
  557. name 'Logarytm.zwroc() return double';
  558.  
  559. SELECT zwroc FROM  dual;
  560.  
  561.  
  562.  
  563. ---na male
  564. CREATE OR REPLACE JAVA source named "Low"
  565. AS
  566. PUBLIC class Low {
  567.        
  568.     PUBLIC static String Lowe (String a) {
  569.         RETURN a.toLowerCase();
  570.     }
  571. };
  572.  
  573.  
  574. CREATE OR REPLACE FUNCTION lowe(a VARCHAR2)
  575. RETURN VARCHAR2 AS language JAVA
  576. name 'Low.Lowe(java.lang.String) return String';
  577.  
  578.  
  579. SELECT lowe('ELO') FROM dual;
  580.  
  581.  
  582. ----na zmiane male i duze
  583. CREATE OR REPLACE JAVA source named "Literak"
  584. AS
  585. import JAVA.util.ArrayList;
  586. import JAVA.util.List;
  587.  
  588. PUBLIC class Literak{
  589.  
  590.     PUBLIC static String zmiana(String slowo) {
  591.        
  592.     List<Character> list = NEW ArrayList<>();
  593.     FOR(CHAR c : slowo.toCharArray()) {
  594.         list.add(c);
  595.     }  
  596.    
  597.     FOR(int i=0; i<list.size(); i++){
  598.     IF (i%2==0)
  599.     list.SET(i, Character.toUpperCase(list.get(i)));
  600.     }  
  601.    
  602.     slowo = list.toString().replaceAll("[,\\s\\[\\]]", "");
  603.     RETURN slowo;
  604. }
  605. }  
  606.  
  607.  
  608. CREATE OR REPLACE FUNCTION funk1(x IN VARCHAR2)
  609. RETURN VARCHAR2 AS language JAVA
  610. name 'Literak.zmiana(java.lang.String) return java.lang.String';
  611.  
  612.  
  613. DECLARE
  614.   X VARCHAR2(200);
  615.   v_Return VARCHAR2(200);
  616. BEGIN
  617.   X := 'dzien dobry';
  618.   v_Return := FUNK1(
  619.     X => X
  620.   );
  621. DBMS_OUTPUT.PUT_LINE('v_Return = ' || v_Return);
  622. END;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement