Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --ZADANIE 1--
- SELECT * FROM emp;
- CREATE OR REPLACE PACKAGE PRAC AS
- PROCEDURE DODAJ
- (
- ID_PRAC NUMBER,
- IMIE VARCHAR2,
- ID_SZEF NUMBER,
- PENSJA NUMBER,
- ID_DZIALU NUMBER
- );
- PROCEDURE ZWOLNIJ (
- ID_PRAC NUMBER
- );
- END PRAC;
- -- body
- CREATE OR REPLACE
- PACKAGE BODY PRAC AS
- PROCEDURE DODAJ
- (
- ID_PRAC NUMBER,
- IMIE VARCHAR2,
- ID_SZEF NUMBER,
- PENSJA NUMBER,
- ID_DZIALU NUMBER
- ) AS
- BEGIN
- INSERT INTO emp(empno, ename, mgr, sal, deptno) VALUES (id_prac, imie, id_szef, pensja, id_dzialu);
- END DODAJ;
- PROCEDURE zwolnij (
- id_prac NUMBER
- ) AS
- BEGIN
- DELETE FROM emp WHERE empno=id_prac;
- END zwolnij;
- END PRAC;
- SELECT * FROM emp;
- --run zwolnij
- DECLARE
- ID_PRAC NUMBER;
- BEGIN
- ID_PRAC := 7782;
- PRAC.ZWOLNIJ(
- ID_PRAC => ID_PRAC
- );
- END;
- --run dodaj
- DECLARE
- ID_PRAC NUMBER;
- IMIE VARCHAR2(200);
- ID_SZEF NUMBER;
- PENSJA NUMBER;
- ID_DZIALU NUMBER;
- BEGIN
- ID_PRAC := 7728;
- IMIE := 'QWERTY';
- ID_SZEF := 7839;
- PENSJA := 1000;
- ID_DZIALU := 10;
- PRAC.DODAJ(
- ID_PRAC => ID_PRAC,
- IMIE => IMIE,
- ID_SZEF => ID_SZEF,
- PENSJA => PENSJA,
- ID_DZIALU => ID_DZIALU
- );
- END;
- --ZADANIE 2--
- CREATE OR REPLACE
- PACKAGE PAKIET2 AS
- PROCEDURE PODNIES
- (
- ID_PRAC IN NUMBER
- , SUMA IN NUMBER
- );
- PROCEDURE PODNIES
- (
- SUMA IN NUMBER
- );
- END PAKIET2;
- --body
- CREATE OR REPLACE
- PACKAGE BODY PAKIET2 AS
- PROCEDURE PODNIES
- (
- ID_PRAC IN NUMBER
- , SUMA IN NUMBER
- ) AS
- BEGIN
- UPDATE emp SET sal = sal+suma WHERE empno=id_prac;
- END PODNIES;
- PROCEDURE PODNIES
- (
- SUMA IN NUMBER
- ) AS
- BEGIN
- UPDATE emp SET sal = sal+suma;
- END PODNIES;
- END PAKIET2;
- --run
- SELECT * FROM emp;
- DECLARE
- ID_PRAC NUMBER;
- SUMA NUMBER;
- BEGIN
- ID_PRAC := 7782;
- SUMA := 300;
- PAKIET2.PODNIES(
- ID_PRAC => ID_PRAC,
- SUMA => SUMA
- );
- END;
- DECLARE
- SUMA NUMBER;
- BEGIN
- SUMA := 1000;
- PAKIET2.PODNIES(
- SUMA => SUMA
- );
- END;
- --KURSOS NIEJAWNY--
- INSERT INTO DEPT(DEPTNO, DNAME) VALUES (21, 'IMSI');
- INSERT INTO DEPT(DEPTNO, DNAME) VALUES (22, 'IMSI');
- INSERT INTO DEPT(DEPTNO, DNAME) VALUES (23, 'IMSI');
- INSERT INTO DEPT(DEPTNO, DNAME) VALUES (24, 'IMSI');
- COMMIT;
- BEGIN
- DELETE DEPT WHERE DNAME = 'IMSI';
- IF SQL%FOUND THEN
- DBMS_OUTPUT.PUT_LINE(SQL%ROWCOUNT || ' rekordy zostaly skasowane');
- END IF;
- COMMIT;
- END;
- BEGIN
- INSERT INTO dept(deptno,dname) VALUES (22,'IMSI');
- IF SQL%FOUND THEN
- DBMS_OUTPUT.put_line(sql%rowcount ||'rekord zostal dodany');
- END IF;
- COMMIT;
- END;
- SELECT * FROM dept;
- --KURSOR JAWNY--
- DECLARE --zadeklarowanie kursora
- CURSOR kur1 IS SELECT sal
- FROM emp ORDER BY 1;
- zm kur1%ROWTYPE;
- BEGIN --otwarcie kursora
- OPEN kur1;
- LOOP
- FETCH kur1 INTO zm;
- EXIT WHEN kur1%notfound;
- DBMS_OUTPUT.put_line(zm.sal);
- END LOOP;
- CLOSE kur1; --zakmięcie kursora
- END;
- --kursor z parametrem
- DECLARE
- CURSOR kur1(n NUMBER) IS SELECT sal
- FROM emp
- WHERE sal>n ORDER BY 1;
- zm kur1%ROWTYPE;
- BEGIN
- OPEN kur1(2000);
- LOOP
- FETCH kur1 INTO zm;
- EXIT WHEN kur1%notfound;
- DBMS_OUTPUT.put_line(zm.sal);
- END LOOP;
- CLOSE kur1;
- END;
- --petla for loop dla kursora
- DECLARE
- CURSOR kur1 IS SELECT sal
- FROM emp ORDER BY 1;
- zm kur1%ROWTYPE;
- BEGIN
- FOR zm IN kur1
- LOOP
- DBMS_OUTPUT.put_line(zm.sal);
- --exit when kur1%notfound;
- END LOOP;
- END;
- --zad
- --za pomoca kursora zrealzowac,by w zaleznosciod nazwiska pracownika wyswietlany byl pracownik i dzial
- --w ktorym on pracuje (jesli jego nazwisko jest na litere od a do g) lub samo nazwisko pracownika.
- SET serveroutput ON
- DECLARE
- CURSOR kur1(nazwisko VARCHAR) IS SELECT * FROM emp
- WHERE nazwisko = ename ORDER BY SAL;
- zm emp%ROWTYPE;
- SIGN CHAR;
- BEGIN
- OPEN kur1('ALLEN');
- LOOP
- FETCH kur1 INTO zm;
- EXIT WHEN kur1%notfound;
- IF SUBSTR(zm.ename, 1, 1)BETWEEN 'A' AND 'G' THEN
- DBMS_OUTPUT.put_line(zm.ename || ' pensja ' || zm.sal || ' dep ' || zm.deptno);
- ELSE
- DBMS_OUTPUT.put_line(zm.ename);
- END IF;
- END LOOP;
- CLOSE kur1;
- END;
- ---------------------------------------
- DECLARE
- CURSOR kur1 IS SELECT * FROM emp;
- zm emp%ROWTYPE;
- SIGN CHAR;
- sr1 NUMBER DEFAULT 0;
- prow NUMBER DEFAULT 0;
- BEGIN
- OPEN kur1;
- LOOP
- FETCH kur1 INTO zm;
- EXIT WHEN kur1%notfound;
- sr1:=sr1+zm.sal;
- prow:=prow+zm.sal+NVL(zm.comm,0);
- DBMS_OUTPUT.put_line('Pracownik ' || zm.ename || ' pensja ' || zm.sal || ' suma pensji '|| sr1 || ' suma pen z prow ' || prow);
- END LOOP;
- DBMS_OUTPUT.put_line('Suma pensji ' || sr1);
- DBMS_OUTPUT.put_line('Suma pensji z prow ' || prow);
- CLOSE kur1;
- END;
- /*
- W pakiecie zaozyc dwie procedury:
- 1- pierwsza ma podnosic o pensje danemu jako parametr wejsciowy pracownikowi (EMPNO) o wsp. podwyzki jako 2 parametr
- 2- druga procedura, ktora w zaleznosci od podanego numeru jako atrybut wejsciowy ustala komu taka podwyzka dawana
- (wykorzystujemy w niej zdefiniowane kursory i piersza procedure)
- Jezeli podany atrybut wejsciowy to:
- 1- wtedy wsp. podw. wynosi 1.3 Podnosimy pensje pracownikom, ktorzy zarabiaja w przedziale od 2000$ do 0$
- 2- wtedy wsp. podw. wynosi 1.2 Podnosimy pensje pracownikom, ktorzy zarabiaja w przedziale od 3000$ do 2000$
- 3- wtedy wsp. podw. wynosi 1.1 Podnosimy pensje pracownikom, ktorzy zarabiaja w przedziale od 4000$ do 3000$
- */
- --SPECYFIKACJA PAKIETU
- CREATE OR REPLACE PACKAGE PA2 AS
- PROCEDURE PODWYZKA (id_prac NUMBER, WSP NUMBER DEFAULT 1.1);
- PROCEDURE KOMU (NR NUMBER);
- END PA2;
- --NAJPIERWSZ SPECYFIKACJA, PÓZNIEJ CIALO PAKIETU
- --CIALO PAKIETU
- CREATE OR REPLACE PACKAGE BODY PA2 AS
- PROCEDURE PODWYZKA(id_prac NUMBER, WSP NUMBER DEFAULT 1.1) AS
- BEGIN
- UPDATE EMP SET SAL=SAL*WSP WHERE EMPNO=id_prac;
- END PODWYZKA;
- PROCEDURE KOMU(NR NUMBER) AS
- n NUMBER(10);
- wsp NUMBER;
- CURSOR KUR1 (N NUMBER,N1 NUMBER) IS SELECT EMPNO, ENAME FROM EMP WHERE SAL < N AND SAL> N1 ORDER BY 1;
- WYNIK KUR1%ROWTYPE;
- BEGIN
- IF NR=1 THEN
- WSP:=1.3;
- OPEN KUR1(2000,1);
- ELSIF NR=2 THEN
- WSP:=1.2;
- OPEN KUR1(3000,2000);
- ELSIF NR =3 THEN
- WSP:= 1.1;
- OPEN KUR1(4000,3000);
- END IF;
- LOOP
- FETCH KUR1 INTO WYNIK;
- EXIT WHEN KUR1%NOTFOUND;
- DBMS_OUTPUT.PUT_LINE(WYNIK.ENAME);
- PODWYZKA(WYNIK.EMPNO,WSP);
- END LOOP;
- CLOSE KUR1;
- END KOMU;
- END PA2;
- DECLARE
- NR NUMBER;
- BEGIN
- NR := 2;
- PA2.KOMU(
- NR => NR
- );
- --rollback;
- END;
- -- zmienne kursorowe - ref kursory (ref cursor) (wskaźniki) to już bardziej obiektowe bazy danych
- SET serveroutput ON;
- DECLARE
- TYPE rkur1 IS REF CURSOR;
- kur1 rkur1;
- zm1 emp.sal%TYPE;
- zm2 emp.ename%TYPE;
- BEGIN
- OPEN kur1 FOR SELECT ename,sal FROM emp WHERE sal>2000 ORDER BY 2;
- LOOP
- FETCH kur1 INTO zm2,zm1;
- EXIT WHEN kur1%notfound;
- DBMS_OUTPUT.PUT_LINE(zm1||' '||zm2);
- END LOOP;
- CLOSE kur1;
- END;
- ----PAKIET Z REF KURSOREM---------------------------------------
- CREATE OR REPLACE PACKAGE EMP_OR_DEPT
- AS
- TYPE CV_TYPE IS REF CURSOR;
- PROCEDURE OPEN_CV(CV IN OUT CV_TYPE, TBL IN INTEGER);
- END EMP_OR_DEPT;
- ----
- CREATE OR REPLACE PACKAGE BODY EMP_OR_DEPT
- AS
- PROCEDURE OPEN_CV(CV IN OUT CV_TYPE, TBL IN INTEGER) IS
- BEGIN
- IF TBL = 1 THEN
- OPEN CV FOR SELECT * FROM DEPT;
- ELSIF TBL = 2 THEN
- OPEN CV FOR SELECT * FROM EMP;
- END IF;
- END OPEN_CV;
- END EMP_OR_DEPT;
- ----
- DECLARE
- CV EMP_OR_DEPT.CV_TYPE;
- DEPT_REC DEPT%ROWTYPE;
- EMP_REC EMP%ROWTYPE;
- BEGIN
- EMP_OR_DEPT.OPEN_CV(CV, 1);
- FETCH CV INTO DEPT_REC;
- DBMS_OUTPUT.PUT_LINE(DEPT_REC.DEPTNO || ' ' || DEPT_REC.DNAME);
- CLOSE CV;
- EMP_OR_DEPT.OPEN_CV(CV, 2);
- FETCH CV INTO EMP_REC;
- DBMS_OUTPUT.PUT_LINE(EMP_REC.EMPNO || ' ' || EMP_REC.ENAME);
- CLOSE CV;
- END;
- -----------------------JAVA-----------------------------
- --SUMA
- --klasa z metoda statyczna suma dwoch liczb wdrozyc w oracla w podstaci funkcji
- CREATE JAVA SOURCE NAMED "JavaAppliction1"
- AS
- PUBLIC class JavaApplication1
- {
- PUBLIC static int suma(int a, int b)
- {
- RETURN a+b;
- }
- }
- CREATE OR REPLACE FUNCTION sumator(a NUMBER, b NUMBER) RETURN NUMBER AS
- LANGUAGE JAVA NAME 'JavaApplication1.suma (int, int) return int';
- SELECT sumator(3,5) FROM DUAL;
- SET SERVEROUTPUT ON;
- DECLARE
- A NUMBER;
- B NUMBER;
- v_Return NUMBER;
- BEGIN
- A := 4;
- B := 5;
- v_Return := SUMATOR(A => A,B => B);
- DBMS_OUTPUT.PUT_LINE('Suma = ' || v_Return);
- END;
- --ZAMIANA
- --kod java ktory zamieni dwie podawane liczby ze soba. zrealizowany kod jako procedura */
- CREATE JAVA SOURCE NAMED "P2"
- AS
- PUBLIC class P2
- {
- PUBLIC static void zamiana(int [] a, int [] b)
- {
- int temp;
- temp = a[0];
- a[0] = b[0];
- b[0] = temp;
- }
- }
- CREATE OR REPLACE PROCEDURE zamiana(a IN OUT NUMBER, b IN OUT NUMBER) AS
- LANGUAGE JAVA NAME 'P2.zamiana (int [], int [])';
- DECLARE
- A NUMBER;
- B NUMBER;
- BEGIN
- A := 5;
- B := 4;
- DBMS_OUTPUT.PUT_LINE('A = ' || A || ' B = ' || B);
- ZAMIANA(A => A, B => B);
- DBMS_OUTPUT.PUT_LINE('A = ' || A || ' B = ' || B);
- END;
- --DZIELENIE
- --klasa ze statyczna metoda dzielenie w ktorej bedzie exception
- CREATE JAVA SOURCE NAMED "P3"
- AS
- PUBLIC class P3
- {
- PUBLIC static double dzielenie(double x, double y)
- {
- try
- {
- RETURN x/y;
- }
- catch(EXCEPTION ex)
- {
- System.err.println("Blad! Nie dzieli sie przez zero");
- RETURN 0;
- }
- }
- }
- CREATE OR REPLACE FUNCTION dzielenie(a REAL, b REAL) RETURN REAL AS
- LANGUAGE JAVA NAME 'P3.dzielenie (double, double) return double';
- SELECT dzielenie(15.0,0.0) FROM DUAL;
- DECLARE
- A REAL;
- B REAL;
- v_Return REAL;
- BEGIN
- A := 5.0;
- B := 2.0;
- v_Return := DZIELENIE(A => A,B => B);
- DBMS_OUTPUT.PUT_LINE('Dzielenie = ' || v_Return);
- END;
- --PI
- CREATE JAVA SOURCE NAMED "pi"
- AS
- PUBLIC class pi
- {
- PUBLIC static double getPI()
- {
- RETURN Math.PI;
- }
- }
- CREATE OR REPLACE FUNCTION getPI
- RETURN REAL AS LANGUAGE JAVA
- name 'p4.getPI() return double';
- SELECT getPI FROM dual;
- --LOG
- --napisz klase z dwiema metodami, jedna zwraca logarytm z podanej liczby a druga wyswietla log
- CREATE OR REPLACE JAVA source named "Logarytm"
- AS
- PUBLIC class Logarytm
- {
- PUBLIC static double zwroc()
- {
- double x = Math.E;
- RETURN x;
- }
- PUBLIC static double policz(double liczba)
- {
- RETURN Math.LOG(liczba);
- }
- }
- CREATE OR REPLACE FUNCTION policz(a REAL)
- RETURN REAL AS LANGUAGE JAVA
- name 'Logarytm.policz(double) return double';
- CREATE OR REPLACE FUNCTION zwroc
- RETURN REAL AS LANGUAGE JAVA
- name 'Logarytm.zwroc() return double';
- SELECT zwroc FROM dual;
- ---na male
- CREATE OR REPLACE JAVA source named "Low"
- AS
- PUBLIC class Low {
- PUBLIC static String Lowe (String a) {
- RETURN a.toLowerCase();
- }
- };
- CREATE OR REPLACE FUNCTION lowe(a VARCHAR2)
- RETURN VARCHAR2 AS language JAVA
- name 'Low.Lowe(java.lang.String) return String';
- SELECT lowe('ELO') FROM dual;
- ----na zmiane male i duze
- CREATE OR REPLACE JAVA source named "Literak"
- AS
- import JAVA.util.ArrayList;
- import JAVA.util.List;
- PUBLIC class Literak{
- PUBLIC static String zmiana(String slowo) {
- List<Character> list = NEW ArrayList<>();
- FOR(CHAR c : slowo.toCharArray()) {
- list.add(c);
- }
- FOR(int i=0; i<list.size(); i++){
- IF (i%2==0)
- list.SET(i, Character.toUpperCase(list.get(i)));
- }
- slowo = list.toString().replaceAll("[,\\s\\[\\]]", "");
- RETURN slowo;
- }
- }
- CREATE OR REPLACE FUNCTION funk1(x IN VARCHAR2)
- RETURN VARCHAR2 AS language JAVA
- name 'Literak.zmiana(java.lang.String) return java.lang.String';
- DECLARE
- X VARCHAR2(200);
- v_Return VARCHAR2(200);
- BEGIN
- X := 'dzien dobry';
- v_Return := FUNK1(
- X => X
- );
- DBMS_OUTPUT.PUT_LINE('v_Return = ' || v_Return);
- END;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement