<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ca">
	<id>http://wiki.joanillo.org/index.php?action=history&amp;feed=atom&amp;title=DAI-C8-EC%3A_Exercicis_proposats</id>
	<title>DAI-C8-EC: Exercicis proposats - Historial de revisió</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.joanillo.org/index.php?action=history&amp;feed=atom&amp;title=DAI-C8-EC%3A_Exercicis_proposats"/>
	<link rel="alternate" type="text/html" href="http://wiki.joanillo.org/index.php?title=DAI-C8-EC:_Exercicis_proposats&amp;action=history"/>
	<updated>2026-08-30T04:51:19Z</updated>
	<subtitle>Historial de revisió per a aquesta pàgina del wiki</subtitle>
	<generator>MediaWiki 1.34.2</generator>
	<entry>
		<id>http://wiki.joanillo.org/index.php?title=DAI-C8-EC:_Exercicis_proposats&amp;diff=3848&amp;oldid=prev</id>
		<title>Joan: New page: ==Objectius== Unitat Didàctica: UD 2. Cursors  L'alumne ja haurà instal.lat l'Oracle (client o servidor) en el seu ordinador, i podrà treballar en local o en el servidor 192.168.0.10. A...</title>
		<link rel="alternate" type="text/html" href="http://wiki.joanillo.org/index.php?title=DAI-C8-EC:_Exercicis_proposats&amp;diff=3848&amp;oldid=prev"/>
		<updated>2009-11-05T17:48:28Z</updated>

		<summary type="html">&lt;p&gt;New page: ==Objectius== Unitat Didàctica: UD 2. Cursors  L&amp;#039;alumne ja haurà instal.lat l&amp;#039;Oracle (client o servidor) en el seu ordinador, i podrà treballar en local o en el servidor 192.168.0.10. A...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Pàgina nova&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==Objectius==&lt;br /&gt;
Unitat Didàctica: UD 2. Cursors&lt;br /&gt;
&lt;br /&gt;
L'alumne ja haurà instal.lat l'Oracle (client o servidor) en el seu ordinador, i podrà treballar en local o en el servidor 192.168.0.10. Així mateix, s'espera que ja estigui en condicions per poder treballar a casa.&lt;br /&gt;
&lt;br /&gt;
==Desenvolupament==&lt;br /&gt;
Exercicis a realitzar:&lt;br /&gt;
&lt;br /&gt;
1. Desenvolupar un procediment que visualitzi el cognom i la data d'alta de tots els empleats, ordenats per cognom.&lt;br /&gt;
&lt;br /&gt;
2. Codificar un procediment que mostri el nom de cada departament i el número d'empleats que té.&lt;br /&gt;
&lt;br /&gt;
3. Escriure un procediment que rebi una cadena i visualitzi el cognom i el número d'empleat de tots els empleats el cognom dels quals contingui la cadena especificada. Al final visualitzar el número d'empleats que es mostren.&lt;br /&gt;
&lt;br /&gt;
4. Escriure un programa que visualitzi el cognom i el salari dels cinc empleats que tenen el salari més alt.&lt;br /&gt;
&lt;br /&gt;
5. Codificar un programa que visualitzi els dos empleats que guanyen menys de cada ofici.&lt;br /&gt;
&lt;br /&gt;
6. Escriure un programa que mostri, en un format adequat, la següent informació:&lt;br /&gt;
&lt;br /&gt;
- Per cada empleat: cognom i salari.&lt;br /&gt;
- Per cada departament: Número d'empleats i suma dels salaris del departament.&lt;br /&gt;
- Al final del llistat: Número total d'empleats i suma de tots els salaris&lt;br /&gt;
&lt;br /&gt;
==Entrega==&lt;br /&gt;
* entregar els fitxers DAI2AXX_script_NA3.sql i DAI2AXX_NA3.log. Si has treballat per parelles: DAI2AXXXX_script_NA3.sql i DAI2AXXXX_NA3.log, indicant a dins clarament el nom i el número de classe (comentaris amb REM). Exercici individual o per parelles.&lt;br /&gt;
* entregar al Moodle: http://192.168.0.15/moodle&lt;br /&gt;
&lt;br /&gt;
==Recursos==&lt;br /&gt;
===Solució dels exercicis===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1. Desenvolupar un procediment que visualitzi el cognom i la data d'alta de tots els empleats, ordenats per cognom.&lt;br /&gt;
&lt;br /&gt;
CREATE OR REPLACE PROCEDURE veure_empleat&lt;br /&gt;
AS&lt;br /&gt;
	CURSOR c_emple IS &lt;br /&gt;
SELECT cognom, DATA_ALT&lt;br /&gt;
		FROM EMPLE&lt;br /&gt;
		ORDER BY COGNOM;&lt;br /&gt;
	v_cognom VARCHAR2(10);&lt;br /&gt;
	v_data DATE;&lt;br /&gt;
BEGIN&lt;br /&gt;
	OPEN c_emple;&lt;br /&gt;
	FETCH c_emple into v_cognom, v_data;&lt;br /&gt;
	WHILE c_emple%FOUND LOOP&lt;br /&gt;
	  DBMS_OUTPUT.PUT_LINE( v_cognom||' * '||v_data);&lt;br /&gt;
	  FETCH c_emple into v_cognom,v_data; &lt;br /&gt;
	END LOOP;&lt;br /&gt;
	CLOSE c_emple;&lt;br /&gt;
END veure_empleat;&lt;br /&gt;
/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2. Codificar un procediment que mostri el nom de cada departament i el número d'empleats que té.&lt;br /&gt;
 &lt;br /&gt;
CREATE OR REPLACE PROCEDURE veure_emple_depart&lt;br /&gt;
AS&lt;br /&gt;
	CURSOR c_emple IS &lt;br /&gt;
		SELECT dnom, COUNT(emp_no)&lt;br /&gt;
		FROM emple e, depart d&lt;br /&gt;
		WHERE d.dept_no = e.dept_no(+)&lt;br /&gt;
		GROUP BY dnom;&lt;br /&gt;
	v_dnom depart.dnom%TYPE;&lt;br /&gt;
	v_num_emple BINARY_INTEGER;&lt;br /&gt;
BEGIN&lt;br /&gt;
	OPEN c_emple;&lt;br /&gt;
	FETCH c_emple into v_dnom, v_num_emple;&lt;br /&gt;
	WHILE c_emple%FOUND LOOP&lt;br /&gt;
	  DBMS_OUTPUT.PUT_LINE(v_dnom||' * '||v_num_emple);&lt;br /&gt;
	  FETCH c_emple into v_dnom,v_num_emple;&lt;br /&gt;
	END LOOP;&lt;br /&gt;
	CLOSE c_emple;&lt;br /&gt;
END veure_emple_depart;&lt;br /&gt;
/&lt;br /&gt;
&lt;br /&gt;
3. Escriure un procediment que rebi una cadena i visualitzi el cognom i el número d'empleat de tots els empleats el cognom dels quals contingui la cadena especificada. Al final visualitzar el número d'empleats que es mostren.&lt;br /&gt;
&lt;br /&gt;
CREATE OR REPLACE PROCEDURE veure_empleat_cognom(&lt;br /&gt;
	cadena VARCHAR2)&lt;br /&gt;
AS&lt;br /&gt;
	cad VARCHAR2(10);&lt;br /&gt;
	CURSOR c_emple IS &lt;br /&gt;
		SELECT cognom, emp_no FROM emple&lt;br /&gt;
	WHERE cognom LIKE cad;&lt;br /&gt;
	vr_emple c_emple%ROWTYPE;&lt;br /&gt;
BEGIN&lt;br /&gt;
	cad :='%'||cadena||'%';&lt;br /&gt;
	OPEN c_emple;&lt;br /&gt;
	FETCH c_emple INTO vr_emple;&lt;br /&gt;
	WHILE (c_emple%FOUND) LOOP&lt;br /&gt;
	  DBMS_OUTPUT.PUT_LINE(vr_emple.emp_no||' * '&lt;br /&gt;
||vr_emple.cognom);&lt;br /&gt;
	  FETCH c_emple INTO vr_emple; &lt;br /&gt;
	END LOOP;&lt;br /&gt;
	DBMS_OUTPUT.PUT_LINE('NUMERO DE EMPLEATS: '&lt;br /&gt;
|| c_emple%ROWCOUNT);&lt;br /&gt;
	CLOSE c_emple;&lt;br /&gt;
END veure_empleat_cognom;&lt;br /&gt;
/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4. Escriure un programa que visualitzi el cognom i el salari dels cinc empleats que tenen el salari més alt.&lt;br /&gt;
&lt;br /&gt;
CREATE OR REPLACE PROCEDURE emp_5maxsal&lt;br /&gt;
AS&lt;br /&gt;
	CURSOR c_emp IS&lt;br /&gt;
		SELECT cognom, salari FROM emple&lt;br /&gt;
		ORDER BY salari DESC;&lt;br /&gt;
	vr_emp c_emp%ROWTYPE;&lt;br /&gt;
	i NUMBER;&lt;br /&gt;
BEGIN&lt;br /&gt;
	i:=1;&lt;br /&gt;
	OPEN c_emp;&lt;br /&gt;
	FETCH c_emp INTO vr_emp;&lt;br /&gt;
	WHILE c_emp%FOUND AND i&amp;lt;=5 LOOP	&lt;br /&gt;
	  DBMS_OUTPUT.PUT_LINE(vr_emp.cognom ||&lt;br /&gt;
' * '|| vr_emp.salari);	    &lt;br /&gt;
	  FETCH c_emp INTO vr_emp;&lt;br /&gt;
	  i:=I+1;&lt;br /&gt;
	END LOOP;&lt;br /&gt;
	CLOSE c_emp;&lt;br /&gt;
END emp_5maxsal;&lt;br /&gt;
/&lt;br /&gt;
&lt;br /&gt;
5. Codificar un programa que visualitzi els dos empleats que guanyen menys de cada ofici.&lt;br /&gt;
&lt;br /&gt;
CREATE OR REPLACE PROCEDURE emp_2minsal&lt;br /&gt;
AS&lt;br /&gt;
	CURSOR c_emp IS&lt;br /&gt;
	SELECT cognom, ofici, salari FROM emple&lt;br /&gt;
		ORDER BY ofici, salari;&lt;br /&gt;
	vr_emp c_emp%ROWTYPE;&lt;br /&gt;
	ofici_ant EMPLE.OFICI%TYPE;&lt;br /&gt;
	i NUMBER;&lt;br /&gt;
BEGIN&lt;br /&gt;
	OPEN c_emp;&lt;br /&gt;
	ofici_ant:='*';&lt;br /&gt;
	FETCH c_emp INTO vr_emp;&lt;br /&gt;
	WHILE c_emp%FOUND LOOP	&lt;br /&gt;
	  IF ofici_ant &amp;lt;&amp;gt; vr_emp.ofici THEN&lt;br /&gt;
	    ofici_ant := vr_emp.ofici;&lt;br /&gt;
	    i := 1;&lt;br /&gt;
	  END IF;&lt;br /&gt;
	  IF i &amp;lt;= 2 THEN&lt;br /&gt;
	    DBMS_OUTPUT.PUT_LINE(vr_emp.ofici||' * '&lt;br /&gt;
||vr_emp.cognom||' * '&lt;br /&gt;
||vr_emp.salari);	    &lt;br /&gt;
	  END IF;&lt;br /&gt;
	  FETCH c_emp INTO vr_emp;&lt;br /&gt;
	  i:=I+1;&lt;br /&gt;
	END LOOP;&lt;br /&gt;
	CLOSE c_emp;&lt;br /&gt;
END emp_2minsal;&lt;br /&gt;
/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
6. Escriure un programa que mostri, en un format adequat, la següent informació:&lt;br /&gt;
- Per cada empleat: cognom i salari.&lt;br /&gt;
- Per cada departament: Número d'empleats i suma dels salaris del departament.&lt;br /&gt;
- Al final del llistat: Número total d'empleats i suma de tots els salaris&lt;br /&gt;
&lt;br /&gt;
CREATE OR REPLACE PROCEDURE llistar_emple&lt;br /&gt;
AS&lt;br /&gt;
	CURSOR c1 IS&lt;br /&gt;
		SELECT cognom, salari, dept_no FROM emple&lt;br /&gt;
	ORDER BY dept_no, cognom;&lt;br /&gt;
vr_emp c1%ROWTYPE;&lt;br /&gt;
	dep_ant EMPLE.DEPT_NO%TYPE;&lt;br /&gt;
	cont_emple NUMBER(4) DEFAULT 0;&lt;br /&gt;
	sum_sal NUMBER(9) DEFAULT 0;&lt;br /&gt;
	tot_emple NUMBER(4) DEFAULT 0;&lt;br /&gt;
	tot_sal NUMBER(10) DEFAULT 0;&lt;br /&gt;
BEGIN&lt;br /&gt;
	OPEN c1;&lt;br /&gt;
	FETCH c1 INTO vr_emp;&lt;br /&gt;
	IF c1%FOUND THEN&lt;br /&gt;
		dep_ant := vr_emp.dept_no;&lt;br /&gt;
	END IF;&lt;br /&gt;
WHILE c1%FOUND LOOP&lt;br /&gt;
&lt;br /&gt;
		/* Comprovació nou departament i resum */&lt;br /&gt;
IF dep_ant &amp;lt;&amp;gt; vr_emp.dept_no THEN	&lt;br /&gt;
		     	DBMS_OUTPUT.PUT_LINE('*** DEPT: ' || dep_ant ||&lt;br /&gt;
   ' NUM. EMPLEATS: '||cont_emple ||&lt;br /&gt;
    	    				   ' SUM. SALARIS:  '||sum_sal);&lt;br /&gt;
dep_ant := vr_emp.dept_no;&lt;br /&gt;
 			tot_emple := tot_emple + cont_emple;&lt;br /&gt;
	tot_sal:= tot_sal + sum_sal;&lt;br /&gt;
     cont_emple:=0;&lt;br /&gt;
	    		sum_sal:=0; &lt;br /&gt;
		END IF;&lt;br /&gt;
&lt;br /&gt;
/* Línies de detall */&lt;br /&gt;
	     DBMS_OUTPUT.PUT_LINE(RPAD(vr_emp.cognom,10)|| ' * '&lt;br /&gt;
||LPAD(TO_CHAR(vr_emp.salari,'9,999,999'),12));&lt;br /&gt;
	  	&lt;br /&gt;
		/* Incrementar i acumular */&lt;br /&gt;
cont_emple := cont_emple + 1;&lt;br /&gt;
	  	sum_sal:=sum_sal + vr_emp.salari; &lt;br /&gt;
&lt;br /&gt;
	  	FETCH c1 INTO vr_emp;&lt;br /&gt;
	END LOOP;&lt;br /&gt;
	CLOSE c1;&lt;br /&gt;
&lt;br /&gt;
IF cont_emple &amp;gt; 0 THEN&lt;br /&gt;
&lt;br /&gt;
		/* Escriure dades de l'últim departament */&lt;br /&gt;
		DBMS_OUTPUT.PUT_LINE('*** DEPT: ' || dep_ant ||&lt;br /&gt;
   ' NUM EMPLEATS: '|| cont_emple ||&lt;br /&gt;
    	    				   ' SUM. SALARIS:  '||sum_sal);&lt;br /&gt;
dep_ant := vr_emp.dept_no;&lt;br /&gt;
 			tot_emple := tot_emple + cont_emple;&lt;br /&gt;
	tot_sal:= tot_sal + sum_sal;&lt;br /&gt;
     cont_emple:=0;&lt;br /&gt;
	    		sum_sal:=0; &lt;br /&gt;
&lt;br /&gt;
		/* Escriure totals informe */&lt;br /&gt;
         DBMS_OUTPUT.PUT_LINE(' ****** NUMERO TOTAL EMPLEATS: '&lt;br /&gt;
||tot_emple ||&lt;br /&gt;
' TOTAL SALARIS: '|| tot_sal);&lt;br /&gt;
	END IF;&lt;br /&gt;
END llistar_emple;&lt;br /&gt;
/&lt;br /&gt;
&lt;br /&gt;
/* Nota: aquest procediment pot escriure's de forma que la visualització dels resultats resulti més clara incloent línies de separació, capçaleres de columnes, etc. */&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Altres exercicis per estudiar===&lt;br /&gt;
Les taules que necessites&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rem &lt;br /&gt;
rem $Header: exampbld.sql,v 1.1 1992/12/02 16:27:31 GCLOSSMA Exp $ &lt;br /&gt;
rem &lt;br /&gt;
Rem  Copyright (c) 1991 by Oracle Corporation &lt;br /&gt;
Rem    NAME&lt;br /&gt;
Rem      exampbld.sql - &lt;br /&gt;
Rem    DESCRIPTION&lt;br /&gt;
Rem      &lt;br /&gt;
Rem    RETURNS&lt;br /&gt;
Rem &lt;br /&gt;
Rem    NOTES&lt;br /&gt;
Rem      &lt;br /&gt;
Rem    MODIFIED   (MM/DD/YY)&lt;br /&gt;
Rem     gclossma   12/02/92 -  Creation &lt;br /&gt;
set compatibility V7&lt;br /&gt;
/&lt;br /&gt;
drop table accounts&lt;br /&gt;
/&lt;br /&gt;
create table accounts(&lt;br /&gt;
    account_id  number(4) not null,&lt;br /&gt;
    bal         number(11,2))&lt;br /&gt;
/&lt;br /&gt;
create unique index accounts_index on accounts (account_id)&lt;br /&gt;
/&lt;br /&gt;
drop table action&lt;br /&gt;
/&lt;br /&gt;
create table action(&lt;br /&gt;
    account_id  number(4) not null,&lt;br /&gt;
    oper_type   char(1) not null,&lt;br /&gt;
    new_value   number(11,2),&lt;br /&gt;
    status      char(45),&lt;br /&gt;
    time_tag    date not null)&lt;br /&gt;
/&lt;br /&gt;
drop table bins&lt;br /&gt;
/&lt;br /&gt;
create table bins(&lt;br /&gt;
    bin_num     number(2) not null,&lt;br /&gt;
    part_num    number(4),&lt;br /&gt;
    amt_in_bin  number(4))&lt;br /&gt;
/&lt;br /&gt;
drop table data_table&lt;br /&gt;
/&lt;br /&gt;
create table data_table(&lt;br /&gt;
    exper_num  number(2),&lt;br /&gt;
    n1         number(5),&lt;br /&gt;
    n2         number(5),&lt;br /&gt;
    n3         number(5))&lt;br /&gt;
/&lt;br /&gt;
drop table emp&lt;br /&gt;
/&lt;br /&gt;
create table emp(&lt;br /&gt;
    empno      number(4) not null,&lt;br /&gt;
    ename      varchar2(10),&lt;br /&gt;
    job        varchar2(9),&lt;br /&gt;
    mgr        number(4),&lt;br /&gt;
    hiredate   date,&lt;br /&gt;
    sal        number(7,2),&lt;br /&gt;
    comm       number(7,2),&lt;br /&gt;
    deptno     number(2))&lt;br /&gt;
/&lt;br /&gt;
drop table inventory&lt;br /&gt;
/&lt;br /&gt;
create table inventory(&lt;br /&gt;
    prod_id     number(5) not null,&lt;br /&gt;
    product     char(15),&lt;br /&gt;
    quantity    number(5))&lt;br /&gt;
/&lt;br /&gt;
drop table journal&lt;br /&gt;
/&lt;br /&gt;
create table journal(&lt;br /&gt;
    account_id   number(4) not null,&lt;br /&gt;
    action       char(45) not null,&lt;br /&gt;
    amount       number(11,2),&lt;br /&gt;
    date_tag     date not null)&lt;br /&gt;
/&lt;br /&gt;
drop table num1_tab&lt;br /&gt;
/&lt;br /&gt;
create table num1_tab(&lt;br /&gt;
    sequence   number(3) not null,&lt;br /&gt;
    num        number(4))&lt;br /&gt;
/&lt;br /&gt;
drop table num2_tab&lt;br /&gt;
/&lt;br /&gt;
create table num2_tab(&lt;br /&gt;
    sequence   number(3) not null,&lt;br /&gt;
    num        number(4))&lt;br /&gt;
/&lt;br /&gt;
drop table purchase_record&lt;br /&gt;
/&lt;br /&gt;
create table purchase_record(&lt;br /&gt;
    mesg        char(45),&lt;br /&gt;
    purch_date  date)&lt;br /&gt;
/&lt;br /&gt;
drop table ratio&lt;br /&gt;
/&lt;br /&gt;
create table ratio(&lt;br /&gt;
    sample_id  number(3) not null,&lt;br /&gt;
    ratio      number)&lt;br /&gt;
/&lt;br /&gt;
drop table result_table&lt;br /&gt;
/&lt;br /&gt;
create table result_table(&lt;br /&gt;
    sample_id  number(3) not null,&lt;br /&gt;
    x          number,&lt;br /&gt;
    y          number)&lt;br /&gt;
/&lt;br /&gt;
drop table sum_tab&lt;br /&gt;
/&lt;br /&gt;
create table sum_tab(&lt;br /&gt;
    sequence   number(3) not null,&lt;br /&gt;
    sum        number(5))&lt;br /&gt;
/&lt;br /&gt;
drop table temp&lt;br /&gt;
/&lt;br /&gt;
create table temp(&lt;br /&gt;
    num_col1   number(9,4),&lt;br /&gt;
    num_col2   number(9,4),&lt;br /&gt;
    char_col   char(55))&lt;br /&gt;
/&lt;br /&gt;
create or replace package personnel as&lt;br /&gt;
    type charArrayTyp is table of varchar2(10)&lt;br /&gt;
        index by binary_integer;&lt;br /&gt;
    type numArrayTyp is table of float&lt;br /&gt;
        index by binary_integer;&lt;br /&gt;
    procedure get_employees(&lt;br /&gt;
        dept_number in     integer,&lt;br /&gt;
        batch_size  in     integer,&lt;br /&gt;
        found       in out integer,&lt;br /&gt;
        done_fetch  out    integer,&lt;br /&gt;
        emp_name    out    charArrayTyp,&lt;br /&gt;
        job_title   out    charArrayTyp,&lt;br /&gt;
        salary      out    numArrayTyp);&lt;br /&gt;
end personnel;&lt;br /&gt;
/&lt;br /&gt;
create or replace package body personnel as&lt;br /&gt;
    cursor get_emp (dept_number integer) is&lt;br /&gt;
        select ename, job, sal from emp&lt;br /&gt;
            where deptno = dept_number;&lt;br /&gt;
    procedure get_employees(&lt;br /&gt;
        dept_number in     integer,&lt;br /&gt;
        batch_size  in     integer,&lt;br /&gt;
        found       in out integer,&lt;br /&gt;
        done_fetch  out    integer,&lt;br /&gt;
        emp_name    out    charArrayTyp,&lt;br /&gt;
        job_title   out    charArrayTyp,&lt;br /&gt;
        salary      out    numArrayTyp) is&lt;br /&gt;
    begin&lt;br /&gt;
        if not get_emp%isopen then&lt;br /&gt;
            open get_emp(dept_number);&lt;br /&gt;
        end if;&lt;br /&gt;
        done_fetch := 0;&lt;br /&gt;
        found := 0;&lt;br /&gt;
        for i in 1..batch_size loop&lt;br /&gt;
            fetch get_emp into emp_name(i),&lt;br /&gt;
                    job_title(i), salary(i);&lt;br /&gt;
            if get_emp%notfound then&lt;br /&gt;
                close get_emp;&lt;br /&gt;
                done_fetch := 1;&lt;br /&gt;
                exit;&lt;br /&gt;
            else&lt;br /&gt;
                found := found + 1;&lt;br /&gt;
            end if;&lt;br /&gt;
        end loop;&lt;br /&gt;
    end get_employees;&lt;br /&gt;
end personnel;&lt;br /&gt;
/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
rem &lt;br /&gt;
rem $Header: examplod.sql,v 1.1 1992/12/02 16:27:53 GCLOSSMA Exp $ &lt;br /&gt;
rem &lt;br /&gt;
Rem  Copyright (c) 1991 by Oracle Corporation &lt;br /&gt;
Rem    NAME&lt;br /&gt;
Rem      examplod.sql - &lt;br /&gt;
Rem    DESCRIPTION&lt;br /&gt;
Rem      &lt;br /&gt;
Rem    RETURNS&lt;br /&gt;
Rem &lt;br /&gt;
Rem    NOTES&lt;br /&gt;
Rem      &lt;br /&gt;
Rem    MODIFIED   (MM/DD/YY)&lt;br /&gt;
Rem     gclossma   12/02/92 -  Creation &lt;br /&gt;
delete from accounts&lt;br /&gt;
/&lt;br /&gt;
insert into accounts values (1,1000.00)&lt;br /&gt;
/&lt;br /&gt;
insert into accounts values (2,2000.00)&lt;br /&gt;
/&lt;br /&gt;
insert into accounts values (3,1500.00)&lt;br /&gt;
/&lt;br /&gt;
insert into accounts values (4,6500.00)&lt;br /&gt;
/&lt;br /&gt;
insert into accounts values (5,500.00)&lt;br /&gt;
/&lt;br /&gt;
delete from action&lt;br /&gt;
/&lt;br /&gt;
insert into action values&lt;br /&gt;
	(3,'u',599,null,sysdate)&lt;br /&gt;
/&lt;br /&gt;
insert into action values&lt;br /&gt;
	(6,'i',20099,null, sysdate)&lt;br /&gt;
/&lt;br /&gt;
insert into action values&lt;br /&gt;
	(5,'d',null,null, sysdate)&lt;br /&gt;
/&lt;br /&gt;
insert into action values&lt;br /&gt;
	(7,'u',1599,null, sysdate)&lt;br /&gt;
/&lt;br /&gt;
insert into action values&lt;br /&gt;
	(1,'i',399,null,sysdate)&lt;br /&gt;
/&lt;br /&gt;
insert into action values&lt;br /&gt;
	(9,'d',null,null,sysdate)&lt;br /&gt;
/&lt;br /&gt;
insert into action values&lt;br /&gt;
	(10,'x',null,null,sysdate)&lt;br /&gt;
/&lt;br /&gt;
delete from bins&lt;br /&gt;
/&lt;br /&gt;
insert into bins values (1, 5469, 650)&lt;br /&gt;
/&lt;br /&gt;
insert into bins values (2, 7243, 450)&lt;br /&gt;
/&lt;br /&gt;
insert into bins values (3, 5469, 120)&lt;br /&gt;
/&lt;br /&gt;
insert into bins values (4, 5469, 300)&lt;br /&gt;
/&lt;br /&gt;
insert into bins values (5, 6085, 415)&lt;br /&gt;
/&lt;br /&gt;
insert into bins values (6, 5469, 280)&lt;br /&gt;
/&lt;br /&gt;
insert into bins values (7, 8159, 619)&lt;br /&gt;
/&lt;br /&gt;
delete from data_table&lt;br /&gt;
/&lt;br /&gt;
insert into data_table values&lt;br /&gt;
	(1, 10, 167, 17)&lt;br /&gt;
/&lt;br /&gt;
insert into data_table values&lt;br /&gt;
	(1, 16, 223, 35)&lt;br /&gt;
/&lt;br /&gt;
insert into data_table values&lt;br /&gt;
	(2, 34, 547, 2)&lt;br /&gt;
/&lt;br /&gt;
insert into data_table values&lt;br /&gt;
	(3, 23, 318, 11)&lt;br /&gt;
/&lt;br /&gt;
insert into data_table values&lt;br /&gt;
	(1, 17, 266, 15)&lt;br /&gt;
/&lt;br /&gt;
insert into data_table values&lt;br /&gt;
	(1, 20, 117, 9)&lt;br /&gt;
/&lt;br /&gt;
delete from emp&lt;br /&gt;
/&lt;br /&gt;
insert into emp values&lt;br /&gt;
	(7369,'SMITH','CLERK',7902,TO_DATE('12-17-80','MM-DD-YY'),&lt;br /&gt;
         800,NULL,20)&lt;br /&gt;
/&lt;br /&gt;
insert into emp values&lt;br /&gt;
	(7499,'ALLEN','SALESMAN',7698,TO_DATE('02-20-81','MM-DD-YY'),&lt;br /&gt;
         1600,300,30)&lt;br /&gt;
/&lt;br /&gt;
insert into emp values&lt;br /&gt;
	(7521,'WARD','SALESMAN',7698,TO_DATE('02-22-81','MM-DD-YY'),&lt;br /&gt;
         1250,500,30)&lt;br /&gt;
/&lt;br /&gt;
insert into emp values&lt;br /&gt;
	(7566,'JONES','MANAGER',7839,TO_DATE('04-02-81','MM-DD-YY'),&lt;br /&gt;
         2975,NULL,20)&lt;br /&gt;
/&lt;br /&gt;
insert into emp values&lt;br /&gt;
	(7654,'MARTIN','SALESMAN',7698,TO_DATE('09-28-81','MM-DD-YY'),&lt;br /&gt;
         1250,1400,30)&lt;br /&gt;
/&lt;br /&gt;
insert into emp values&lt;br /&gt;
	(7698,'BLAKE','MANAGER',7839,TO_DATE('05-1-81','MM-DD-YY'),&lt;br /&gt;
         2850,NULL,30)&lt;br /&gt;
/&lt;br /&gt;
insert into emp values&lt;br /&gt;
	(7782,'CLARK','MANAGER',7839,TO_DATE('06-9-81','MM-DD-YY'),&lt;br /&gt;
         2450,NULL,10)&lt;br /&gt;
/&lt;br /&gt;
insert into emp values&lt;br /&gt;
	(7788,'SCOTT','ANALYST',7566,SYSDATE-85,3000,NULL,20)&lt;br /&gt;
/&lt;br /&gt;
insert into emp values&lt;br /&gt;
	(7839,'KING','PRESIDENT',NULL,TO_DATE('11-17-81','MM-DD-YY'),&lt;br /&gt;
         5000,NULL,10)&lt;br /&gt;
/&lt;br /&gt;
insert into emp values&lt;br /&gt;
	(7844,'TURNER','SALESMAN',7698,TO_DATE('09-8-81','MM-DD-YY'),&lt;br /&gt;
         1500,0,30)&lt;br /&gt;
/&lt;br /&gt;
insert into emp values&lt;br /&gt;
	(7876,'ADAMS','CLERK',7788,SYSDATE-51,1100,NULL,20)&lt;br /&gt;
/&lt;br /&gt;
insert into emp values&lt;br /&gt;
	(7900,'JAMES','CLERK',7698,TO_DATE('12-3-81','MM-DD-YY'),&lt;br /&gt;
         950,NULL,30)&lt;br /&gt;
/&lt;br /&gt;
insert into emp values&lt;br /&gt;
	(7902,'FORD','ANALYST',7566,TO_DATE('12-3-81','MM-DD-YY'),&lt;br /&gt;
         3000,NULL,20)&lt;br /&gt;
/&lt;br /&gt;
insert into emp values&lt;br /&gt;
	(7934,'MILLER','CLERK',7782,TO_DATE('01-23-82','MM-DD-YY'),&lt;br /&gt;
         1300,NULL,10)&lt;br /&gt;
/&lt;br /&gt;
delete from inventory&lt;br /&gt;
/&lt;br /&gt;
insert into inventory values&lt;br /&gt;
	(1234, 'TENNIS RACKET', 3)&lt;br /&gt;
/&lt;br /&gt;
insert into inventory values&lt;br /&gt;
	(8159, 'GOLF CLUB', 4)&lt;br /&gt;
/&lt;br /&gt;
insert into inventory values&lt;br /&gt;
	(2741, 'SOCCER BALL', 2)&lt;br /&gt;
/&lt;br /&gt;
delete from journal&lt;br /&gt;
/&lt;br /&gt;
delete from num1_tab&lt;br /&gt;
/&lt;br /&gt;
insert into num1_tab values (1, 5)&lt;br /&gt;
/&lt;br /&gt;
insert into num1_tab values (2, 7)&lt;br /&gt;
/&lt;br /&gt;
insert into num1_tab values (3, 4)&lt;br /&gt;
/&lt;br /&gt;
insert into num1_tab values (4, 9)&lt;br /&gt;
/&lt;br /&gt;
delete from num2_tab&lt;br /&gt;
/&lt;br /&gt;
insert into num2_tab values (1, 15)&lt;br /&gt;
/&lt;br /&gt;
insert into num2_tab values (2, 19)&lt;br /&gt;
/&lt;br /&gt;
insert into num2_tab values (3, 27)&lt;br /&gt;
/&lt;br /&gt;
delete from purchase_record&lt;br /&gt;
/&lt;br /&gt;
delete from ratio&lt;br /&gt;
/&lt;br /&gt;
delete from result_table&lt;br /&gt;
/&lt;br /&gt;
insert into result_table values (130, 70, 87)&lt;br /&gt;
/&lt;br /&gt;
insert into result_table values (131, 77, 194)&lt;br /&gt;
/&lt;br /&gt;
insert into result_table values (132, 73, 0)&lt;br /&gt;
/&lt;br /&gt;
insert into result_table values (133, 81, 98)&lt;br /&gt;
/&lt;br /&gt;
delete from sum_tab&lt;br /&gt;
/&lt;br /&gt;
delete from temp&lt;br /&gt;
/&lt;br /&gt;
commit&lt;br /&gt;
/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===Solució===&lt;br /&gt;
I els procediments:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
em &lt;br /&gt;
rem $Header: examp4.sql,v 1.1 1992/05/12 22:03:08 RVASIRED Exp $ &lt;br /&gt;
rem &lt;br /&gt;
Rem  Copyright (c) 1991 by Oracle Corporation &lt;br /&gt;
Rem    NAME&lt;br /&gt;
Rem      examp4.sql - &lt;br /&gt;
Rem    DESCRIPTION&lt;br /&gt;
Rem      &lt;br /&gt;
Rem    RETURNS&lt;br /&gt;
Rem &lt;br /&gt;
Rem    NOTES&lt;br /&gt;
Rem      &lt;br /&gt;
Rem    MODIFIED   (MM/DD/YY)&lt;br /&gt;
Rem     rvasired   05/12/92 -  Creation &lt;br /&gt;
/*&lt;br /&gt;
** This block finds all employees whose monthly wages (salary plus&lt;br /&gt;
** commission) are higher than $2000.&lt;br /&gt;
**&lt;br /&gt;
** An alias is used in the cursor declaration so that the subsequent&lt;br /&gt;
** use of %ROWTYPE is allowed.  (Column names in a cursor declaration&lt;br /&gt;
** must have aliases if they are not simple names.)&lt;br /&gt;
**&lt;br /&gt;
** Copyright (c) 1989,1992 by Oracle Corporation&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
DECLARE&lt;br /&gt;
    CURSOR my_cursor IS SELECT sal + NVL(comm, 0) wages, ename &lt;br /&gt;
        FROM emp;&lt;br /&gt;
    my_rec  my_cursor%ROWTYPE;&lt;br /&gt;
BEGIN&lt;br /&gt;
    OPEN my_cursor;&lt;br /&gt;
    LOOP&lt;br /&gt;
        FETCH my_cursor INTO my_rec;&lt;br /&gt;
        EXIT WHEN my_cursor%NOTFOUND;&lt;br /&gt;
        IF my_rec.wages &amp;gt; 2000 THEN&lt;br /&gt;
            INSERT INTO temp VALUES (NULL, my_rec.wages,&lt;br /&gt;
                my_rec.ename);&lt;br /&gt;
        END IF;&lt;br /&gt;
    END LOOP;&lt;br /&gt;
    CLOSE my_cursor;&lt;br /&gt;
END;&lt;br /&gt;
/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
rem &lt;br /&gt;
rem $Header: examp5.sql,v 1.1 1992/05/12 22:03:18 RVASIRED Exp $ &lt;br /&gt;
rem &lt;br /&gt;
Rem  Copyright (c) 1991 by Oracle Corporation &lt;br /&gt;
Rem    NAME&lt;br /&gt;
Rem      examp5.sql - &lt;br /&gt;
Rem    DESCRIPTION&lt;br /&gt;
Rem      &lt;br /&gt;
Rem    RETURNS&lt;br /&gt;
Rem &lt;br /&gt;
Rem    NOTES&lt;br /&gt;
Rem      &lt;br /&gt;
Rem    MODIFIED   (MM/DD/YY)&lt;br /&gt;
Rem     rvasired   05/12/92 -  Creation &lt;br /&gt;
/*&lt;br /&gt;
** This block does some numeric processing on data that&lt;br /&gt;
** comes from experiment #1.  The results are stored in&lt;br /&gt;
** the TEMP table.&lt;br /&gt;
**&lt;br /&gt;
** Copyright (c) 1989,1992 Oracle Corporation&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
DECLARE&lt;br /&gt;
    num1    data_table.n1%TYPE;   -- Declare variables&lt;br /&gt;
    num2    data_table.n2%TYPE;   -- to be of same type as&lt;br /&gt;
    num3    data_table.n3%TYPE;   -- database columns&lt;br /&gt;
    result  temp.num_col1%TYPE;&lt;br /&gt;
    CURSOR c1 IS&lt;br /&gt;
        SELECT n1, n2, n3 FROM data_table&lt;br /&gt;
            WHERE exper_num = 1;&lt;br /&gt;
BEGIN&lt;br /&gt;
    OPEN c1;&lt;br /&gt;
    LOOP&lt;br /&gt;
        FETCH c1 INTO num1, num2, num3;&lt;br /&gt;
        EXIT WHEN c1%NOTFOUND;&lt;br /&gt;
            -- the c1%NOTFOUND condition evaluates&lt;br /&gt;
            -- to TRUE when FETCH finds no more rows&lt;br /&gt;
        /* calculate and store the results */&lt;br /&gt;
        result := num2/(num1 + num3);&lt;br /&gt;
        INSERT INTO temp VALUES (result, NULL, NULL);&lt;br /&gt;
    END LOOP;&lt;br /&gt;
    CLOSE c1;&lt;br /&gt;
    COMMIT;&lt;br /&gt;
END;&lt;br /&gt;
/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
rem &lt;br /&gt;
rem $Header: examp6.sql,v 1.1 1992/05/12 22:03:28 RVASIRED Exp $ &lt;br /&gt;
rem &lt;br /&gt;
Rem  Copyright (c) 1991 by Oracle Corporation &lt;br /&gt;
Rem    NAME&lt;br /&gt;
Rem      examp6.sql - &lt;br /&gt;
Rem    DESCRIPTION&lt;br /&gt;
Rem      &lt;br /&gt;
Rem    RETURNS&lt;br /&gt;
Rem &lt;br /&gt;
Rem    NOTES&lt;br /&gt;
Rem      &lt;br /&gt;
Rem    MODIFIED   (MM/DD/YY)&lt;br /&gt;
Rem     rvasired   05/12/92 -  Creation &lt;br /&gt;
/*&lt;br /&gt;
** This block accumulates 1000 units of part number 5469 from&lt;br /&gt;
** various storage bins.&lt;br /&gt;
**&lt;br /&gt;
** Copyright (c) 1989,1992 by Oracle Corporation&lt;br /&gt;
*/&lt;br /&gt;
DECLARE&lt;br /&gt;
    CURSOR bin_cur(part_number NUMBER) IS SELECT amt_in_bin&lt;br /&gt;
        FROM bins&lt;br /&gt;
        WHERE part_num = part_number AND &lt;br /&gt;
            amt_in_bin &amp;gt; 0&lt;br /&gt;
            ORDER BY bin_num&lt;br /&gt;
            FOR UPDATE OF amt_in_bin;&lt;br /&gt;
    bin_amt	    bins.amt_in_bin%TYPE;&lt;br /&gt;
    total_so_far    NUMBER(5) := 0;&lt;br /&gt;
    amount_needed   CONSTANT NUMBER(5) := 1000;&lt;br /&gt;
    bins_looked_at  NUMBER(3) := 0;&lt;br /&gt;
BEGIN&lt;br /&gt;
    OPEN bin_cur(5469);&lt;br /&gt;
    WHILE total_so_far &amp;lt; amount_needed LOOP&lt;br /&gt;
        FETCH bin_cur INTO bin_amt;&lt;br /&gt;
        EXIT WHEN bin_cur%NOTFOUND;&lt;br /&gt;
             /* If we exit, there's not enough to *&lt;br /&gt;
              * satisfy the order.                */&lt;br /&gt;
        bins_looked_at := bins_looked_at + 1;&lt;br /&gt;
        IF total_so_far + bin_amt &amp;lt; amount_needed THEN&lt;br /&gt;
            UPDATE bins SET amt_in_bin = 0&lt;br /&gt;
                WHERE CURRENT OF bin_cur;  &lt;br /&gt;
                    -- take everything in the bin&lt;br /&gt;
            total_so_far := total_so_far + bin_amt;&lt;br /&gt;
        ELSE        -- we finally have enough&lt;br /&gt;
            UPDATE bins SET amt_in_bin = amt_in_bin&lt;br /&gt;
                - (amount_needed - total_so_far)&lt;br /&gt;
                WHERE CURRENT OF bin_cur;&lt;br /&gt;
            total_so_far := amount_needed;&lt;br /&gt;
        END IF;&lt;br /&gt;
    END LOOP;&lt;br /&gt;
    CLOSE bin_cur;&lt;br /&gt;
    INSERT INTO temp VALUES (NULL, bins_looked_at, '&amp;lt;- bins looked at');&lt;br /&gt;
    COMMIT;&lt;br /&gt;
END;&lt;br /&gt;
/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
rem &lt;br /&gt;
rem $Header: examp7.sql,v 1.1 1992/05/12 22:03:40 RVASIRED Exp $ &lt;br /&gt;
rem &lt;br /&gt;
Rem  Copyright (c) 1991 by Oracle Corporation &lt;br /&gt;
Rem    NAME&lt;br /&gt;
Rem      examp7.sql - &lt;br /&gt;
Rem    DESCRIPTION&lt;br /&gt;
Rem      &lt;br /&gt;
Rem    RETURNS&lt;br /&gt;
Rem &lt;br /&gt;
Rem    NOTES&lt;br /&gt;
Rem      &lt;br /&gt;
Rem    MODIFIED   (MM/DD/YY)&lt;br /&gt;
Rem     rvasired   05/12/92 -  Creation &lt;br /&gt;
/*&lt;br /&gt;
** This block does some numeric processing on data that comes&lt;br /&gt;
** from experiment #1.  The results are stored in the TEMP table.&lt;br /&gt;
**&lt;br /&gt;
** Copyright (c) 1989,1992 Oracle Corporation&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
DECLARE&lt;br /&gt;
    result  temp.num_col1%TYPE;&lt;br /&gt;
    CURSOR c1 IS&lt;br /&gt;
        SELECT n1, n2, n3 FROM data_table&lt;br /&gt;
            WHERE exper_num = 1;&lt;br /&gt;
BEGIN&lt;br /&gt;
    FOR c1rec IN c1 LOOP&lt;br /&gt;
            /* calculate and store the results */&lt;br /&gt;
        result := c1rec.n2 / (c1rec.n1 + c1rec.n3);&lt;br /&gt;
        INSERT INTO temp VALUES (result, NULL, NULL);&lt;br /&gt;
    END LOOP;&lt;br /&gt;
    COMMIT;&lt;br /&gt;
END;&lt;br /&gt;
/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
rem &lt;br /&gt;
rem $Header: examp8.sql,v 1.1 1992/05/12 22:03:53 RVASIRED Exp $ &lt;br /&gt;
rem &lt;br /&gt;
Rem  Copyright (c) 1991 by Oracle Corporation &lt;br /&gt;
Rem    NAME&lt;br /&gt;
Rem      examp8.sql - &lt;br /&gt;
Rem    DESCRIPTION&lt;br /&gt;
Rem      &lt;br /&gt;
Rem    RETURNS&lt;br /&gt;
Rem &lt;br /&gt;
Rem    NOTES&lt;br /&gt;
Rem      &lt;br /&gt;
Rem    MODIFIED   (MM/DD/YY)&lt;br /&gt;
Rem     rvasired   05/12/92 -  Creation &lt;br /&gt;
/*&lt;br /&gt;
** This block calculates the total wages (salary plus commission)&lt;br /&gt;
** paid to employees in department 20.  It also determines how&lt;br /&gt;
** many of the employees have salaries higher than $2000, and how&lt;br /&gt;
** many have commissions larger than their salaries.&lt;br /&gt;
**&lt;br /&gt;
** Copyright (c) 1989,1992 by Oracle Corporation&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
DECLARE&lt;br /&gt;
    CURSOR emp_cursor(dnum NUMBER) IS&lt;br /&gt;
        SELECT sal, comm FROM emp WHERE deptno = dnum;&lt;br /&gt;
    total_wages   NUMBER(11,2) := 0;&lt;br /&gt;
    high_paid	  NUMBER(4) := 0;&lt;br /&gt;
    higher_comm	  NUMBER(4) := 0;&lt;br /&gt;
BEGIN&lt;br /&gt;
    /* The number of iterations will equal the number of rows *&lt;br /&gt;
     * returned by emp_cursor.                                */&lt;br /&gt;
    FOR emp_record IN emp_cursor(20) LOOP&lt;br /&gt;
        emp_record.comm := NVL(emp_record.comm, 0);&lt;br /&gt;
        total_wages := total_wages + emp_record.sal +&lt;br /&gt;
            emp_record.comm;&lt;br /&gt;
        IF emp_record.sal &amp;gt; 2000.00 THEN&lt;br /&gt;
            high_paid := high_paid + 1;&lt;br /&gt;
        END IF;&lt;br /&gt;
        IF emp_record.comm &amp;gt; emp_record.sal THEN&lt;br /&gt;
            higher_comm := higher_comm + 1;&lt;br /&gt;
        END IF;&lt;br /&gt;
    END LOOP;&lt;br /&gt;
    INSERT INTO temp VALUES (high_paid, higher_comm,&lt;br /&gt;
        'Total Wages: ' || TO_CHAR(total_wages));&lt;br /&gt;
    COMMIT;&lt;br /&gt;
END;&lt;br /&gt;
/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
rem &lt;br /&gt;
rem $Header: examp12.sql,v 1.1 1992/05/12 22:02:25 RVASIRED Exp $ &lt;br /&gt;
rem &lt;br /&gt;
Rem  Copyright (c) 1991 by Oracle Corporation &lt;br /&gt;
Rem    NAME&lt;br /&gt;
Rem      examp12.sql - &lt;br /&gt;
Rem    DESCRIPTION&lt;br /&gt;
Rem      &lt;br /&gt;
Rem    RETURNS&lt;br /&gt;
Rem &lt;br /&gt;
Rem    NOTES&lt;br /&gt;
Rem      &lt;br /&gt;
Rem    MODIFIED   (MM/DD/YY)&lt;br /&gt;
Rem     rvasired   05/12/92 -  Creation &lt;br /&gt;
/*&lt;br /&gt;
** This block returns a number from each of two tables, then&lt;br /&gt;
** inserts the sum of the numbers into a third table.  It stops&lt;br /&gt;
** when all rows have been fetched from either of the two tables.&lt;br /&gt;
**&lt;br /&gt;
** Copyright (c) 1989,1992 by Oracle Corporation&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
DECLARE&lt;br /&gt;
    CURSOR num1_cur IS SELECT num FROM num1_tab&lt;br /&gt;
        ORDER BY sequence;&lt;br /&gt;
    CURSOR num2_cur IS SELECT num FROM num2_tab&lt;br /&gt;
        ORDER BY sequence;&lt;br /&gt;
    num1      num1_tab.num%TYPE;&lt;br /&gt;
    num2      num2_tab.num%TYPE;&lt;br /&gt;
    pair_num  NUMBER := 0;&lt;br /&gt;
BEGIN&lt;br /&gt;
    OPEN num1_cur;&lt;br /&gt;
    OPEN num2_cur;&lt;br /&gt;
    LOOP   -- loop through the two tables and get&lt;br /&gt;
           -- pairs of numbers&lt;br /&gt;
        FETCH num1_cur INTO num1;&lt;br /&gt;
        FETCH num2_cur INTO num2;&lt;br /&gt;
        IF (num1_cur%FOUND) AND (num2_cur%FOUND) THEN&lt;br /&gt;
            pair_num := pair_num + 1;&lt;br /&gt;
            INSERT INTO sum_tab VALUES (pair_num, num1 + num2);&lt;br /&gt;
        ELSE&lt;br /&gt;
            EXIT;&lt;br /&gt;
        END IF;&lt;br /&gt;
    END LOOP;&lt;br /&gt;
    CLOSE num1_cur;&lt;br /&gt;
    CLOSE num2_cur;&lt;br /&gt;
END;&lt;br /&gt;
/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
rem &lt;br /&gt;
rem $Header: examp13.sql,v 1.1 1992/05/12 22:02:32 RVASIRED Exp $ &lt;br /&gt;
rem &lt;br /&gt;
Rem  Copyright (c) 1991 by Oracle Corporation &lt;br /&gt;
Rem    NAME&lt;br /&gt;
Rem      examp13.sql - &lt;br /&gt;
Rem    DESCRIPTION&lt;br /&gt;
Rem      &lt;br /&gt;
Rem    RETURNS&lt;br /&gt;
Rem &lt;br /&gt;
Rem    NOTES&lt;br /&gt;
Rem      &lt;br /&gt;
Rem    MODIFIED   (MM/DD/YY)&lt;br /&gt;
Rem     rvasired   05/12/92 -  Creation &lt;br /&gt;
/*&lt;br /&gt;
** This block returns a number from each of two tables, then&lt;br /&gt;
** inserts the sum of the numbers into a third table.  It stops&lt;br /&gt;
** when all rows have been fetched from either of the two tables.&lt;br /&gt;
**&lt;br /&gt;
** Copyright (c) 1989,1992 by Oracle Corporation&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
DECLARE&lt;br /&gt;
    CURSOR num1_cur IS SELECT num FROM num1_tab&lt;br /&gt;
        ORDER BY sequence;&lt;br /&gt;
    CURSOR num2_cur IS SELECT num FROM num2_tab&lt;br /&gt;
        ORDER BY sequence;&lt;br /&gt;
    num1      num1_tab.num%TYPE;&lt;br /&gt;
    num2      num2_tab.num%TYPE;&lt;br /&gt;
    pair_num  NUMBER := 0;&lt;br /&gt;
BEGIN&lt;br /&gt;
    OPEN num1_cur;&lt;br /&gt;
    OPEN num2_cur;&lt;br /&gt;
    LOOP   -- loop through the two tables and get&lt;br /&gt;
           -- pairs of numbers&lt;br /&gt;
        FETCH num1_cur INTO num1;&lt;br /&gt;
        FETCH num2_cur INTO num2;&lt;br /&gt;
        EXIT WHEN (num1_cur%NOTFOUND) OR (num2_cur%NOTFOUND);&lt;br /&gt;
        pair_num := pair_num + 1;&lt;br /&gt;
        INSERT INTO sum_tab VALUES (pair_num, num1 + num2);&lt;br /&gt;
    END LOOP;&lt;br /&gt;
    CLOSE num1_cur;&lt;br /&gt;
    CLOSE num2_cur;&lt;br /&gt;
END;&lt;br /&gt;
/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
rem &lt;br /&gt;
rem $Header: examp14.sql,v 1.1 1992/05/12 22:02:45 RVASIRED Exp $ &lt;br /&gt;
rem &lt;br /&gt;
Rem  Copyright (c) 1991 by Oracle Corporation &lt;br /&gt;
Rem    NAME&lt;br /&gt;
Rem      examp14.sql - &lt;br /&gt;
Rem    DESCRIPTION&lt;br /&gt;
Rem      &lt;br /&gt;
Rem    RETURNS&lt;br /&gt;
Rem &lt;br /&gt;
Rem    NOTES&lt;br /&gt;
Rem      &lt;br /&gt;
Rem    MODIFIED   (MM/DD/YY)&lt;br /&gt;
Rem     rvasired   05/12/92 -  Creation &lt;br /&gt;
/*&lt;br /&gt;
** This block uses a cursor to select the 5 highest-paid employees &lt;br /&gt;
** from the EMP table.&lt;br /&gt;
**&lt;br /&gt;
** Copyright (c) 1989,1992 by Oracle Corporation&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
DECLARE&lt;br /&gt;
    CURSOR c1 is&lt;br /&gt;
	SELECT ename, empno, sal FROM emp&lt;br /&gt;
	ORDER BY sal DESC;   -- start with highest-paid employee&lt;br /&gt;
    my_ename  CHAR(10);&lt;br /&gt;
    my_empno  NUMBER(4);&lt;br /&gt;
    my_sal    NUMBER(7,2);&lt;br /&gt;
&lt;br /&gt;
BEGIN&lt;br /&gt;
    OPEN c1;&lt;br /&gt;
    LOOP&lt;br /&gt;
	FETCH c1 INTO my_ename, my_empno, my_sal;&lt;br /&gt;
	EXIT WHEN (c1%ROWCOUNT &amp;gt; 5) OR (c1%NOTFOUND);&lt;br /&gt;
	INSERT INTO temp VALUES (my_sal, my_empno, my_ename);&lt;br /&gt;
        COMMIT;&lt;br /&gt;
    END LOOP;&lt;br /&gt;
    CLOSE c1;&lt;br /&gt;
END;&lt;br /&gt;
/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
rem &lt;br /&gt;
rem $Header: sample2.sql,v 1.1 1992/05/12 22:04:17 RVASIRED Exp $ &lt;br /&gt;
rem &lt;br /&gt;
Rem  Copyright (c) 1991 by Oracle Corporation &lt;br /&gt;
Rem    NAME&lt;br /&gt;
Rem      sample2.sql - &lt;br /&gt;
Rem    DESCRIPTION&lt;br /&gt;
Rem      &lt;br /&gt;
Rem    RETURNS&lt;br /&gt;
Rem &lt;br /&gt;
Rem    NOTES&lt;br /&gt;
Rem      &lt;br /&gt;
Rem    MODIFIED   (MM/DD/YY)&lt;br /&gt;
Rem     rvasired   05/12/92 -  Creation &lt;br /&gt;
/*&lt;br /&gt;
** This program uses a cursor to select the 5 highest-paid employees &lt;br /&gt;
** from the EMP table.&lt;br /&gt;
**&lt;br /&gt;
** Copyright (c) 1989,1992 by Oracle Corporation&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
DECLARE&lt;br /&gt;
    CURSOR c1 is&lt;br /&gt;
	SELECT ename, empno, sal FROM emp&lt;br /&gt;
	ORDER BY sal DESC;   -- start with highest-paid employee&lt;br /&gt;
    my_ename  CHAR(10);&lt;br /&gt;
    my_empno  NUMBER(4);&lt;br /&gt;
    my_sal    NUMBER(7,2);&lt;br /&gt;
&lt;br /&gt;
BEGIN&lt;br /&gt;
    OPEN c1;&lt;br /&gt;
&lt;br /&gt;
    FOR i IN 1..5 LOOP&lt;br /&gt;
	FETCH c1 INTO my_ename, my_empno, my_sal;&lt;br /&gt;
	EXIT WHEN c1%NOTFOUND;	 /* in case the number requested is more *&lt;br /&gt;
				  * than the total number of employees   */&lt;br /&gt;
	INSERT INTO temp VALUES (my_sal, my_empno, my_ename);&lt;br /&gt;
        COMMIT;&lt;br /&gt;
    END LOOP;&lt;br /&gt;
&lt;br /&gt;
    CLOSE c1;&lt;br /&gt;
END;&lt;br /&gt;
/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
rem &lt;br /&gt;
rem $Header: sample4.sql,v 1.1 1992/05/12 22:04:38 RVASIRED Exp $ &lt;br /&gt;
rem &lt;br /&gt;
Rem  Copyright (c) 1991 by Oracle Corporation &lt;br /&gt;
Rem    NAME&lt;br /&gt;
Rem      sample4.sql - &lt;br /&gt;
Rem    DESCRIPTION&lt;br /&gt;
Rem      &lt;br /&gt;
Rem    RETURNS&lt;br /&gt;
Rem &lt;br /&gt;
Rem    NOTES&lt;br /&gt;
Rem      &lt;br /&gt;
Rem    MODIFIED   (MM/DD/YY)&lt;br /&gt;
Rem     rvasired   05/12/92 -  Creation &lt;br /&gt;
/*&lt;br /&gt;
** This program modifies the ACCOUNTS table based on instructions&lt;br /&gt;
** stored in the ACTION table.  Each row of the ACTION table &lt;br /&gt;
** contains an account number to act upon, an action to be taken&lt;br /&gt;
** (insert, update, or delete), an amount  by which to update the&lt;br /&gt;
** account, and a time tag.&lt;br /&gt;
**&lt;br /&gt;
** On an insert, if the account already exists, an update is&lt;br /&gt;
** performed instead.  On an update, if the account does not exist,&lt;br /&gt;
** it is created by an insert.  On a delete, if the row does not&lt;br /&gt;
** exist, no action is taken.&lt;br /&gt;
**&lt;br /&gt;
** Copyright (c) 1989,1992 by Oracle Corporation&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
DECLARE&lt;br /&gt;
    CURSOR c1 IS&lt;br /&gt;
        SELECT account_id, oper_type, new_value FROM action&lt;br /&gt;
        ORDER BY time_tag &lt;br /&gt;
	FOR UPDATE OF status;&lt;br /&gt;
&lt;br /&gt;
BEGIN&lt;br /&gt;
    FOR acct IN c1 LOOP	  -- process each row one at a time&lt;br /&gt;
&lt;br /&gt;
	acct.oper_type := upper(acct.oper_type);&lt;br /&gt;
&lt;br /&gt;
	/*----------------------------------------*&lt;br /&gt;
	 * Process an UPDATE.  If the account to  *&lt;br /&gt;
	 * be updated doesn't exist, create a new *&lt;br /&gt;
	 * account.				  *&lt;br /&gt;
	 *----------------------------------------*/&lt;br /&gt;
	IF acct.oper_type = 'U' THEN&lt;br /&gt;
	    UPDATE accounts SET bal = acct.new_value&lt;br /&gt;
                WHERE account_id = acct.account_id;&lt;br /&gt;
&lt;br /&gt;
	    IF SQL%NOTFOUND THEN  -- account didn't exist.  Create it.&lt;br /&gt;
		INSERT INTO accounts&lt;br /&gt;
       		    VALUES (acct.account_id, acct.new_value);&lt;br /&gt;
  		UPDATE action SET status = &lt;br /&gt;
		    'Update: ID not found. Value inserted.' &lt;br /&gt;
		    WHERE CURRENT OF c1; &lt;br /&gt;
	    ELSE&lt;br /&gt;
		UPDATE action SET status = 'Update: Success.'&lt;br /&gt;
		    WHERE CURRENT OF c1;&lt;br /&gt;
	    END IF;&lt;br /&gt;
 &lt;br /&gt;
	/*--------------------------------------------*&lt;br /&gt;
	 * Process an INSERT.  If the account already *&lt;br /&gt;
	 * exists, do an update of the account        *&lt;br /&gt;
	 * instead.				      *&lt;br /&gt;
	 *--------------------------------------------*/&lt;br /&gt;
	ELSIF acct.oper_type = 'I' THEN&lt;br /&gt;
	    BEGIN&lt;br /&gt;
	        INSERT INTO accounts&lt;br /&gt;
		    VALUES (acct.account_id, acct.new_value);&lt;br /&gt;
	        UPDATE action set status = 'Insert: Success.'&lt;br /&gt;
		    WHERE CURRENT OF c1;&lt;br /&gt;
&lt;br /&gt;
	    EXCEPTION&lt;br /&gt;
	        WHEN DUP_VAL_ON_INDEX THEN   -- account already exists&lt;br /&gt;
		    UPDATE accounts SET bal = acct.new_value&lt;br /&gt;
                        WHERE account_id = acct.account_id;&lt;br /&gt;
       		    UPDATE action SET status = &lt;br /&gt;
                        'Insert: Acct exists. Updated instead.'&lt;br /&gt;
		        WHERE CURRENT OF c1;&lt;br /&gt;
	    END;&lt;br /&gt;
 &lt;br /&gt;
	/*--------------------------------------------*&lt;br /&gt;
	 * Process a DELETE.  If the account doesn't  *&lt;br /&gt;
	 * exist, set the status field to say that    *&lt;br /&gt;
	 * the account wasn't found.		      *&lt;br /&gt;
	 *--------------------------------------------*/&lt;br /&gt;
	ELSIF acct.oper_type = 'D' THEN	&lt;br /&gt;
	    DELETE FROM accounts &lt;br /&gt;
		WHERE account_id = acct.account_id;&lt;br /&gt;
&lt;br /&gt;
	    IF SQL%NOTFOUND THEN   -- account didn't exist.&lt;br /&gt;
        	UPDATE action SET status = 'Delete: ID not found.'&lt;br /&gt;
		    WHERE CURRENT OF c1;&lt;br /&gt;
	    ELSE&lt;br /&gt;
		UPDATE action SET status = 'Delete: Success.'&lt;br /&gt;
		    WHERE CURRENT OF c1;&lt;br /&gt;
	    END IF;&lt;br /&gt;
&lt;br /&gt;
	/*--------------------------------------------*&lt;br /&gt;
	 * The requested operation is invalid.        *&lt;br /&gt;
	 *--------------------------------------------*/&lt;br /&gt;
	ELSE    -- oper_type is invalid&lt;br /&gt;
	    UPDATE action SET status =&lt;br /&gt;
               'Invalid operation. No action taken.'&lt;br /&gt;
	       WHERE CURRENT OF c1;&lt;br /&gt;
&lt;br /&gt;
	END IF;&lt;br /&gt;
&lt;br /&gt;
    END LOOP;&lt;br /&gt;
    COMMIT;&lt;br /&gt;
END;&lt;br /&gt;
/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Durarda==&lt;br /&gt;
1,5 hores&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Autor}}, octubre 2009&lt;br /&gt;
[[Categoria: IES Jaume Balmes]]&lt;br /&gt;
[[Categoria: Pràctiques DAI-C8-EC]]&lt;/div&gt;</summary>
		<author><name>Joan</name></author>
		
	</entry>
</feed>