<?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_Introducci%C3%B3_al_Pl%2FSQL._Exercicis_proposats</id>
	<title>DAI-C8-EC: Introducció al Pl/SQL. 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_Introducci%C3%B3_al_Pl%2FSQL._Exercicis_proposats"/>
	<link rel="alternate" type="text/html" href="http://wiki.joanillo.org/index.php?title=DAI-C8-EC:_Introducci%C3%B3_al_Pl/SQL._Exercicis_proposats&amp;action=history"/>
	<updated>2026-08-30T07:49:03Z</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:_Introducci%C3%B3_al_Pl/SQL._Exercicis_proposats&amp;diff=247676&amp;oldid=prev</id>
		<title>Joan: /* Exercicis proposats */</title>
		<link rel="alternate" type="text/html" href="http://wiki.joanillo.org/index.php?title=DAI-C8-EC:_Introducci%C3%B3_al_Pl/SQL._Exercicis_proposats&amp;diff=247676&amp;oldid=prev"/>
		<updated>2011-10-26T14:31:02Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Exercicis proposats&lt;/span&gt;&lt;/span&gt;&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 1. Introducció i Fonaments del llenguatge Pl/SQL&lt;br /&gt;
&lt;br /&gt;
Exercicis complementaris&lt;br /&gt;
&lt;br /&gt;
==Desenvolupament==&lt;br /&gt;
===Exercicis proposats===&lt;br /&gt;
1. Indicar los errores que aparecen en las siguientes instrucciones y la forma de corregirlos.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DECLARE&lt;br /&gt;
  Num1 NUMBER(8,2) := 0						&lt;br /&gt;
  Num2 NUMBER(8,2) NOT NULL DEFAULT 0;    &lt;br /&gt;
  Num3 NUMBER(8,2) NOT NULL;&lt;br /&gt;
  quantitat INTEGER(3);				&lt;br /&gt;
  preu, descompte NUMBER(6);&lt;br /&gt;
  Num4 Num1%ROWTYPE;&lt;br /&gt;
  Dte CONSTANT INTEGER;		&lt;br /&gt;
BEGIN&lt;br /&gt;
  ...&lt;br /&gt;
END;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Solució:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Num3 NUMBER(8,2) NOT NULL DEFAULT 0;&lt;br /&gt;
quantitat INTEGER;&lt;br /&gt;
preu NUMBER(6);&lt;br /&gt;
descompte NUMBER(6);&lt;br /&gt;
Num4 Num1%TYPE;&lt;br /&gt;
Dte CONSTANT INTEGER := 0;	&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
2. Escribir un procedimiento que reciba dos números y visualice su suma.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CREATE OR REPLACE PROCEDURE sumar_numeros (&lt;br /&gt;
	num1 NUMBER,&lt;br /&gt;
	num2 NUMBER)&lt;br /&gt;
IS&lt;br /&gt;
suma NUMBER(6);&lt;br /&gt;
BEGIN&lt;br /&gt;
	suma := num1 + num2;&lt;br /&gt;
	DBMS_OUTPUT.PUT_LINE('Suma: '|| suma);&lt;br /&gt;
END sumar_numeros;&lt;br /&gt;
/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
3. Codificar un procedimiento que reciba una cadena y la visualice al revés.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CREATE OR REPLACE PROCEDURE cadena_reves(&lt;br /&gt;
	vcadena VARCHAR2)&lt;br /&gt;
AS&lt;br /&gt;
	vcad_reves VARCHAR2(80);&lt;br /&gt;
BEGIN&lt;br /&gt;
	FOR i IN REVERSE 1..LENGTH(vcadena) LOOP&lt;br /&gt;
		vcad_reves := vcad_reves || SUBSTR(vcadena,i,1);&lt;br /&gt;
	END LOOP;&lt;br /&gt;
	DBMS_OUTPUT.PUT_LINE(vcad_reves);&lt;br /&gt;
END cadena_reves;&lt;br /&gt;
/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
4. Escribir una función que reciba una fecha y devuelva el año, en número, correspondiente a esa fecha.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CREATE OR REPLACE FUNCTION anio	(data DATE)&lt;br /&gt;
RETURN NUMBER&lt;br /&gt;
AS&lt;br /&gt;
	v_any NUMBER(4);&lt;br /&gt;
BEGIN&lt;br /&gt;
	v_any := TO_NUMBER(TO_CHAR(data, 'YYYY'));&lt;br /&gt;
	RETURN v_any;&lt;br /&gt;
END anio;&lt;br /&gt;
/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
5. Escribir un bloque PL/SQL que haga uso de la función anterior.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DECLARE&lt;br /&gt;
 	n NUMBER(4);&lt;br /&gt;
BEGIN&lt;br /&gt;
 	n := anio(SYSDATE);&lt;br /&gt;
 	DBMS_OUTPUT.PUT_LINE('ANY : '|| n);&lt;br /&gt;
END;&lt;br /&gt;
/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
6. Dado el siguiente procedimiento:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CREATE OR REPLACE PROCEDURE crear_depart (&lt;br /&gt;
  v_num_dept depart.dept_no%TYPE, &lt;br /&gt;
  v_dnom depart.dnom%TYPE DEFAULT 'PROVISIONAL',&lt;br /&gt;
  v_loc     depart.loc%TYPE DEFAULT 'PROVISIONAL')&lt;br /&gt;
IS&lt;br /&gt;
BEGIN&lt;br /&gt;
  INSERT INTO depart&lt;br /&gt;
    VALUES (v_num_dept, v_dnom, v_loc);&lt;br /&gt;
END crear_depart;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Indicar cuáles de las siguientes llamadas son correctas y cuáles incorrectas, en este último caso escribir la llamada correcta usando la notación posicional (en los casos que se pueda):&lt;br /&gt;
crear_depart;						-- 1º&lt;br /&gt;
crear_depart(50);					-- 2º	&lt;br /&gt;
crear_depart('COMPRAS');				-- 3º&lt;br /&gt;
crear_depart(50,'COMPRAS');			-- 4º&lt;br /&gt;
crear_depart('COMPRAS', 50);			-- 5º&lt;br /&gt;
crear_depart('COMPRAS', 'VALENCIA');		-- 6º&lt;br /&gt;
crear_depart(50, 'COMPRAS', 'VALENCIA');	-- 7º&lt;br /&gt;
crear_depart('COMPRAS', 50, 'VALENCIA');	-- 8º&lt;br /&gt;
crear_depart('VALENCIA', 'COMPRAS');		-- 9º&lt;br /&gt;
crear_depart('VALENCIA', 50);  			-- 10º&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Solució:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1º Incorrecta: hay que pasar al menos el número de departamento.&lt;br /&gt;
2º Correcta. &lt;br /&gt;
3º Incorrecta: hay que pasar también el número de departamento.&lt;br /&gt;
4º Correcta.&lt;br /&gt;
5º Incorrecta: los argumentos están en orden inverso.&lt;br /&gt;
Solución: crear_depart(50, 'COMPRAS');&lt;br /&gt;
6º Incorrecta: hay que pasar también el número.&lt;br /&gt;
7º Correcta.&lt;br /&gt;
8º Incorrecta: el orden de los argumentos es incorrecto.&lt;br /&gt;
	Solución: crear_depart(50, 'COMPRAS',  'VALENCIA');&lt;br /&gt;
9º Incorrecta: hay que pasar también el número de departamento.&lt;br /&gt;
10º Incorrecta: los argumentos están en orden inverso.&lt;br /&gt;
	Solución: crear_depart(50, NULL, 'VALENCIA');&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
7. Desarrollar una función que devuelva el número de años completos que hay entre dos fechas que se pasan como argumentos.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CREATE OR REPLACE FUNCTION anys_dif (&lt;br /&gt;
data1 DATE, data2 DATE)&lt;br /&gt;
RETURN NUMBER&lt;br /&gt;
AS&lt;br /&gt;
	v_anys_dif NUMBER(6);&lt;br /&gt;
BEGIN&lt;br /&gt;
	v_anys_dif := ABS(TRUNC(MONTHS_BETWEEN(data2,data1)/ 12));&lt;br /&gt;
	RETURN v_anys_dif;&lt;br /&gt;
END anys_dif;&lt;br /&gt;
/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
8. Escribir una función que, haciendo uso de la función anterior devuelva los trienios que hay entre dos fechas. (Un trienio son tres años completos).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CREATE OR REPLACE FUNCTION trienis (&lt;br /&gt;
data1 DATE, data2 DATE)&lt;br /&gt;
RETURN NUMBER&lt;br /&gt;
AS&lt;br /&gt;
	v_trienis NUMBER(6);&lt;br /&gt;
BEGIN&lt;br /&gt;
	v_trienis := TRUNC(anys_dif(data1,data2) / 3);&lt;br /&gt;
 	RETURN v_trienis;&lt;br /&gt;
END;&lt;br /&gt;
/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
9. Codificar un procedimiento que reciba una lista de hasta 5 números y visualice su suma.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CREATE OR REPLACE PROCEDURE sumar_5numeros (&lt;br /&gt;
	Num1 NUMBER DEFAULT 0,&lt;br /&gt;
	Num2 NUMBER DEFAULT 0,&lt;br /&gt;
	Num3 NUMBER DEFAULT 0,&lt;br /&gt;
	Num4 NUMBER DEFAULT 0,&lt;br /&gt;
	Num5 NUMBER DEFAULT 0)&lt;br /&gt;
AS&lt;br /&gt;
BEGIN&lt;br /&gt;
	DBMS_OUTPUT.PUT_LINE(Num1 + Num2 + Num3 + Num4 + Num5);&lt;br /&gt;
END sumar_5numeros;&lt;br /&gt;
/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
10. Escribir una función que devuelva solamente caracteres alfabéticos sustituyendo cualquier otro carácter por blancos a partir de una cadena que se pasará en la llamada.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CREATE OR REPLACE FUNCTION subst_per_blancs (cad VARCHAR2) RETURN VARCHAR2&lt;br /&gt;
AS&lt;br /&gt;
	nova_cad VARCHAR2(30);&lt;br /&gt;
	car CHARACTER;&lt;br /&gt;
BEGIN&lt;br /&gt;
	FOR i IN 1..LENGTH(cad) LOOP&lt;br /&gt;
	  	car:=SUBSTR(cad,i,1);&lt;br /&gt;
 	  	IF (ASCII(car) NOT BETWEEN 65 AND 90) AND (ASCII(car) NOT BETWEEN 97 AND 122) THEN&lt;br /&gt;
		  	car :=' ';&lt;br /&gt;
  		END IF;&lt;br /&gt;
	     nova_cad := nova_cad || car;	&lt;br /&gt;
	END LOOP;&lt;br /&gt;
	RETURN nova_cad;&lt;br /&gt;
END subst_per_blancs;&lt;br /&gt;
/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
11. Implementar un procedimiento que reciba un importe y visualice el desglose del cambio en unidades monetarias de 1, 5, 10, 25, 50, 100, 200, 500, 1000, 2000, 5000 Ptas. en orden inverso al que aparecen aquí enumeradas.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CREATE OR REPLACE PROCEDURE desglos_canvi(&lt;br /&gt;
	import NUMBER)&lt;br /&gt;
AS&lt;br /&gt;
	canvi NATURAL := import;&lt;br /&gt;
	moneda NATURAL;&lt;br /&gt;
	v_uni_moneda NATURAL;&lt;br /&gt;
BEGIN&lt;br /&gt;
	DBMS_OUTPUT.PUT_LINE('***** DESGLOS DE: ' || import );&lt;br /&gt;
	WHILE canvi &amp;gt; 0 LOOP&lt;br /&gt;
         	IF 	canvi &amp;gt;= 5000 THEN&lt;br /&gt;
			moneda := 5000;&lt;br /&gt;
	   	ELSIF canvi &amp;gt;= 2000 THEN&lt;br /&gt;
			moneda := 2000;&lt;br /&gt;
         	ELSIF canvi &amp;gt;= 1000 THEN&lt;br /&gt;
			moneda := 1000;&lt;br /&gt;
	   	ELSIF canvi &amp;gt;= 500 THEN&lt;br /&gt;
			moneda := 500;&lt;br /&gt;
         	ELSIF canvi &amp;gt;= 200 THEN&lt;br /&gt;
			moneda := 200;&lt;br /&gt;
	   	ELSIF canvi &amp;gt;= 100 THEN&lt;br /&gt;
			moneda := 100;&lt;br /&gt;
         	ELSIF canvi &amp;gt;= 50 THEN&lt;br /&gt;
			moneda := 50;&lt;br /&gt;
	   	ELSIF canvi &amp;gt;= 25 THEN&lt;br /&gt;
			moneda := 25;&lt;br /&gt;
	   	ELSIF canvi &amp;gt;= 10 THEN&lt;br /&gt;
			moneda := 10;&lt;br /&gt;
         	ELSIF canvi &amp;gt;= 5 THEN&lt;br /&gt;
			moneda := 5;&lt;br /&gt;
	   	ELSE  &lt;br /&gt;
			moneda := 1;&lt;br /&gt;
END IF;&lt;br /&gt;
		v_uni_moneda := TRUNC(canvi / moneda);&lt;br /&gt;
	   	DBMS_OUTPUT.PUT_LINE(v_uni_moneda || ' Unitats de: ' || moneda || ' euros. ');&lt;br /&gt;
 		canvi := MOD(canvi, moneda);&lt;br /&gt;
	END LOOP;&lt;br /&gt;
END desglos_canvi;&lt;br /&gt;
/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
12. Codificar un procedimiento que permita borrar un empleado cuyo número se pasará en la llamada.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CREATE OR REPLACE PROCEDURE borrar_emple(&lt;br /&gt;
	num_emple emple.emp_no%TYPE)&lt;br /&gt;
AS&lt;br /&gt;
BEGIN&lt;br /&gt;
DELETE FROM emple WHERE emp_no =  num_emple;&lt;br /&gt;
END borrar_emple;&lt;br /&gt;
/&lt;br /&gt;
&lt;br /&gt;
Nota: El procedimiento anterior devolverá el mensaje &lt;br /&gt;
&amp;lt;&amp;lt; Procedimiento PL/SQL terminado con éxito &amp;gt;&amp;gt; aunque no exista el número y, por tanto, no se borre el empleado. Para evitarlo se puede escribir:&lt;br /&gt;
&lt;br /&gt;
CREATE OR REPLACE PROCEDURE borrar_emple(&lt;br /&gt;
	num_emple emple.emp_no%TYPE)&lt;br /&gt;
AS&lt;br /&gt;
	v_row ROWID;&lt;br /&gt;
BEGIN&lt;br /&gt;
SELECT ROWID INTO v_row FROM emple &lt;br /&gt;
WHERE emp_no =  num_emple;&lt;br /&gt;
 	DELETE FROM emple WHERE ROWID =  v_row;&lt;br /&gt;
END borrar_emple;&lt;br /&gt;
/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
13. Escribir un procedimiento que modifique la localidad de un departamento. El procedimiento recibirá como parámetros el número del departamento y la localidad nueva.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CREATE OR REPLACE&lt;br /&gt;
PROCEDURE modificar_localitat(&lt;br /&gt;
	num_depart NUMBER,&lt;br /&gt;
	localitat VARCHAR2)&lt;br /&gt;
AS&lt;br /&gt;
BEGIN&lt;br /&gt;
	UPDATE depart SET loc = localitat&lt;br /&gt;
		WHERE dept_no = num_depart;&lt;br /&gt;
END modificar_localitat;&lt;br /&gt;
/&lt;br /&gt;
&lt;br /&gt;
Nota: Lo indicado en la nota del ejercicio anterior se puede aplicar también a este.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
14. Visualizar todos los procedimientos y funciones del usuario almacenados en la base de datos y su situación (valid o invalid).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT OBJECT_NAME, OBJECT_TYPE, STATUS &lt;br /&gt;
FROM USER_OBJECTS &lt;br /&gt;
WHERE OBJECT_TYPE IN ('PROCEDURE','FUNCTION');&lt;br /&gt;
&lt;br /&gt;
Nota: También se puede utilizar la vista ALL_OBJECTS.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Exercicis complementaris===&lt;br /&gt;
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;
I els exercicis (i solucions) són:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rem &lt;br /&gt;
rem $Header: examp1.sql,v 1.1 1992/05/12 22:02:06 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      examp1.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 processes an order for tennis rackets.  It decrements&lt;br /&gt;
** the quantity of rackets on hand only if there is at least one&lt;br /&gt;
** racket left in stock.&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;
    qty_on_hand  NUMBER(5);&lt;br /&gt;
BEGIN&lt;br /&gt;
    SELECT quantity INTO qty_on_hand FROM inventory&lt;br /&gt;
        WHERE product = 'TENNIS RACKET'&lt;br /&gt;
        FOR UPDATE OF quantity;&lt;br /&gt;
&lt;br /&gt;
    IF qty_on_hand &amp;gt; 0 THEN  -- check quantity&lt;br /&gt;
        UPDATE inventory SET quantity = quantity - 1&lt;br /&gt;
            WHERE product = 'TENNIS RACKET';&lt;br /&gt;
        INSERT INTO purchase_record&lt;br /&gt;
            VALUES ('Tennis racket purchased', SYSDATE);&lt;br /&gt;
    ELSE&lt;br /&gt;
        INSERT INTO purchase_record&lt;br /&gt;
            VALUES ('Out of tennis rackets', SYSDATE);&lt;br /&gt;
    END IF;&lt;br /&gt;
&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: examp2.sql,v 1.2 1992/12/02 16:16:15 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      examp2.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 -  cuz &lt;br /&gt;
Rem     rvasired   05/12/92 -  Creation &lt;br /&gt;
/*&lt;br /&gt;
** This block debits account 3 by $500 only if there are sufficient&lt;br /&gt;
** funds to cover the withdrawal.&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;
    acct_balance  NUMBER(11,2);&lt;br /&gt;
    acct          CONSTANT NUMBER(4) := 3;&lt;br /&gt;
    debit_amt     CONSTANT NUMBER(5,2) := 500.00;&lt;br /&gt;
BEGIN&lt;br /&gt;
    SELECT bal INTO acct_balance FROM accounts&lt;br /&gt;
        WHERE account_id = acct&lt;br /&gt;
        FOR UPDATE OF bal;&lt;br /&gt;
    &lt;br /&gt;
    IF acct_balance &amp;gt;= debit_amt THEN&lt;br /&gt;
        UPDATE accounts SET bal = bal - debit_amt&lt;br /&gt;
            WHERE account_id = acct;&lt;br /&gt;
    ELSE&lt;br /&gt;
        INSERT INTO temp VALUES&lt;br /&gt;
            (acct, acct_balance, 'Insufficient funds');&lt;br /&gt;
                -- insert account, current balance, and message&lt;br /&gt;
    END IF;&lt;br /&gt;
&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: examp3.sql,v 1.1 1992/05/12 22:03:01 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      examp3.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 the first employee who has a salary over $4000&lt;br /&gt;
** and is higher in the chain of command than employee 7902.&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;
    salary          emp.sal%TYPE;&lt;br /&gt;
    mgr_num         emp.mgr%TYPE;&lt;br /&gt;
    last_name       emp.ename%TYPE;&lt;br /&gt;
    starting_empno  CONSTANT NUMBER(4) := 7902;&lt;br /&gt;
BEGIN&lt;br /&gt;
    SELECT sal, mgr INTO salary, mgr_num FROM emp&lt;br /&gt;
        WHERE empno = starting_empno;&lt;br /&gt;
    WHILE salary &amp;lt; 4000 LOOP&lt;br /&gt;
        SELECT sal, mgr, ename INTO salary, mgr_num, last_name&lt;br /&gt;
            FROM emp&lt;br /&gt;
            WHERE empno = mgr_num;&lt;br /&gt;
    END LOOP;&lt;br /&gt;
&lt;br /&gt;
    INSERT INTO temp VALUES (NULL, salary, last_name);&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: examp11.sql,v 1.1 1992/05/12 22:02:16 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      examp11.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 ratio between the X and Y columns of&lt;br /&gt;
** the RATIO table.  If the ratio is greater than 0.72, the block&lt;br /&gt;
** inserts the ratio into RESULT_TABLE.  Otherwise, it inserts -1.&lt;br /&gt;
** If the denominator is zero, ZERO_DIVIDE is raised, and a&lt;br /&gt;
** zero is inserted into RESULT_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;
    numerator    NUMBER;&lt;br /&gt;
    denominator  NUMBER;&lt;br /&gt;
    the_ratio    NUMBER;&lt;br /&gt;
    lower_limit  CONSTANT NUMBER := 0.72;&lt;br /&gt;
    samp_num     CONSTANT NUMBER := 132;&lt;br /&gt;
BEGIN&lt;br /&gt;
    SELECT x, y INTO numerator, denominator FROM result_table&lt;br /&gt;
        WHERE sample_id = samp_num;&lt;br /&gt;
    the_ratio := numerator/denominator;&lt;br /&gt;
    IF the_ratio &amp;gt; lower_limit THEN&lt;br /&gt;
        INSERT INTO ratio VALUES (samp_num, the_ratio);&lt;br /&gt;
    ELSE&lt;br /&gt;
        INSERT INTO ratio VALUES (samp_num, -1);&lt;br /&gt;
    END IF;&lt;br /&gt;
    COMMIT;&lt;br /&gt;
EXCEPTION&lt;br /&gt;
    WHEN ZERO_DIVIDE THEN&lt;br /&gt;
        INSERT INTO ratio VALUES (samp_num, 0);&lt;br /&gt;
        COMMIT;&lt;br /&gt;
    WHEN OTHERS THEN&lt;br /&gt;
        ROLLBACK;&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: sample1.sql,v 1.1 1992/05/12 22:04:07 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      sample1.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 simple FOR loop to insert 10 rows into a table.  &lt;br /&gt;
** The values of a loop index, counter variable, and either of two &lt;br /&gt;
** character strings are inserted.  Which string is inserted&lt;br /&gt;
** depends on the value of the loop index.&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;
    x  NUMBER := 100;&lt;br /&gt;
BEGIN&lt;br /&gt;
    FOR i IN 1..10 LOOP&lt;br /&gt;
	IF MOD(i,2) = 0 THEN     -- i is even&lt;br /&gt;
	    INSERT INTO temp VALUES (i, x, 'i is even');&lt;br /&gt;
	ELSE&lt;br /&gt;
	    INSERT INTO temp VALUES (i, x, 'i is odd');&lt;br /&gt;
	END IF;&lt;br /&gt;
&lt;br /&gt;
	x := x + 100;        &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: sample3.sql,v 1.1 1992/05/12 22:04: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      sample3.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 example illustrates block structure and scope rules.  An&lt;br /&gt;
** outer block declares two variables named X and COUNTER, and loops four&lt;br /&gt;
** times.  Inside the loop is a sub-block that also declares a variable&lt;br /&gt;
** named X.  The values inserted into the TEMP table show that the two&lt;br /&gt;
** X's are indeed different.&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;
    x        NUMBER := 0;&lt;br /&gt;
    counter  NUMBER := 0;&lt;br /&gt;
BEGIN&lt;br /&gt;
    FOR i IN 1..4 LOOP&lt;br /&gt;
	x := x + 1000;&lt;br /&gt;
	counter := counter + 1;&lt;br /&gt;
        INSERT INTO temp VALUES (x, counter, 'in OUTER loop');&lt;br /&gt;
&lt;br /&gt;
	/* start an inner block */&lt;br /&gt;
        DECLARE&lt;br /&gt;
	    x  NUMBER := 0;   -- this is a local version of x&lt;br /&gt;
	BEGIN&lt;br /&gt;
	    FOR i IN 1..4 LOOP&lt;br /&gt;
		x := x + 1;   -- this increments the local x&lt;br /&gt;
		counter := counter + 1;&lt;br /&gt;
	        INSERT INTO temp VALUES (x, counter, 'inner loop');&lt;br /&gt;
	    END LOOP;&lt;br /&gt;
	END;&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;
==Entrega==&lt;br /&gt;
* Són exercicis voluntaris, no s'ha d'entregar&lt;br /&gt;
&lt;br /&gt;
==Recursos==&lt;br /&gt;
En el Moodle també pots descarregar el codi per crear les taules, i el codi que s'ha vist a classe.&lt;br /&gt;
&lt;br /&gt;
==Durarda==&lt;br /&gt;
2,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>