Guest User

Untitled

a guest
May 15th, 2019
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PL/SQL 30.08 KB | None | 0 0
  1.  
  2. SELECT AVG(salary),department_id
  3.  FROM employees
  4.   GROUP BY department_id;
  5.  
  6.  
  7. SELECT *
  8.   FROM
  9. ( SELECT salary,department_id
  10.  FROM employees )
  11.  pivot
  12.  ( AVG(salary) FOR department_id IN (10,20,30,40,50,60,70,80,90,100) );
  13.  
  14.  
  15.  
  16. SELECT dep10,dep20,dep30,dep40,ROUND(dep50),dep60,dep70,
  17.  ROUND(dep80),ROUND(dep90),ROUND(dep100)
  18.   FROM
  19. ( SELECT salary,department_id
  20.  FROM employees )
  21.  pivot
  22.  ( AVG(salary) FOR department_id IN
  23.  (10 dep10,20 dep20,30 dep30,40 dep40,50 dep50,60 dep60,70 dep70,
  24.  80 dep80,90 dep90,100 dep100) );
  25.  
  26.  
  27. SELECT *
  28.  FROM
  29. ( SELECT salary,department_name
  30.  FROM employees
  31.   join departments using(department_id))
  32. pivot
  33.  ( SUM(salary) FOR department_name IN ('IT','Executive','Sales'));
  34.  
  35.  
  36. SELECT *
  37.  FROM (
  38. SELECT salary, EXTRACT(YEAR FROM hire_date) rok
  39.  FROM employees )
  40.  pivot
  41.  ( MAX(salary) FOR rok IN (2001,2002,2003,2004,2005,2006,2007,2008));
  42.  
  43. /*
  44. Wyswietl liczbe pracownikwo w miastach.
  45. Miasta jako kolumny.
  46. */
  47.  
  48. SELECT DISTINCT city
  49.  FROM employees
  50.   join departments using(department_id)
  51.    join locations using(location_id);
  52.  
  53.  
  54. SELECT NVL(TO_CHAR(manager_id),'szef'),
  55.        NVL(dep10,0),NVL(dep20,0),NVL(dep30,0),
  56.        NVL(dep40,0),NVL(dep50,0)
  57.  FROM (
  58. SELECT salary,manager_id,department_id
  59.  FROM employees )
  60. pivot
  61. (AVG(salary) FOR department_id IN (10 dep10,20 dep20 ,30 dep30,
  62. 40 dep40,50 dep50));
  63.  
  64. /* Wyswietl liczbie pracownikow,
  65. nazwe departmentu, panstwo
  66. */
  67.  
  68. SELECT *
  69.  FROM (
  70. SELECT salary,manager_id
  71.  FROM employees )
  72.  pivot xml
  73.  (  SUM(salary) FOR manager_id IN (SELECT DISTINCT manager_id
  74.   FROM employees));
  75.  
  76. SELECT *
  77.  FROM (
  78. SELECT salary,manager_id
  79.  FROM employees )
  80.  pivot xml
  81.  (  SUM(salary) FOR manager_id IN (ANY));
  82.  
  83.  
  84. CREATE TABLE test_pivot AS
  85. SELECT dep10,dep20,dep30,dep40,ROUND(dep50) dep50,dep60,dep70,
  86.  ROUND(dep80) dep80,ROUND(dep90) dep90,ROUND(dep100) dep100
  87.   FROM
  88. ( SELECT salary,department_id
  89.  FROM employees )
  90.  pivot
  91.  ( AVG(salary) FOR department_id IN
  92.  (10 dep10,20 dep20,30 dep30,40 dep40,50 dep50,60 dep60,70 dep70,
  93.  80 dep80,90 dep90,100 dep100) );
  94.  
  95. SELECT *
  96. FROM test_pivot
  97. UNPIVOT
  98. (
  99. sal FOR dept_no IN
  100. (dep10,dep20,dep30,dep40,dep50,dep60,dep70,dep80,dep90,dep100));
  101.  
  102. SELECT regexp_substr('abc123','[[:alpha:]]')
  103.  FROM dual;
  104.  
  105. SELECT regexp_substr('abc123','[[:digit:]]')
  106.  FROM dual;
  107.  
  108. SELECT regexp_substr('abc123','[[:alnum:]]')
  109.  FROM dual;
  110.  
  111. SELECT regexp_substr('abc123','[[:alnum:]]{3}')
  112.  FROM dual;  
  113.  
  114. SELECT regexp_substr('ab1c123','[[:alpha:]]{3}')
  115.  FROM dual;  
  116.  
  117. SELECT regexp_substr('ab1c123','[[:alpha:]]{1,4}')
  118.  FROM dual;
  119.  
  120. SELECT regexp_substr('ab1c123','[[:alpha:]]+')
  121.  FROM dual;
  122.  
  123. --select regexp_substr('abc123','[[:alnum:]](3)')
  124. -- from dual;  
  125.  
  126. SELECT regexp_substr('abc_1234','([[:alpha:]]|_){4}')
  127.  FROM dual;
  128.  
  129. SELECT regexp_substr('frefqwefwwea-bc_1234','([[:alpha:]]|_|-){4}')
  130.  FROM dual;
  131.  
  132. SELECT regexp_substr('fr|efqwefwwea-bc_1234','([[:alpha:]]|_|-|\|){4}')
  133.  FROM dual;
  134.  
  135. SELECT regexp_substr('fr\|efqwefwwea-bc_1234','([[:alpha:]]|_|-|\||\\){4}')
  136.  FROM dual;
  137.  
  138. SELECT regexp_substr('fr\|efqwefwwea-bc_1234','([[:alpha:]]|.){4}')
  139.  FROM dual;
  140.  
  141. SELECT regexp_substr('DQWDWQDEW@fr.efqwefwwea-bc_1234','@([[:alpha:]]|\.){4}')
  142.  FROM dual;
  143.  
  144. SELECT regexp_substr(
  145. 'dwdwdw2dw dwde q  // abcd103@interia.pl wqdsqw     e w  qw
  146. wxcw // j.kowalski@gmail.com scdqwedqw3d2 qw2 // kubus_puchatek@altkom.pl
  147. xwqxsqwsdq ',
  148.  '// ([[:alnum:]]|\.|_){3,20}@[[:alpha:]]{5,10}.[[:alpha:]]{2,3}',1,3)
  149.  FROM dual;
  150.  
  151.  
  152. SELECT LEVEL
  153.  FROM dual
  154.   CONNECT BY level<4;
  155.  
  156.  
  157. SELECT LTRIM(reg,'// ')
  158.  FROM (
  159. SELECT regexp_substr(
  160. 'dwdwdw2dw dwde q  // abcd103@interia.pl wqdsqw     e w  qw
  161. wxcw // j.kowalski@gmail.com scdqwedqw3d2 qw2 // kubus_puchatek@altkom.pl
  162. xwqxsqwsdq ',
  163.  '// ([[:alnum:]]|\.|_){3,20}@[[:alpha:]]{5,10}.[[:alpha:]]{2,3}',1,LEVEL) reg
  164.  FROM dual
  165.   CONNECT BY level<4);
  166.    
  167. 'dewd2ed12c > (22)675-14-82 dqwdwdw cdwdw wdw > 444555888
  168. dqwdw  dwqdwdw  ew2 > 567.123.987 ewdfw > 123 999 568'  
  169.  
  170. SELECT TO_CHAR(salary/12, '9,999.99')  
  171.   FROM employees;
  172.  
  173.  
  174. SELECT SUBSTR(last_name,-3)
  175.  FROM employees;
  176.  
  177. SELECT last_name,INSTR(last_name,'a',-1)
  178.  FROM employees;
  179.  
  180. SELECT regexp_instr('123ab456abc789','[[:alpha:]]{3}',1,3)
  181.  FROM dual;
  182.  
  183. SELECT regexp_count('aaabb1ccc2','[[:digit:]]')
  184.  FROM dual ;
  185.  
  186.  
  187.  SELECT LTRIM(reg,'// ')
  188.  FROM (
  189. SELECT regexp_substr(
  190. 'dwdwdw2dw dwde q  // abcd103@interia.pl wqdsqw     e w  qw
  191. wxcw // j.kowalski@gmail.com scdqwedqw3d2 qw2 // kubus_puchatek@altkom.pl
  192. xwqxsqwsdq ',
  193.  '// ([[:alnum:]]|\.|_){3,20}@[[:alpha:]]{5,10}.[[:alpha:]]{2,3}',1,LEVEL) reg
  194.  FROM dual
  195.   CONNECT BY level<=regexp_count(
  196.   'dwdwdw2dw dwde q  // abcd103@interia.pl wqdsqw     e w  qw
  197. wxcw // j.kowalski@gmail.com scdqwedqw3d2 qw2 // kubus_puchatek@altkom.pl
  198. xwqxsqwsdq ',
  199.  '// ([[:alnum:]]|\.|_){3,20}@[[:alpha:]]{5,10}.[[:alpha:]]{2,3}'));
  200.  
  201. SELECT regexp_replace('1-2-3','[[:digit:]]','hiszpanska_inkwizycja')
  202.  FROM dual ;
  203.  
  204. SELECT phone_number
  205.  FROM employees
  206.   WHERE
  207. regexp_like(phone_number,'[[:digit:]]{3}\.[[:digit:]]{3}\.[[:digit:]]{4}');
  208.  
  209.  
  210. CREATE TABLE srednia_dep(
  211. srednia NUMBER,
  212. dep VARCHAR2(100));
  213.  
  214. CREATE TABLE suma_dep(
  215. suma NUMBER,
  216. dep VARCHAR2(100));
  217.  
  218. CREATE TABLE liczba_dep(
  219. liczba NUMBER,
  220. dep VARCHAR2(100));
  221.  
  222. INSERT ALL
  223.  INTO srednia_dep(srednia,dep)
  224.  VALUES(s1,department_name)
  225.  INTO suma_dep(suma,dep)
  226.  VALUES(s2,department_name)
  227.  INTO liczba_dep(liczba,dep)
  228.  VALUES (l1,department_name)
  229. SELECT AVG(salary) s1,SUM(salary) s2,COUNT(employee_id) l1,
  230.        department_name
  231.    FROM employees
  232.     join departments using(department_id)
  233.      GROUP BY department_name;
  234.  
  235. INSERT ALL
  236.  INTO srednia_dep(srednia,dep)
  237.  VALUES(s1,department_name)
  238.  INTO suma_dep(suma,dep)
  239.  VALUES(s2,department_name)
  240.  INTO liczba_dep(liczba,dep)
  241.  VALUES (l1,department_name)
  242. SELECT AVG(salary) s1,SUM(salary) s2,COUNT(employee_id) l1,
  243.        department_name
  244.    FROM employees
  245.     join departments using(department_id)
  246.      GROUP BY department_name;
  247.  
  248.  
  249. CREATE TABLE elektrownia(
  250. id INTEGER,
  251. licznik NUMBER);
  252.  
  253. INSERT INTO elektrownia VALUES(1,5000);
  254. INSERT INTO elektrownia VALUES(2,500);
  255. INSERT INTO elektrownia VALUES(3,1500);
  256. INSERT INTO elektrownia VALUES(4,2000);
  257. INSERT INTO elektrownia VALUES(5,3000);
  258. INSERT INTO elektrownia VALUES(6,200);
  259.  
  260. COMMIT ;
  261.  
  262. CREATE TABLE inkasent01 AS
  263.  SELECT id , licznik*1.2 licznik
  264.   FROM elektrownia
  265.    WHERE id<4;
  266.  
  267. SELECT * FROM inkasent01;
  268.  
  269. merge INTO elektrownia using inkasent01
  270. ON ( elektrownia.id = inkasent01.id)
  271. WHEN matched THEN UPDATE SET
  272.  elektrownia.licznik = INKASENT01.LICZNIK;
  273.  
  274. SELECT * FROM elektrownia;
  275.  
  276. COMMIT ;
  277.  
  278. INSERT INTO inkasent01 VALUES(7,1000);
  279.  
  280. merge INTO elektrownia using inkasent01
  281. ON ( elektrownia.id = inkasent01.id)
  282. WHEN matched THEN UPDATE SET
  283.  elektrownia.licznik = INKASENT01.LICZNIK
  284. WHEN NOT matched THEN INSERT
  285. (elektrownia.id,elektrownia.licznik)
  286. VALUES
  287. (INKASENT01.id,INKASENT01.licznik);
  288.  
  289. COMMIT;
  290.  
  291. SELECT * FROM elektrownia;
  292.  
  293.  
  294. merge INTO elektrownia e using inkasent01 i
  295. ON ( e.id = i.id)
  296. WHEN matched THEN UPDATE SET
  297.  e.licznik = I.LICZNIK
  298. WHEN NOT matched THEN INSERT
  299. (e.id,e.licznik)
  300. VALUES
  301. (I.id,I.licznik);
  302.  
  303. COMMIT;
  304.  
  305. /*
  306. zmien wszystkie nazwy miasta na seattle.
  307. zatwierdz.
  308. uzywajac as of timestamp utworz tabele ktora bedzie
  309. zawierala stan tabeli locations z przed godziny.
  310. zaktualizuj 1 tabele na podstawie 2.
  311. */
  312.  
  313.  
  314. BEGIN
  315. NULL;
  316. END;
  317.  
  318. /
  319. BEGIN
  320.  DBMS_OUTPUT.put_line('Witaj ');
  321. END;
  322. /
  323.  
  324. /
  325. BEGIN
  326.  DBMS_OUTPUT.put_line(2+2);
  327. END;
  328. /
  329.  
  330. /
  331. BEGIN
  332.  DBMS_OUTPUT.put_line(POWER(3,2));
  333. END;
  334. /
  335.  
  336. /
  337. BEGIN
  338.  DBMS_OUTPUT.put_line('wynik :'||(2+2)||' hiszpanska inkwizycja');
  339. END;
  340. /
  341.  
  342. /
  343. DECLARE
  344.  v_1 NUMBER:=2;
  345.  v_2 NUMBER:=2;
  346. BEGIN
  347.  DBMS_OUTPUT.put_line(v_1+v_2);
  348. END;
  349. /
  350.  
  351. /
  352. DECLARE
  353.  v_1 NUMBER:=2;
  354.  v_2 NUMBER:=2;
  355. BEGIN
  356.  DBMS_OUTPUT.put_line(v_1+v_2);
  357. END;
  358. /
  359.  
  360. /
  361. DECLARE
  362.  v_1 NUMBER;
  363.  v_2 NUMBER;
  364.  wynik NUMBER;
  365. BEGIN
  366.  v_1:=5;
  367.  v_2:=10;
  368.  wynik:=v_1+v_2;
  369.  DBMS_OUTPUT.put_line(wynik);
  370. END;
  371. /
  372.  
  373. /
  374. DECLARE
  375.  imie VARCHAR2(50):='Janusz';
  376. BEGIN
  377.  DBMS_OUTPUT.put_line('Witaj '||imie);
  378. END;
  379. /
  380.  
  381.  
  382. /
  383. DECLARE
  384.  imie VARCHAR2(50):='&imie';
  385. BEGIN
  386.  DBMS_OUTPUT.put_line('Witaj '||imie);
  387. END;
  388. /
  389.  
  390. waga /(wzrost*wzrost)
  391.  
  392. /*napisz blok ktory bedzie przyjmowal jako
  393. zmienne wage oraz wzrost,wyliczal bmi i
  394. wyswietlal je na dbms_output */
  395.  
  396.  
  397. /* napisz blok ktory wyswietli na
  398. dbms liczbe dni, miesiecy , lat pomiedzy
  399. datami ktore podamy jako zmienne */
  400.  
  401.  
  402. /
  403. BEGIN
  404.  FOR x IN 1..10 LOOP
  405.     DBMS_OUTPUT.put_line('jakis tekst');
  406.  END LOOP;
  407. END;
  408. /
  409.  
  410. /
  411. DECLARE  
  412.  y NUMBER;
  413. BEGIN
  414.  FOR x IN 1..10 LOOP
  415.     y:=x;
  416.  END LOOP;
  417.  DBMS_OUTPUT.put_line(y);
  418. END;
  419. /
  420.  
  421. /
  422. DECLARE
  423.  v_start INTEGER:=10;
  424.  v_end INTEGER:=100;
  425.  y NUMBER:=0;
  426. BEGIN
  427.  FOR x IN v_start..v_end LOOP
  428.      y:=y+2;
  429.      DBMS_OUTPUT.put_line(y);
  430.  END LOOP;
  431. END ;
  432. /
  433.  
  434. /*
  435. napisz blok ktory wyswietli na dbms_output
  436. pierwsze 20 poteg liczy ktora podamy jako zmienna
  437. */
  438.  
  439.  
  440. /
  441. DECLARE
  442.  lokata NUMBER:=20000;
  443.  rok NUMBER:=0;
  444. BEGIN
  445.  LOOP
  446.   lokata:=lokata*1.02;
  447.   rok:=rok+1;
  448.   DBMS_OUTPUT.put_line(lokata||' '||rok);
  449.   EXIT WHEN lokata>=40000;
  450.  END LOOP;
  451. END;
  452. /
  453.  
  454. /*
  455. Janusz wazy 104 kg, intensywnie cwiczac na silowni spala miesiecznie
  456. 2% swojej masy , po ilu miesiacach waga janusza spadnie pozniej
  457. 85 kg
  458. */
  459.  
  460. /
  461. DECLARE
  462.  lokata NUMBER:=20000;
  463.  rok NUMBER:=0;
  464. BEGIN
  465.  WHILE (lokata <40000 )   LOOP
  466.   lokata:=lokata*1.02;
  467.   rok:=rok+1;
  468.   DBMS_OUTPUT.put_line(lokata||' '||rok);
  469.  END LOOP;
  470. END;
  471. /
  472.  
  473. /
  474. DECLARE
  475.   x NUMBER:=5;
  476. BEGIN
  477.   IF x=5 THEN
  478.      DBMS_OUTPUT.put_line('ten x jest rowny 5 ');
  479.   ELSIF x>5 THEN
  480.      DBMS_OUTPUT.put_line('ten x jest wiekszy niz 5 ');
  481.   ELSE
  482.      DBMS_OUTPUT.put_line('ten x jest mniejszy niz 5 ');
  483.   END IF;
  484. END;
  485. /
  486.    
  487.  
  488. /
  489. DECLARE
  490.   x NUMBER:=50;
  491. BEGIN
  492.  IF x>100 THEN
  493.     DBMS_OUTPUT.put_line('>100');
  494.  ELSIF x>10 THEN
  495.        DBMS_OUTPUT.put_line('>10');
  496.  ELSIF x>1 THEN
  497.        DBMS_OUTPUT.put_line('>1');      
  498.  END IF;
  499. END ;
  500. /
  501.  
  502. 16,0 – wygłodzenie
  503. 16,0–16,99 – wychudzenie
  504. 17,0–18,49 – niedowagę
  505. 18,5–24,99 – wartość prawidłową
  506. 25,0–29,99 – nadwagę
  507. 30,0–34,99 – I stopień otyłości
  508. 35,0–39,99 – II stopień otyłości (otyłość kliniczna)
  509. ? 40,0 – III stopień otyłości (otyłość skrajna)
  510.  
  511. /*
  512. Wyswietl liczby od 1 do 200 wraz z inforamacja
  513. czy jest to liczba parzysta czy nie
  514. */
  515.  
  516. CASE WHEN x THEN 'x'
  517.      WHEN y THEN 'y'
  518.      ELSE 'z'
  519. END CASE
  520.  
  521.  
  522.  
  523.  
  524. /
  525. BEGIN
  526.  FOR x IN -10..10 LOOP
  527.     DBMS_OUTPUT.put_line(2/x);
  528.  END LOOP;
  529. EXCEPTION
  530.  WHEN ZERO_DIVIDE THEN
  531.      DBMS_OUTPUT.put_line(' nie dziel przez 0 ');
  532.  WHEN OTHERS THEN
  533.      DBMS_OUTPUT.put_line('jakis inny wyjatek ');
  534. END;
  535. /
  536.  
  537. /
  538. DECLARE
  539.  v_data1 DATE:=TO_DATE('01-01-2010','dd-mm-yyyy');
  540.  v_data2 DATE:=SYSDATE;
  541.  dni NUMBER;
  542.  e_zla_kolejnosc EXCEPTION;
  543. BEGIN
  544.  IF v_data1<v_data2 THEN
  545.     RAISE e_zla_kolejnosc;
  546.  END IF;    
  547.  dni:=v_data1-v_data2;
  548.  EXCEPTION  
  549.  WHEN e_zla_kolejnosc THEN
  550.     DBMS_OUTPUT.put_line('pierwsza data musi byc wieksza ');
  551. END;
  552. /
  553.  
  554. /*
  555. 1 wzrost w metrach,nie w cm
  556. 2 za_maly_zrost
  557. 3 za_duza_waga
  558. 4 za_mala_waga  
  559. */
  560.  
  561.  
  562. CREATE TABLE reg AS SELECT * FROM regions;
  563. truncate TABLE reg;
  564.  
  565.  
  566.  
  567. /
  568. DECLARE
  569.  v_region_id INTEGER:=10;
  570.  v_region_name VARCHAR2(50):='Europa';
  571. BEGIN
  572.  INSERT INTO reg VALUES(v_region_id,v_region_name);
  573.  COMMIT;
  574. END;
  575. /
  576.  
  577. CREATE sequence reg_seq
  578.  START WITH 1;
  579.  
  580. /
  581. DECLARE
  582.  v_region_name VARCHAR2(50):='Europa';
  583. BEGIN
  584.  INSERT INTO reg VALUES(reg_seq.NEXTVAL,v_region_name);
  585.  COMMIT;
  586. END;
  587. /
  588.  
  589. SELECT * FROM reg;
  590.  
  591. /*
  592. utworz kopie tabeli departments bez danych.
  593. utworz sekwencje ktora wystartuje od 10 i bedzie zwiekszala
  594. sie o 10.
  595. napisz blok ktory bedzie dodawal wiersze do tej tabeli.
  596. department_id ma byc uzuepelniane automatycznie przez sekwencje.
  597. */
  598.  
  599.  
  600. /
  601. DECLARE
  602.  v_region_name VARCHAR2(50):='Europa';
  603. BEGIN
  604.  INSERT INTO reg VALUES(reg_seq.NEXTVAL,v_region_name);
  605.  DBMS_OUTPUT.put_line('dodano '||sql%rowcount);
  606.  COMMIT;
  607.  DBMS_OUTPUT.put_line('dodano '||sql%rowcount);
  608. END;
  609. /
  610.  
  611.  
  612. CREATE TABLE raport1(
  613. id INTEGER primary key,
  614. imiona VARCHAR2(100),
  615. nazwiska VARCHAR2(100),
  616. zarobki NUMBER,
  617. dep VARCHAR2(100));
  618.  
  619.  
  620. /
  621. DECLARE
  622.  v_city VARCHAR2(100):='Seattle2';
  623.  e_zla_nazwa EXCEPTION;
  624. BEGIN
  625.  INSERT INTO raport1
  626.  SELECT employee_id,first_name,last_name,salary,department_name
  627.   FROM employees
  628.    join departments using(department_id)
  629.     join locations using(location_id)
  630.      WHERE UPPER(city)=UPPER(v_city);
  631.   IF sql%rowcount=0 THEN
  632.      RAISE e_zla_nazwa;
  633.   END IF;  
  634.   DBMS_OUTPUT.put_line('dodano '||sql%rowcount||' pracownikow ');  
  635. EXCEPTION
  636.  WHEN e_zla_nazwa THEN
  637.     DBMS_OUTPUT.put_line(' niepoprawna nazwa miasta  ');
  638. END;    
  639. /
  640.  
  641. SELECT * FROM raport1;
  642.  
  643. SELECT s1.NEXTVAL,liczba,department_id
  644.  FROM (
  645. SELECT COUNT(*) liczba ,department_id
  646.  FROM employees
  647.   GROUP BY department_id );
  648.  
  649.  
  650. /*
  651. utworz tabele z koumanmi
  652. id,suma zarobkow, srednie zarrobi, nazwa zawodu.
  653. utworz sekwenecje ktora wystartuje od 1 i bedzie zwiekszac sie o 1.
  654. napisz blok ktory zaladuj do tabeli dane
  655. z departmentu ktorego nazwe podamy jako parametr.
  656. */
  657.  
  658. SELECT * FROM reg;
  659.  
  660. CREATE TABLE countries2
  661.  AS SELECT * FROM countries
  662.   WHERE 1=2;
  663.  
  664. /
  665. DECLARE
  666.  v_reg VARCHAR2(50):='Europa';
  667.  v_region_id INTEGER;
  668.  v_country_name VARCHAR2(50):='Polska';
  669. BEGIN
  670.  INSERT INTO reg VALUES(s1.NEXTVAL,v_reg)
  671.  returning region_id INTO v_region_id;
  672.  
  673.  INSERT INTO countries2 VALUES(
  674.  UPPER(SUBSTR(v_country_name,1,2)),
  675.  v_country_name,v_region_id);
  676. END ;
  677. /
  678.  
  679. SELECT * FROM reg;
  680. SELECT * FROM countries2;
  681.  
  682. CREATE TABLE emp3 AS SELECT *
  683.  FROM employees;
  684.  
  685.  
  686. /
  687. DECLARE
  688.  v_kasa NUMBER:=1000;
  689.  v_employee_id INTEGER:=2000;
  690.  e_brak_pracownika EXCEPTION;
  691. BEGIN
  692.  UPDATE emp3
  693.   SET salary=salary+v_kasa
  694.    WHERE employee_id = v_employee_id;
  695.  IF sql%rowcount=0 THEN
  696.     RAISE  e_brak_pracownika;
  697.  END IF;  
  698.  DBMS_OUTPUT.put_line('pracownik od id '||v_employee_id||' dostal
  699.  '||v_kasa||' podwyzki ');
  700.  EXCEPTION
  701.   WHEN e_brak_pracownika THEN
  702.        DBMS_OUTPUT.put_line('nie ma pracownik '||v_employee_id);
  703. END;
  704. /
  705.    
  706. /*
  707. napisz blok ktory bedzie dawal 10% podwyzki
  708. pracownikom zatrudnionym pomiedzy datami
  709. ktore podamy jako parametry
  710. w zwodzie(job_title) ktorego nazwe podamy jako parametr.
  711. Wyswietl komunikat ilu pracownikow dostalo podwyzke.
  712. */
  713.  
  714.  
  715. CREATE TABLE logi1(
  716. id INTEGER,
  717. liczba_podwyzek NUMBER,
  718. suma_podwyzke NUMBER,
  719. rok_zatrudnienia INTEGER,
  720. kiedy DATE);
  721.  
  722. /
  723. DECLARE
  724.  v_kasa NUMBER:=1000;
  725.  v_rok INTEGER:=1999;
  726.  v_liczba_podwyzek INTEGER;
  727.  e1 EXCEPTION;
  728. BEGIN
  729.  UPDATE emp3
  730.   SET salary=salary+v_kasa
  731.    WHERE EXTRACT(YEAR FROM hire_date)=v_rok;
  732.  IF  sql%rowcount=0 THEN
  733.      RAISE e1;
  734.  END IF;    
  735.  v_liczba_podwyzek:=sql%rowcount;
  736.  INSERT INTO logi1 VALUES(s1.NEXTVAL,v_liczba_podwyzek,v_liczba_podwyzek*v_kasa,
  737.  v_rok,SYSDATE);
  738.  
  739.  EXCEPTION
  740.   WHEN e1 THEN
  741.        DBMS_OUTPUT.put_line('w tym roku nie zatrudniono pracownikow ');
  742. END;
  743. /
  744.  
  745. SELECT * FROM logi1;
  746.  
  747. /*
  748. napisz blok ktory usunie pracownikow z panstwa
  749. ktorego nazwe podamy jako zmienna
  750. */
  751.  
  752.  
  753. /
  754. DECLARE
  755.  v_srednia NUMBER;
  756.  v_suma NUMBER;
  757.  v_maks NUMBER;
  758.  v_department_id NUMBER:=90;
  759. BEGIN
  760.  SELECT AVG(salary),SUM(salary),MAX(salary)
  761.      INTO v_srednia,v_suma,v_maks  
  762.   FROM employees
  763.    WHERE department_id=v_department_id;
  764.  DBMS_OUTPUT.put_line('srednia : '||v_srednia);
  765.  DBMS_OUTPUT.put_line('suma : '||v_suma);
  766.  DBMS_OUTPUT.put_line('maks : '||v_maks);
  767. END;
  768. /
  769.  
  770. /*
  771. napisz blok ktory pobierze i wyswietli na dbms
  772. liczbe dni, lat pomiedzy  01-01-2014 a maxymalna data zatrudnienia
  773. w miescie ktorego nazwe podamy jako zmienna  
  774. */
  775.  
  776. /
  777. DECLARE
  778.  v_first_name VARCHAR2(50);
  779.  v_last_name VARCHAR2(50);
  780.  v_employee_id INTEGER:=0;
  781. BEGIN
  782.  SELECT first_name,last_name INTO  v_first_name,v_last_name
  783.   FROM employees
  784.    WHERE employee_id = v_employee_id;
  785.  DBMS_OUTPUT.put_line(v_first_name||' '||v_last_name);  
  786. EXCEPTION
  787.  WHEN TOO_MANY_ROWS THEN
  788.      DBMS_OUTPUT.put_line('wiecej niz 1 wiersz ');
  789.  WHEN NO_DATA_FOUND THEN
  790.      DBMS_OUTPUT.put_line(' nie ma takiego pracownika ');
  791. END;
  792. /
  793.  
  794. /*
  795. napisz blok ktory pobierze zarobki pracownika ktorego id podamy
  796. jako zmienna.
  797. blok ma pobrac rowniez srednie zarobki w calej firmie.
  798. jesli pracownik zarabia mniej niz srednia
  799. daj mu podyzke o kwote ktora podamy jako zmienna.
  800. */
  801.  
  802.  
  803. /
  804. DECLARE
  805.  v_region_name regions.region_name%TYPE;
  806. BEGIN  
  807.  INSERT INTO reg VALUES(s1.NEXTVAL,v_region_name);
  808. END;
  809. /
  810.  
  811. CREATE TABLE eeee AS SELECT * FROM employees;
  812. truncate TABLE eeee;
  813. /
  814. DECLARE
  815.  w employees%ROWTYPE;
  816.  v_employee_id employees.employee_id%TYPE:=100;
  817. BEGIN
  818.  SELECT * INTO w
  819.   FROM employees
  820.    WHERE employee_id=v_employee_id;
  821.  INSERT INTO eeee VALUES w;
  822.  DBMS_OUTPUT.put_line(w.first_name||' '||w.last_name||' '||w.salary);
  823. END;
  824. /
  825.  
  826. /
  827. DECLARE
  828.  TYPE rek IS RECORD(
  829.  srednia NUMBER,
  830.  max_date DATE,
  831.  min_date DATE,
  832.  zawod VARCHAR2(100));
  833.  r rek;
  834.  v_zawod VARCHAR2(100):='Programmer';
  835.  
  836. BEGIN
  837.  SELECT AVG(salary),MAX(hire_date),MIN(hire_date),job_title INTO r
  838.    FROM employees
  839.     join jobs using(job_id)
  840.      WHERE job_title=v_zawod
  841.       GROUP BY job_title;
  842.  
  843.  DBMS_OUTPUT.put_line(r.srednia||' '||r.max_date||' '||r.min_date||'
  844.  '||r.zawod);
  845. END;
  846. /
  847.      
  848.  
  849. /*
  850. Utworz tabele z kolumnami employee_id,salary,first_name,last_name,
  851. department_id.
  852. Napisz blok ktory pobierze najlepiej zarabijacego
  853. pracownika w departamencie ktorego nazwe podamy jako zmienna.
  854. blok ma zaladowac dane do wczesniej utworzonej tabeli,
  855. oraz wyswietli je na dbms
  856. */
  857.  
  858. SELECT employee_id,salary,first_name,last_name,department_id
  859.  FROM (
  860. SELECT employee_id,salary,first_name,last_name,department_id,
  861.        ROW_NUMBER() over (ORDER BY salary DESC ) rank1
  862.    FROM employees
  863.     join departments using(department_id)
  864.      WHERE department_name='IT')
  865.       WHERE rank1=1;
  866.        
  867. /
  868. DECLARE
  869.  min_emp INTEGER;
  870.  max_emp INTEGER;
  871.  w employees%ROWTYPE;
  872. BEGIN
  873.  SELECT  MIN(employee_id),MAX(employee_id) INTO min_emp,max_emp
  874.   FROM employees;
  875.  
  876.  FOR x IN min_emp..max_emp LOOP
  877.    SELECT * INTO w
  878.     FROM employees
  879.      WHERE employee_id=x;
  880.  END LOOP;
  881. END ;
  882. /
  883.  
  884.  
  885. /
  886. DECLARE
  887.   CURSOR k IS SELECT first_name,last_name
  888.                 FROM employees;
  889.   v_first_name VARCHAR2(50);
  890.   v_last_name VARCHAR2(50);
  891. BEGIN
  892.  OPEN k;
  893.     LOOP
  894.     FETCH k INTO v_first_name,v_last_name;
  895.     EXIT WHEN k%notfound;
  896.     DBMS_OUTPUT.put_line(v_first_name||' '||v_last_name);
  897.     END LOOP;
  898.  CLOSE k;  
  899. END;
  900. /
  901.  
  902. /
  903. DECLARE
  904.  CURSOR k IS SELECT * FROM departments;
  905.  w departments%ROWTYPE;
  906. BEGIN
  907.  OPEN k;
  908.     LOOP
  909.     FETCH k INTO w;
  910.     EXIT WHEN k%notfound;
  911.     DBMS_OUTPUT.put_line(w.department_id||' '||w.department_name);
  912.     END LOOP;
  913.  CLOSE k;  
  914. END;
  915. /
  916.  
  917. /
  918. DECLARE
  919.  CURSOR k IS SELECT MAX(hire_date)-MIN(hire_date),
  920.                    TRUNC(MONTHS_BETWEEN(MAX(hire_date),MIN(hire_date))),
  921.                    TRUNC(MONTHS_BETWEEN(MAX(hire_date),MIN(hire_date))/12),
  922.                    department_name
  923.                 FROM employees
  924.                  join departments using(department_id)
  925.                    GROUP BY department_name;
  926. TYPE rek IS RECORD(
  927. dni NUMBER,
  928. mies NUMBER,
  929. lata NUMBER,
  930. dep VARCHAR2(100));
  931. r rek;
  932. BEGIN
  933.  OPEN k;
  934.    LOOP
  935.      FETCH k INTO r;
  936.      EXIT WHEN k%notfound;
  937.      IF r.dni >0 THEN
  938.         DBMS_OUTPUT.put_line(r.dni||' '||r.mies||' '||r.lata||' '||r.dep);
  939.      END IF;  
  940.    END LOOP;
  941.  CLOSE k;
  942. END;
  943. /
  944.  
  945. /*
  946. Napisz blok ktory wypisze na dbms liczbe praconikow,rok zatrudnienia,
  947. ranking po liczbie pracownikow malejaco.
  948. */
  949.  
  950.  
  951. /*
  952. utworz 3 tabele z kolumnami numer_pracownika, staz_w_latach.
  953. tabela maja sie nazywac ponad15lat,ponad12lat i ponad10 lat.
  954. napisz blok ktory pobierze numery pracownikow , liczbe lat w firmie
  955. i rozrzuci ich do odpowiednich tabel.  
  956. */
  957.  
  958. /
  959. DECLARE
  960.  CURSOR k IS SELECT first_name,last_name
  961.                 FROM employees;
  962. BEGIN
  963.   FOR w IN k LOOP
  964.   EXIT WHEN w.last_name='King';
  965.       DBMS_OUTPUT.put_line(w.first_name||' '||w.last_name);
  966.   END LOOP;
  967. END;
  968. /
  969.  
  970. /
  971. DECLARE
  972.   CURSOR k IS SELECT employee_id,salary/12 miesieczne
  973.                  FROM employees;
  974. BEGIN
  975.  FOR w IN k LOOP
  976.      DBMS_OUTPUT.put_line(w.employee_id||' '||w.miesieczne);
  977.  END LOOP;
  978. END ;
  979. /
  980.                  
  981. /*
  982. napisz blok ktory wypisze na dbms_output
  983. sume zarobkow , liczbe pracownikow, level , naze departmentu
  984. */
  985.  
  986.  
  987. /*
  988. utworz 2 kopie tabeli employees.
  989. napisz blok ktory wstawi do 1 tabeli pracownikow
  990. zarabijacych wiecej niz srednie zarobki w firmie,
  991. do drugiej tych ktorzy zarabiaja mniej
  992. */
  993.  
  994. CREATE TABLE e10 AS SELECT * FROM employees WHERE 1=2;
  995. CREATE TABLE e11 AS SELECT * FROM employees WHERE 1=2;
  996.  
  997. /
  998. DECLARE
  999.  CURSOR k IS SELECT * FROM employees;
  1000.  srednia NUMBER;
  1001. BEGIN
  1002.  SELECT AVG(salary) INTO srednia
  1003.   FROM employees;
  1004.  
  1005.  FOR w IN k LOOP
  1006.  DBMS_OUTPUT.put_line(k%rowcount);
  1007.   IF w.salary>srednia THEN
  1008.      INSERT INTO e10 VALUES w;
  1009.   ELSE
  1010.     INSERT INTO e11 VALUES w;
  1011.   END IF;
  1012.  END LOOP;
  1013. COMMIT;  
  1014. END;
  1015. /
  1016.  
  1017. /
  1018. DECLARE
  1019.  v_start_date DATE:=TO_DATE('01-01-2011','dd-mm-yyyy');
  1020.  v_end_date DATE:=TO_DATE('01-01-2013','dd-mm-yyyy');
  1021.  CURSOR k IS SELECT *
  1022.                FROM employees
  1023.                 WHERE hire_date BETWEEN v_start_date
  1024.                  AND  v_end_date;
  1025.  e_1 EXCEPTION;
  1026.  e_2 EXCEPTION;
  1027.  i NUMBER:=0;
  1028. BEGIN
  1029.  IF v_start_date>v_end_date THEN
  1030.     RAISE e_1;
  1031.  END IF;  
  1032.  
  1033.  FOR w IN k LOOP
  1034.      i:=i+1;
  1035.      DBMS_OUTPUT.put_line(w.employee_id||' '||w.hire_Date);
  1036.  END LOOP;
  1037.  
  1038.  IF i=0 THEN
  1039.     RAISE e_2;
  1040.  END IF;  
  1041.  
  1042. EXCEPTION
  1043.  WHEN e_1 THEN
  1044.       DBMS_OUTPUT.put_line('pierwsza data musi byc mniejsza ');
  1045.  WHEN e_2 THEN
  1046.       DBMS_OUTPUT.put_line('nie zatrudniono pracownikow w tym zakresie ');
  1047. END;
  1048. /
  1049.  
  1050.  
  1051. /
  1052. DECLARE
  1053. CURSOR k1 IS SELECT * FROM departments;
  1054. CURSOR k2 IS SELECT * FROM employees;
  1055. x BOOLEAN:=TRUE;
  1056. BEGIN
  1057.  <<n1>>
  1058.  FOR w1 IN k1 LOOP
  1059.      FOR w2 IN k2 LOOP  
  1060.          DBMS_OUTPUT.put_line(w2.last_name);
  1061.          EXIT n1 WHEN w2.last_name='King';        
  1062.      END LOOP;    
  1063.  END LOOP;
  1064. END ;
  1065. /
  1066.  
  1067. /
  1068. DECLARE
  1069.  CURSOR k(v_department_id INTEGER,v_manager_id INTEGER) IS
  1070.        SELECT * FROM employees WHERE department_id=v_department_id
  1071.        AND manager_id = v_manager_id ;
  1072. BEGIN
  1073.  FOR w IN k(90,100) LOOP
  1074.     DBMS_OUTPUT.put_line(w.last_name||' '||w.salary);
  1075.  END LOOP;
  1076. END ;
  1077. /
  1078.  
  1079. SELECT * FROM employees FOR UPDATE;
  1080. ROLLBACK ;
  1081.  
  1082.  
  1083. /
  1084. DECLARE
  1085.  CURSOR k IS SELECT * FROM employees FOR UPDATE;
  1086. BEGIN
  1087.   FOR w IN k LOOP
  1088.       UPDATE employees
  1089.        SET salary=salary+1000
  1090.         WHERE CURRENT OF k;        
  1091.   END LOOP;
  1092. END;
  1093. /
  1094. ROLLBACK;
  1095.  
  1096. /
  1097. CREATE FUNCTION razy2(x NUMBER ) RETURN NUMBER IS
  1098. BEGIN
  1099.  RETURN x*2;
  1100. END;
  1101. /
  1102.  
  1103. SELECT razy2(salary) FROM employees;
  1104. SELECT razy2(5000) FROM dual;
  1105.  
  1106. /
  1107. CREATE OR REPLACE FUNCTION razy3(x NUMBER ) RETURN NUMBER IS
  1108. BEGIN
  1109.  RETURN x*3;
  1110. END;
  1111. /
  1112.  
  1113. /
  1114. CREATE OR REPLACE FUNCTION years_between(p_data1 DATE,p_data2 DATE)
  1115. RETURN NUMBER IS
  1116. BEGIN
  1117.  RETURN TRUNC(MONTHS_BETWEEN(p_data1,p_data2)/12);  
  1118. END;
  1119. /
  1120.  
  1121. SELECT years_between(SYSDATE,hire_date)
  1122.  FROM employees;
  1123.  
  1124. /*napisz funckje years_between2 ktora bedzie liczyla
  1125. liczbe lat dla parametrow typu tesktowego */
  1126.  
  1127.  
  1128. /
  1129. CREATE OR REPLACE FUNCTION daj_srednia RETURN NUMBER IS
  1130. srednia NUMBER;
  1131. BEGIN
  1132.  SELECT AVG(salary) INTO srednia
  1133.   FROM employees;
  1134.  RETURN srednia;
  1135. END;
  1136. /
  1137. SELECT daj_srednia FROM dual;
  1138. SELECT *
  1139.  FROM employees WHERE salary>daj_srednia;
  1140.  
  1141.  
  1142. /
  1143. CREATE OR REPLACE FUNCTION daj_srednia2(p_department_name VARCHAR2)
  1144. RETURN NUMBER IS
  1145. srednia NUMBER;
  1146. BEGIN
  1147.  SELECT AVG(salary) INTO srednia
  1148.   FROM employees
  1149.   join departments using(department_id)
  1150.    WHERE UPPER(department_name)=UPPER(p_department_name);
  1151.  RETURN NVL(srednia,0);
  1152. END;
  1153. /
  1154. SELECT daj_srednia2('it2') FROM dual ;
  1155.  
  1156. /*
  1157. napisz funkcje ktora zwroci liczbe lat pomiedzy maxymalna,a
  1158. minimalna data zatrudnienia w miescie ktorego nazwe podamy
  1159. jako parametr funkcji
  1160. */
  1161.  
  1162. /*
  1163. napisz funkcje ktora zwroci employee_id
  1164. najwczesniej zatrudnionego pracownika
  1165. w panstwie ktorego nazwe podamy jako zmienna
  1166. */
  1167.  
  1168. /
  1169. CREATE OR REPLACE FUNCTION daj_id(p_country_name VARCHAR2)
  1170. RETURN NUMBER IS
  1171.  v_employee_id INTEGER;
  1172. BEGIN
  1173. SELECT employee_id INTO v_employee_id
  1174.  FROM (
  1175. SELECT employee_id,
  1176.        ROW_NUMBER() over (ORDER BY hire_date ) r1
  1177.  FROM employees
  1178.   join departments using(department_id)
  1179.    join locations using(location_id)
  1180.     join countries using(country_id)
  1181.      WHERE country_name='Germany')
  1182.       WHERE r1=1;
  1183. RETURN  v_employee_id;
  1184. END ;
  1185. /
  1186.  
  1187. SELECT daj_id('Germany') FROM dual ;
  1188.  
  1189. /*
  1190. Napisz funkcje ktora zwroci jak % zarobkow
  1191. w calej firmie stanowia zarobki w departamencie
  1192. ktoreg nazwe podamy jako parametr funkcji.
  1193. */
  1194.  
  1195. show errors;
  1196.  
  1197. /
  1198. CREATE OR REPLACE PROCEDURE pisz(x VARCHAR2) IS
  1199. BEGIN
  1200.   DBMS_OUTPUT.put_line(x);
  1201. END;
  1202. /
  1203.  
  1204. /
  1205. BEGIN
  1206.  pisz('hello');
  1207. END;
  1208. /
  1209.  
  1210. EXECUTE  pisz('hello2');
  1211. exec  pisz('hello2');
  1212.  
  1213. CREATE TABLE dep2 AS SELECT * FROM departments
  1214.  WHERE 1=2;
  1215.  
  1216. CREATE sequence dep2_seq START WITH 10
  1217.  increment BY 10;
  1218.  
  1219. /
  1220. CREATE OR REPLACE PROCEDURE add_department(
  1221. p_department_name VARCHAR2,p_manager_id NUMBER,p_location_id NUMBER) IS  
  1222. e1 EXCEPTION;
  1223. e2 EXCEPTION;
  1224. e3 EXCEPTION;
  1225. i NUMBER;
  1226. BEGIN
  1227.  SELECT COUNT(*) INTO i
  1228.    FROM departments
  1229.     WHERE department_name=p_department_name;
  1230.  IF i>0 THEN
  1231.     RAISE e1;
  1232.  END IF;      
  1233.  SELECT COUNT(*) INTO i
  1234.    FROM employees
  1235.     WHERE manager_id = p_manager_id;  
  1236.  IF i=0 THEN
  1237.     RAISE e2;
  1238.  END IF;      
  1239.  SELECT COUNT(*) INTO i
  1240.    FROM locations
  1241.     WHERE location_id = p_location_id;  
  1242.  IF i=0 THEN
  1243.     RAISE e3;
  1244.  END IF;      
  1245.  
  1246.  INSERT INTO dep2
  1247.  VALUES(dep2_seq.NEXTVAL,p_department_name,p_manager_id,p_location_id);
  1248.  
  1249. EXCEPTION
  1250.  WHEN e1 THEN
  1251.       pisz('jest juz department o takiej nazwie');
  1252.  WHEN e2 THEN
  1253.       pisz('nie ma takiego managera ');    
  1254.   WHEN e3 THEN
  1255.       pisz('nie ma takiej lokalizacji ');          
  1256. END;
  1257. /
  1258.  
  1259. EXECUTE add_department('IT3',100,1801);
  1260.  
  1261. SELECT *
  1262.  FROM USER_DEPENDENCIES
  1263.   WHERE name='ADD_DEPARTMENT';
  1264.  
  1265.  
  1266.  
  1267. /
  1268. CREATE OR REPLACE PROCEDURE podwzyka(p_employee_id NUMBER ) IS
  1269. PRAGMA autonomous_transaction ;
  1270. e_brak_pracownika EXCEPTION;
  1271. BEGIN
  1272.   UPDATE employees
  1273.     SET salary=salary+100
  1274.      WHERE employee_id = p_employee_id;
  1275.   IF sql%rowcount=0 THEN
  1276.      RAISE e_brak_pracownika;
  1277.   END IF;  
  1278.  
  1279.   COMMIT;
  1280.   EXCEPTION
  1281.    WHEN  e_brak_pracownika THEN
  1282.         pisz('brak pracownika');
  1283.         ROLLBACK;
  1284. END ;
  1285. /
  1286.  
  1287. UPDATE departments  
  1288.  SET department_name='IT';
  1289. EXECUTE podwzyka(99);
  1290. ROLLBACK ;
  1291. SELECT * FROM departments;
  1292.  
  1293. /*
  1294. Napisz procedure ktora bedzie dawac podwyzke o kwote
  1295. ktora podamy jako parametr najslabiej zarabiajacemu
  1296. pracowniwkowi w roku ktory podamy jako parametr.
  1297. obasluz wyjatki ujemna_podyzke i brak_pracownikow.
  1298. procedura ma zawierac transakcje amutomiczna.
  1299. */
  1300.  
  1301. /
  1302. CREATE OR REPLACE PROCEDURE daj(kwota NUMBER,rok NUMBER)  IS
  1303. PRAGMA autonomous_transaction;
  1304. e_ujemna EXCEPTION;
  1305. e_zly_rok EXCEPTION;
  1306. BEGIN
  1307.  
  1308. IF kwota<0 THEN
  1309.    RAISE e_ujemna;
  1310. END IF;
  1311.  
  1312. UPDATE employees
  1313.  SET salary=salary+kwota
  1314.   WHERE employee_id=(
  1315. SELECT employee_id
  1316.  FROM (
  1317. SELECT employee_id,
  1318.      ROW_NUMBER() over (ORDER BY salary) rank1
  1319.   FROM employees
  1320.    WHERE EXTRACT(YEAR FROM hire_date)=rok)
  1321.    WHERE rank1=1 );
  1322.  
  1323. IF sql%rowcount=0 THEN
  1324.    RAISE e_zly_rok;
  1325. END IF;  
  1326. COMMIT;    
  1327. EXCEPTION
  1328.  WHEN  e_ujemna THEN pisz('ujemna ');
  1329.  ROLLBACK;
  1330.  WHEN  e_zly_rok THEN pisz(' brak pracownikow ');
  1331.  ROLLBACK;
  1332. END;
  1333. /
  1334.  
  1335. 513-120-171
  1336. /
  1337. CREATE OR REPLACE PROCEDURE wypisz IS
  1338. CURSOR k IS SELECT * FROM employees;
  1339. BEGIN
  1340.  FOR w IN k LOOP
  1341.    pisz(w.first_name||' '||w.last_name);
  1342.  END LOOP;
  1343. END;
  1344. /
  1345.  
  1346. EXECUTE wypisz;
  1347.  
  1348. /
  1349. CREATE OR REPLACE PROCEDURE test123(x IN NUMBER) IS
  1350. BEGIN
  1351.  NULL;
  1352. END;
  1353. /
  1354.  
  1355. /
  1356. CREATE OR REPLACE PROCEDURE liczba_rok(rok IN INTEGER, liczba OUT NUMBER) IS
  1357. BEGIN
  1358.  SELECT COUNT(*) INTO liczba
  1359.    FROM employees  
  1360.     WHERE EXTRACT(YEAR FROM hire_date)=rok;
  1361.  pisz('w roku '||rok||' zatrudniono '||liczba);  
  1362. END;
  1363. /
  1364.  
  1365. /
  1366. DECLARE
  1367.  rok NUMBER:=2005;
  1368.  liczba NUMBER;
  1369. BEGIN
  1370.  liczba_rok(rok,liczba);
  1371.  pisz(liczba);
  1372. END;
  1373. /
  1374.  
  1375. /*
  1376. napisz procedure ktora przyjmie jako parameter wejscia nazwe zawodu
  1377. a zwroci sume zarobkow w tym zawodzie powiekszona o 23%.
  1378. */
  1379.  
  1380.  
  1381. /
  1382. DECLARE
  1383.  plik UTL_FILE.file_type;
  1384. BEGIN
  1385.  plik:=UTL_FILE.fopen('DANE2','plik.txt','a');
  1386.  UTL_FILE.put_line(plik,'jaki tekst');
  1387.  UTL_FILE.fclose(plik);
  1388. END;
  1389. /
  1390.  
  1391.  
  1392. /
  1393. DECLARE
  1394.  plik UTL_FILE.file_type;
  1395.  CURSOR k IS SELECT first_name,last_name,ROUND(salary/12,2) miesieczne,
  1396.                     department_name
  1397.                 FROM employees
  1398.                  join departments using(department_id);        
  1399. BEGIN
  1400.  plik:=UTL_FILE.fopen('DANE2','raport1.csv','a');
  1401.    FOR w IN k LOOP
  1402.        UTL_FILE.put_line(plik,w.first_name||';'||w.last_name||';'||w.miesieczne||';'||w.department_name);
  1403.    END LOOP;
  1404.  UTL_FILE.fclose(plik);
  1405. END;
  1406.  
  1407.  
  1408.  
  1409.  
  1410.  
  1411.  
  1412.  
  1413.  
  1414.  
  1415.  
  1416.  
  1417.  
  1418.  
  1419.  
  1420.  
  1421.  
  1422.  
  1423.  
  1424.  
  1425.  
  1426.  
  1427.  
  1428.  
  1429.  
  1430.  
  1431.  
  1432.  
  1433.  
  1434.  
  1435.  
  1436.  
  1437.  
  1438.  
  1439.  
  1440.  
  1441.  
  1442.  
  1443.  
  1444.  
  1445.  
  1446.  
  1447.  
  1448.  
  1449.  
  1450.  
  1451.  
  1452.  
  1453.  
  1454.  
  1455.  
  1456.  
  1457.  
  1458.  
  1459.  
  1460.  
  1461.  
  1462.  
  1463.  
  1464.  
  1465.  
  1466.  
  1467.  
  1468.  
  1469.  
  1470.  
  1471.  
  1472.  
  1473.  
  1474.  
  1475.  
  1476.  
  1477.  
  1478.  
  1479.  
  1480.    
  1481.  
  1482.  
  1483.  
  1484.  
  1485.  
  1486.  
  1487.  
  1488.  
  1489.  
  1490.  
  1491.  
  1492.  
  1493.  
  1494.  
  1495.      
  1496.  
  1497.  
  1498.  
  1499.  
  1500.  
  1501.  
  1502.  
  1503.  
  1504.  
  1505.  
  1506.  
  1507.    
  1508.  
  1509.  
  1510.  
  1511.  
  1512.  
  1513.  
  1514.  
  1515.  
  1516.  
  1517.  
  1518.  
  1519.  
  1520.  
  1521.  
  1522.  
  1523.  
  1524.  
  1525.  
  1526.  
  1527.  
  1528.  
  1529.  
  1530.  
  1531.  
  1532.  
  1533.  
  1534.  
  1535.  
  1536.  
  1537.  
  1538.  
  1539.  
  1540.  
  1541.  
  1542.  
  1543.  
  1544.  
  1545.  
  1546.  
  1547.  
  1548.  
  1549.  
  1550.  
  1551.  
  1552.  
  1553.  
  1554.  
  1555.  
  1556.  
  1557.  
  1558.  
  1559.  
  1560.  
  1561.  
  1562.  
  1563.  
  1564.  
  1565.  
  1566.  
  1567.  
  1568.  
  1569.  
  1570.  
  1571.  
  1572.  
  1573.  
  1574.  
  1575.  
  1576.  
  1577.  
  1578.  
  1579.  
  1580.  
  1581.  
  1582.  
  1583.  
  1584.  
  1585.  
  1586.  
  1587.  
  1588.  
  1589.  
  1590.  
  1591.  
  1592.  
  1593.  
  1594.  
  1595.  
  1596.  
  1597.  
  1598.  
  1599.  
  1600.  
  1601.  
  1602. CREATE OR REPLACE
  1603. PROCEDURE reset_seq( p_seq_name IN VARCHAR2 )
  1604. IS
  1605.     l_val NUMBER;
  1606. BEGIN
  1607.     EXECUTE IMMEDIATE
  1608.     'select ' || p_seq_name || '.nextval from dual' INTO l_val;
  1609.  
  1610.     EXECUTE IMMEDIATE
  1611.     'alter sequence ' || p_seq_name || ' increment by -' || l_val ||
  1612.                                                           ' minvalue 0';
  1613.  
  1614.     EXECUTE IMMEDIATE
  1615.     'select ' || p_seq_name || '.nextval from dual' INTO l_val;
  1616.  
  1617.     EXECUTE IMMEDIATE
  1618.     'alter sequence ' || p_seq_name || ' increment by 1 minvalue 0';
  1619. END;
  1620.  
  1621.  
  1622.  
  1623.  
  1624.  
  1625.  
  1626.  
  1627.  
  1628.  
  1629.  
  1630.  
  1631.  
  1632.  
  1633.  
  1634.  
  1635.  
  1636.  
  1637.  
  1638.  
  1639.  
  1640.  
  1641.  
  1642.  
  1643.  
  1644.  
  1645.  
  1646.  
  1647.  
  1648.  
  1649.  
  1650.  
  1651.  
  1652.  
  1653.  
  1654.  
  1655.  
  1656.  
  1657.  
  1658.  
  1659.  
  1660.  
  1661.  
  1662.  
  1663.  
  1664.  
  1665.  
  1666.  
  1667.  
  1668.  
  1669.  
  1670.  
  1671.  
  1672.  
  1673.  
  1674.  
  1675.  
  1676.  
  1677.  
  1678.  
  1679.  
  1680.  
  1681.  
  1682.  
  1683.  
  1684.  
  1685.  
  1686.  
  1687.  
  1688.  
  1689.  
  1690.  
  1691.  
  1692.  
  1693.  
  1694.  
  1695.  
  1696.  
  1697.  
  1698.  
  1699.  
  1700.  
  1701.  
  1702.  
  1703. /
  1704. BEGIN
  1705.  DBMS_OUTPUT.put_line('Witaj '|||'Swiecie');
  1706. END;
  1707. /
Add Comment
Please, Sign In to add comment