Advertisement
kaiser96

pl/sql excersises

Oct 14th, 2019
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PL/SQL 13.70 KB | None | 0 0
  1. ---------------506--------------
  2. DECLARE
  3. CURSOR c_nyelv IS SELECT DISTINCT language_id FROM oe.product_descriptions;
  4.         CURSOR c_leiras(v_lang_id oe.product_descriptions.language_id%TYPE)
  5.                 IS SELECT * FROM oe.product_descriptions WHERE language_id=v_lang_id;
  6.                
  7.         r_nyelv oe.product_descriptions.language_id%TYPE;
  8.         r_leiras oe.product_descriptions%ROWTYPE;
  9.     BEGIN
  10.        
  11.         OPEN c_nyelv;
  12.         LOOP
  13.             FETCH c_nyelv INTO r_nyelv;
  14.                 EXIT WHEN c_nyelv%NOTFOUND;
  15.                 dopl(r_nyelv);
  16.                 OPEN c_leiras(r_nyelv);
  17.                 LOOP
  18.                     FETCH c_leiras INTO r_leiras;
  19.                     EXIT WHEN c_leiras%NOTFOUND;
  20.                     dopl(CHR(9)|| r_leiras.product_id || ' ' || r_leiras.translated_description);
  21.                 END LOOP;
  22.                 CLOSE c_leiras;
  23.         END LOOP;
  24.         CLOSE c_nyelv;
  25.     END;
  26.  
  27. -------701-----------
  28. DROP TABLE sajat_oe_product_information;
  29. CREATE TABLE sajat_oe_product_information AS SELECT * FROM oe.product_information;
  30. CREATE OR REPLACE PROCEDURE increasePruductPrice(
  31.         p_warehouse_name oe.warehouses.warehouse_name%TYPE
  32.     ) IS
  33.         CURSOR c1 IS
  34.             SELECT *
  35.             FROM sajat_oe_product_information
  36.             WHERE product_id IN (SELECT D2.product_id
  37.                                  FROM sajat_oe_INVENTORIES D2
  38.                                  JOIN sajat_oe_WAREHOUSES D3
  39.                                  ON D2.warehouse_id = D3.warehouse_id
  40.                                  WHERE D3.WAREHOUSE_NAME=p_warehouse_name
  41.                                             AND D2.product_id NOT IN (SELECT D2.product_id
  42.                                                                      FROM sajat_oe_INVENTORIES D2
  43.                                                                      JOIN sajat_oe_WAREHOUSES D3
  44.                                                                      ON D2.warehouse_id = D3.warehouse_id
  45.                                                                      WHERE D3.WAREHOUSE_NAME != p_warehouse_name))
  46.             FOR UPDATE;
  47.         v_c1 c1%ROWTYPE;
  48.     BEGIN
  49.         OPEN c1;
  50.         LOOP
  51.             FETCH c1 INTO v_c1;
  52.             EXIT WHEN c1%notfound;
  53.             UPDATE sajat_oe_PRODUCT_INFORMATION
  54.             SET list_price = list_price + list_price * 0.1
  55.             WHERE CURRENT OF c1;
  56.         END LOOP;
  57.         CLOSE c1;
  58.     END;
  59.    
  60.    
  61.    
  62. ------702-----
  63. BEGIN
  64.         increasePruductPrice('Sydney');
  65.         COMMIT;
  66.     END;
  67.    
  68.  
  69.  
  70. -----------706-----------
  71. CREATE OR REPLACE PROCEDURE feladat_706 (c_gyenge SYS_REFCURSOR,p_szam OUT NUMBER,p_szoveg OUT VARCHAR) IS
  72.         TYPE t_record IS RECORD (
  73.         id NUMBER,
  74.         leiras VARCHAR2(100));
  75.     BEGIN
  76.         IF (NOT(c_gyenge%ISOPEN)) THEN
  77.             dopl('Nincs nyitva a kurzováltozóó');
  78.         ELSE
  79.             FETCH c_gyenge INTO p_szam, p_szoveg;
  80.         END IF;
  81.         IF c_gyenge%NOTFOUND THEN
  82.                 DBMS_OUTPUT.put_line('nincs több sor');
  83.         END IF;
  84.     END;
  85. -----------707-----------
  86.    
  87.     DECLARE
  88.         TYPE t_egyed IS RECORD (
  89.                 id NUMBER,
  90.                 leiras VARCHAR2(100));
  91.         TYPE t_eros_dept IS REF CURSOR
  92.             RETURN t_egyed;
  93.         RETURN t_egyed;
  94.         v_eros t_eros_dept;
  95.         v_Egyedek1 t_egyed;
  96.     BEGIN
  97.         OPEN v_eros FOR SELECT DEPARTMENT_ID, DEPARTMENT_NAME FROM HR.DEPARTMENTS;
  98.         FOR i IN 1..3
  99.         LOOP
  100.             FETCH v_eros INTO v_Egyedek1;
  101.             feladat_706(v_eros, v_Egyedek1.id, v_Egyedek1.leiras);
  102.             DBMS_OUTPUT.PUT_LINE(v_Egyedek1.id || ' ' || v_Egyedek1.leiras);
  103.         END LOOP;
  104.    
  105.         OPEN v_eros FOR SELECT EMPLOYEE_ID, (FIRST_NAME || ' ' || LAST_NAME) FROM HR.EMPLOYEES;
  106.         FETCH v_eros INTO v_Egyedek1;
  107.         feladat_706(v_eros, v_Egyedek1.id, v_Egyedek1.leiras);
  108.         DBMS_OUTPUT.PUT_LINE(v_Egyedek1.id || ' ' || v_Egyedek1.leiras);
  109.            
  110.         EXCEPTION WHEN INVALID_CURSOR THEN
  111.             DBMS_OUTPUT.PUT_LINE('Nincs nyitva a kurzorvaltozo.');
  112.         WHEN OTHERS THEN
  113.             DBMS_OUTPUT.PUT_LINE('Nincs tobb sor');
  114.     END;
  115. -----------803-----------
  116. BEGIN
  117. HDBMS19.megoldas_feltolt(803,'DECLARE
  118.        c VARCHAR2(1 CHAR);
  119.        TYPE t_gyum IS TABLE OF NUMBER INDEX BY c%TYPE;
  120.        gyakorisag t_gyum;
  121.        
  122.        CURSOR c_gyumolcs IS SELECT NEV FROM GYUMOLCSOK;
  123.        szoveg gyumolcsok.nev%type;
  124.    BEGIN    
  125.        OPEN c_gyumolcs;
  126.        LOOP
  127.            FETCH c_gyumolcs INTO szoveg;
  128.            EXIT WHEN c_gyumolcs%NOTFOUND;
  129.                FOR i IN 1..LENGTH(szoveg)
  130.                LOOP
  131.                c := LOWER(SUBSTR(szoveg, i, 1));
  132.                    IF gyakorisag.EXISTS(c) THEN
  133.                        gyakorisag(c) := gyakorisag(c)+1;
  134.                    ELSE
  135.                        gyakorisag(c) := 1;
  136.                    END IF;
  137.                END LOOP;
  138.        END LOOP;
  139.        c := gyakorisag.FIRST;
  140.        WHILE c IS NOT NULL LOOP
  141.        DBMS_OUTPUT.PUT_LINE('' " '' || c || '' " '' || gyakorisag(c));
  142.        c := gyakorisag.NEXT(c);
  143.        END LOOP;
  144.    END;/');
  145. END;
  146.  
  147.  
  148.  
  149. ----804-----
  150. CREATE OR REPLACE PACKAGE feladat_804
  151.     AS
  152.     letezo_elem EXCEPTION;
  153.     nem_letezo_elem EXCEPTION;
  154.     PROCEDURE add_element(indexe VARCHAR2, elem NUMBER);
  155.     PROCEDURE modify_element(indexe VARCHAR2, elem NUMBER);
  156.     PROCEDURE delete_element(indexe VARCHAR2);
  157.     PROCEDURE delete_between(indextol VARCHAR2, indexig VARCHAR2);
  158.     PROCEDURE read_elements;
  159.     FUNCTION count_indexes RETURN NUMBER;
  160.     FUNCTION read_element(indexe VARCHAR2) RETURN NUMBER;
  161. END feladat_804;
  162. /
  163. CREATE OR REPLACE PACKAGE BODY feladat_804
  164. AS
  165.     TYPE assoc_array
  166.     IS TABLE OF NUMBER(5)
  167.     INDEX BY VARCHAR2(50);
  168.     array_one assoc_array;
  169.    
  170.     PROCEDURE add_element(indexe VARCHAR2, elem NUMBER)
  171.         IS
  172.         BEGIN
  173.             IF array_one.EXISTS(indexe) THEN
  174.                 RAISE letezo_elem;
  175.             ELSE
  176.                 array_one(indexe):=elem;
  177.             END IF;
  178.     END add_element;
  179.    
  180.     PROCEDURE modify_element(indexe VARCHAR2, elem NUMBER)
  181.         IS
  182.         BEGIN
  183.             IF (NOT(array_one.EXISTS(indexe))) THEN
  184.                 RAISE nem_letezo_elem;
  185.             ELSE
  186.                 array_one(indexe):=elem;
  187.             END IF;
  188.     END modify_element;
  189.    
  190.     PROCEDURE delete_element(indexe VARCHAR2)
  191.     IS
  192.     BEGIN
  193.     array_one.DELETE(indexe);
  194.     END delete_element;
  195.    
  196.     PROCEDURE delete_between(indextol VARCHAR2, indexig VARCHAR2)IS
  197.     BEGIN
  198.     array_one.DELETE(indextol,indexig);
  199.     END delete_between;
  200.    
  201.     PROCEDURE read_elements IS
  202.     indexe VARCHAR2(50);
  203.     BEGIN
  204.     indexe := array_one.FIRST;
  205.         WHILE indexe IS NOT NULL
  206.         LOOP
  207.         dopl(indexe || ' = ' || array_one(indexe));
  208.         indexe := array_one.NEXT(indexe);
  209.         END LOOP;
  210.     END read_elements;
  211.    
  212.     FUNCTION count_indexes RETURN NUMBER
  213.     IS
  214.     BEGIN
  215.         RETURN array_one.COUNT;
  216.     END count_indexes;
  217.    
  218.     FUNCTION read_element(indexe VARCHAR2) RETURN NUMBER
  219.     IS
  220.     elem NUMBER(5);
  221.     BEGIN
  222.         IF(array_one.EXISTS(indexe)) THEN
  223.             elem := array_one(indexe);
  224.             RETURN elem;
  225.         ELSE
  226.             RETURN NULL;
  227.         END IF;
  228.     END;
  229. END feladat_804;
  230.  
  231.  
  232. ------805 Írjunk blokkot, amely kipróbálja az előző feladat összes eszközét.-----
  233. DECLARE
  234. ertek NUMBER;
  235. BEGIN  
  236.         feladat_804.add_element('macska',1);
  237.         feladat_804.add_element('kutya',3);
  238.         feladat_804.modify_element('kutya', 10); --Modosítja az erteket 10-re
  239.         feladat_804.delete_element('macsaka');
  240.         ertek := feladat_804.count_indexes;
  241.         DBMS_OUTPUT.PUT_LINE(ertek);
  242.         feladat_804.read_elements;
  243.         feladat_804.delete_between('kutya','macska');
  244.         EXCEPTION
  245.         WHEN OTHERS THEN
  246.         dopl(SQLERRM);
  247.     END;
  248.  
  249.  
  250. --------901-------
  251.  
  252. CREATE OR REPLACE PACKAGE feladat_901
  253. AS
  254. TYPE v_search IS varray (10) OF HR.employees%ROWTYPE;
  255. employees v_search := v_search();
  256.  
  257. PROCEDURE open_cursor(wage NUMBER);
  258. END feladat_901;
  259. /
  260. CREATE OR REPLACE PACKAGE BODY feladat_901
  261. AS
  262. CURSOR emp_less (payment NUMBER)
  263. IS
  264. SELECT hre.employee_id, hre.first_name, hre.last_name FROM hr.employees hre WHERE hre.salary < payment ;
  265.  
  266. PROCEDURE open_cursor(wage NUMBER) IS
  267. emp_id hr.employees.employee_id%TYPE;
  268. firstname hr.employees.first_name%TYPE;
  269. lastname hr.employees.last_name%TYPE;
  270. BEGIN
  271.     employees.DELETE;
  272.     IF(NOT(emp_less%isopen))
  273.         THEN
  274.         OPEN emp_less(wage);
  275.         END IF;
  276.     IF(emp_less%isopen)
  277.     THEN
  278.         FOR n IN 1..10
  279.             LOOP
  280.                 employees.extend;
  281.                 FETCH emp_less INTO emp_id, firstname, lastname;
  282.                 IF(emp_less%notfound)
  283.                     THEN
  284.                         CLOSE emp_less;
  285.                         OPEN emp_less(wage);
  286.                         EXIT;
  287.                 END IF;
  288.                 employees(n).employee_id :=emp_id;
  289.                 employees(n).first_name := firstname;
  290.                 employees(n).last_name := lastname;
  291.                
  292.         END LOOP;
  293.     END IF;
  294.     CLOSE emp_less;
  295. END open_cursor;
  296.  
  297. END feladat_901;
  298. -------902--------
  299. BEGIN
  300. feladat_901.open_cursor(8000);
  301. FOR i IN 1..feladat_901.employees.COUNT
  302. LOOP
  303. DBMS_OUTPUT.PUT_LINE(feladat_901.employees(i).employee_id || ' ' || feladat_901.employees(i).first_name || ' ' || feladat_901.employees(i).last_name );
  304. END LOOP;
  305. END;
  306.  
  307. -----------------903----------------
  308. DECLARE
  309. TYPE jobTitle IS TABLE OF sajat_hr_jobs.job_title%TYPE;
  310. TYPE minSalary IS TABLE OF sajat_hr_jobs.min_salary%TYPE;
  311. TYPE maxSalary IS TABLE OF sajat_hr_jobs.max_salary%TYPE;
  312. beagyazott_jobTitle jobTitle;
  313. beagyazott_minSalary minSalary;
  314. beagyazott_maxSalary maxSalary;
  315. seged VARCHAR2(100);
  316. BEGIN
  317.     SELECT job_title, min_salary, max_salary
  318.     BULK COLLECT INTO beagyazott_jobTitle, beagyazott_minSalary, beagyazott_maxSalary FROM sajat_hr_jobs;
  319.        
  320.     FOR i IN beagyazott_jobTitle.FIRST..beagyazott_jobTitle.LAST
  321.     LOOP
  322.         IF beagyazott_minSalary(i) > beagyazott_maxSalary(i)/2 THEN
  323.             beagyazott_jobTitle.DELETE(i);
  324.         END IF;
  325.     END LOOP;
  326.    
  327.     seged:=beagyazott_jobTitle.FIRST;
  328.     WHILE seged IS NOT NULL
  329.         LOOP
  330.         DBMS_OUTPUT.PUT_LINE(beagyazott_jobTitle(seged));
  331.         seged:=beagyazott_jobtitle.next(seged);
  332.         END LOOP;
  333.        
  334.     FORALL i IN INDICES OF beagyazott_jobTitle
  335.         UPDATE (SELECT sajat_hr_employees.salary AS hre, sajat_hr_jobs.max_salary AS hrj
  336.         FROM sajat_hr_employees inner join sajat_hr_jobs ON sajat_hr_employees.job_id=sajat_hr_jobs.job_id
  337.         WHERE sajat_hr_jobs.job_title=beagyazott_jobTitle(i)) newsalary
  338.         SET newsalary.hre = newsalary.hre + newsalary.hrj * 0.1;
  339. COMMIT;
  340. END;
  341. -------------------904------------------------
  342. CREATE OR REPLACE TYPE keresztnev IS TABLE OF VARCHAR(30);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement