/************* 019 LOOP2 ***********/
SET SERVEROUTPUT ON
BEGIN
LOOP
DBMS_OUTPUT.PUT_LINE('I WANTED YOU');
END LOOP;
END;
DECLARE
l_count PLS_INTEGER := 0;
BEGIN
LOOP
DBMS_OUTPUT.PUT_LINE('MUCH BETTER');
l_count := l_count + 1;
EXIT WHEN l_count = 20;
END LOOP;
END;
/************* 020 LOOP2 ***********/
SET SERVEROUTPUT ON
BEGIN
FOR v_count IN 1 .. 20 LOOP
DBMS_OUTPUT.PUT_LINE('Iteration: ' || v_count);
END LOOP;
END;
/************* 021 LOOP2 ***********/
SET SERVEROUTPUT ON
DECLARE
l_count PLS_INTEGER := 1;
BEGIN
WHILE l_count <= 20 LOOP
DBMS_OUTPUT.PUT_LINE('While loop iteration: ' || l_count);
l_count := l_count + 1;
END LOOP;
END;
sábado, 30 de noviembre de 2013
proc impares
HACER UN PROCEDIMIENTO QUE MUESTRE LOS NUMEROS IMPARES ENTRE 2 NUMEROS
/*CREAR LA FUNCION*/
CREATE OR REPLACE PROCEDURE
impares(n1 IN PLS_INTEGER, n2 IN PLS_INTEGER) IS
BEGIN
FOR I IN n1 .. n2 LOOP
if I mod 2 = 1 THEN
DBMS_OUTPUT.PUT_LINE(I);
END IF;
END LOOP;
END;
/*llamar a la funcion*/
SET SERVEROUT PUT
BEGIN
impares(20,40);
END;
/*CREAR LA FUNCION*/
CREATE OR REPLACE PROCEDURE
impares(n1 IN PLS_INTEGER, n2 IN PLS_INTEGER) IS
BEGIN
FOR I IN n1 .. n2 LOOP
if I mod 2 = 1 THEN
DBMS_OUTPUT.PUT_LINE(I);
END IF;
END LOOP;
END;
/*llamar a la funcion*/
SET SERVEROUT PUT
BEGIN
impares(20,40);
END;
fun cursor letra libros
Crea una funcion que introduciendo una letra, diga el nº de libros que empiezan por ella.
CREATE OR REPLACE FUNCTION contador_de_libros(letra IN CHAR) PLS_INTEGER IS
lr_books BOOK%ROWTYPE;
cont PLS_INTEGER:=0;
CURSOR books_cursor(l char) IS SELECT * FROM book b
WHERE UPPER(b.title) LIKE UPPER(letra) || '%';
BEGIN
OPEN books_cursor;
LOOP
FETCH books_cursor INTO lr_books;
EXIT WHEN books_cursor%NOTFOUND;
cont:=cont + 1;
END LOOP;
CLOSE books_cursor;
RETURN cont;
END;
CREATE OR REPLACE FUNCTION contador_de_libros(letra IN CHAR) PLS_INTEGER IS
lr_books BOOK%ROWTYPE;
cont PLS_INTEGER:=0;
CURSOR books_cursor(l char) IS SELECT * FROM book b
WHERE UPPER(b.title) LIKE UPPER(letra) || '%';
BEGIN
OPEN books_cursor;
LOOP
FETCH books_cursor INTO lr_books;
EXIT WHEN books_cursor%NOTFOUND;
cont:=cont + 1;
END LOOP;
CLOSE books_cursor;
RETURN cont;
END;
proc monedas
Crear un procedimiento que introduzcas una cantidad y te diga cuantas monedas de cada son.
create or replace
procedure cambio_monedas (importe IN PLS_INTEGER) IS
resto PLS_INTEGER := 0;
quinientos PLS_INTEGER := 0;
doscientos PLS_INTEGER := 0;
cien PLS_INTEGER := 0;
cincuenta PLS_INTEGER := 0;
veinte PLS_INTEGER := 0;
diez PLS_INTEGER := 0;
cinco PLS_INTEGER := 0;
dos PLS_INTEGER := 0;
uno PLS_INTEGER := 0;
BEGIN
quinientos := floor(importe / 500);
resto := importe MOD 500;
doscientos := floor(resto / 200);
resto := resto MOD 200;
cien := floor(resto / 200);
resto := resto MOD 200;
cincuenta := floor(resto / 50);
resto := resto MOD 50;
veinte := floor(resto / 20);
resto := resto MOD 20;
diez := floor(resto / 10);
resto := resto MOD 10;
cinco := floor(resto / 5);
resto := resto MOD 5;
dos := floor(resto / 2);
resto := resto MOD 2;
uno := floor(resto / 1);
resto := resto MOD 1;
DBMS_OUTPUT.PUT_LINE ('BILLETES DE 500: ' || quinientos);
DBMS_OUTPUT.PUT_LINE ('BILLETES DE 200: ' || doscientos);
DBMS_OUTPUT.PUT_LINE ('BILLETES DE 100: ' || cien);
DBMS_OUTPUT.PUT_LINE ('BILLETES DE 50: ' || cincuenta);
DBMS_OUTPUT.PUT_LINE ('BILLETES DE 20: ' || veinte);
DBMS_OUTPUT.PUT_LINE ('BILLETES DE 10: ' || diez);
DBMS_OUTPUT.PUT_LINE ('BILLETES DE 5: ' || cinco);
DBMS_OUTPUT.PUT_LINE ('MONEDAS DE 2: ' || dos);
DBMS_OUTPUT.PUT_LINE ('MONEDAS DE 1: ' || uno);
END;
create or replace
procedure cambio_monedas (importe IN PLS_INTEGER) IS
resto PLS_INTEGER := 0;
quinientos PLS_INTEGER := 0;
doscientos PLS_INTEGER := 0;
cien PLS_INTEGER := 0;
cincuenta PLS_INTEGER := 0;
veinte PLS_INTEGER := 0;
diez PLS_INTEGER := 0;
cinco PLS_INTEGER := 0;
dos PLS_INTEGER := 0;
uno PLS_INTEGER := 0;
BEGIN
quinientos := floor(importe / 500);
resto := importe MOD 500;
doscientos := floor(resto / 200);
resto := resto MOD 200;
cien := floor(resto / 200);
resto := resto MOD 200;
cincuenta := floor(resto / 50);
resto := resto MOD 50;
veinte := floor(resto / 20);
resto := resto MOD 20;
diez := floor(resto / 10);
resto := resto MOD 10;
cinco := floor(resto / 5);
resto := resto MOD 5;
dos := floor(resto / 2);
resto := resto MOD 2;
uno := floor(resto / 1);
resto := resto MOD 1;
DBMS_OUTPUT.PUT_LINE ('BILLETES DE 500: ' || quinientos);
DBMS_OUTPUT.PUT_LINE ('BILLETES DE 200: ' || doscientos);
DBMS_OUTPUT.PUT_LINE ('BILLETES DE 100: ' || cien);
DBMS_OUTPUT.PUT_LINE ('BILLETES DE 50: ' || cincuenta);
DBMS_OUTPUT.PUT_LINE ('BILLETES DE 20: ' || veinte);
DBMS_OUTPUT.PUT_LINE ('BILLETES DE 10: ' || diez);
DBMS_OUTPUT.PUT_LINE ('BILLETES DE 5: ' || cinco);
DBMS_OUTPUT.PUT_LINE ('MONEDAS DE 2: ' || dos);
DBMS_OUTPUT.PUT_LINE ('MONEDAS DE 1: ' || uno);
END;
proc SQL borrado doble
Enunciado: Crea un procedimiento que haga una consulta a autores,
introduce un ID de un autor y borra todo lo que haya hecho ese autor (libro y autor.)
create or replace
PROCEDURE DEL_AUTHORS(id_author IN AUTHORS.ID%TYPE) IS
CURSOR c_inventory(p_isbn BOOKS.ISBN%TYPE) IS
SELECT *
FROM INVENTORY
WHERE isbn = p_isbn;
CURSOR c_books(p_author_id AUTHORS.ID%TYPE) IS
SELECT *
FROM BOOKS
WHERE AUTHOR1 = p_author_id OR AUTHOR2 = p_author_id OR AUTHOR3 = p_author_id;
BEGIN
FOR I IN c_books(id_author) LOOP
DBMS_OUTPUT.PUT_LINE(I.ISBN);
FOR J IN c_inventory(I.ISBN) LOOP
DELETE FROM INVENTORY WHERE isbn = J.ISBN;
END LOOP;
DELETE FROM BOOKS WHERE ISBN = I.ISBN;
END LOOP;
DELETE FROM AUTHORS WHERE ID =id_author;
END;
introduce un ID de un autor y borra todo lo que haya hecho ese autor (libro y autor.)
create or replace
PROCEDURE DEL_AUTHORS(id_author IN AUTHORS.ID%TYPE) IS
CURSOR c_inventory(p_isbn BOOKS.ISBN%TYPE) IS
SELECT *
FROM INVENTORY
WHERE isbn = p_isbn;
CURSOR c_books(p_author_id AUTHORS.ID%TYPE) IS
SELECT *
FROM BOOKS
WHERE AUTHOR1 = p_author_id OR AUTHOR2 = p_author_id OR AUTHOR3 = p_author_id;
BEGIN
FOR I IN c_books(id_author) LOOP
DBMS_OUTPUT.PUT_LINE(I.ISBN);
FOR J IN c_inventory(I.ISBN) LOOP
DELETE FROM INVENTORY WHERE isbn = J.ISBN;
END LOOP;
DELETE FROM BOOKS WHERE ISBN = I.ISBN;
END LOOP;
DELETE FROM AUTHORS WHERE ID =id_author;
END;
muy basico
BÁSICO SUMAS
DECLARE
valor1 PLS_INTEGER:=1;
valor2 PLS_INTEGER:=2;
resultado PLS_INTEGER:=0;
BEGIN
resultado:= valor1 + valor2;
DBMS_OUTPUT.PUT_LINE(resultado);
END;
INTRODUCCIÓN A VARIABLES
SINTAXIS
DECLARE
valor1 PLS_INTEGER:=1;
valor2 PLS_INTEGER:=2;
resultado PLS_INTEGER:=0;
BEGIN
resultado:= valor1 + valor2;
DBMS_OUTPUT.PUT_LINE(resultado);
END;
INTRODUCCIÓN A VARIABLES
SET serveroutput ON
DECLARE
mivarcar VARCHAR2(20);
mivarnum number(10,2):=50;
mivarfecha date;
BEGIN
mivarcar:='Alberto';
DBMS_OUTPUT.PUT_LINE('Hola'||mivarcar);
DBMS_OUTPUT.PUT_LINE('Hola'||mivarnum);
mivarfecha:=sysdate + 7;
DBMS_OUTPUT.PUT_LINE('Hoy es '||to_char(sysdate,'dd/mm/yyyy')||', dentro de una semana sera '||
to_char(mivarfecha,'dd/mm,yyyy'));
END;
DECLARE
mivarcar VARCHAR2(20);
mivarnum number(10,2):=50;
mivarfecha date;
BEGIN
mivarcar:='Alberto';
DBMS_OUTPUT.PUT_LINE('Hola'||mivarcar);
DBMS_OUTPUT.PUT_LINE('Hola'||mivarnum);
mivarfecha:=sysdate + 7;
DBMS_OUTPUT.PUT_LINE('Hoy es '||to_char(sysdate,'dd/mm/yyyy')||', dentro de una semana sera '||
to_char(mivarfecha,'dd/mm,yyyy'));
END;
SINTAXIS
La estructura del IF seria la siguiente:
IF <condición> THEN
instrucciones
ELSEIF <condición> THEN
instrucciones
....
ELSE
instrucciones
END IF;
instrucciones
ELSEIF <condición> THEN
instrucciones
....
ELSE
instrucciones
END IF;
La estructura del WHILE seria la siguiente:
WHILE <condición> LOOP
instrucciones
END LOOP;
instrucciones
END LOOP;
La estructura del FOR se escribiría así:
FOR <variable> IN <mínimo> <máximo> LOOP
instrucciones
END LOOP
instrucciones
END LOOP
Si queremos que nos vaya contando al revés, es decir de 5 hasta 0 por ejemplo, la sintaxis seria la siguiente:
FOR <variable> IN REVERSE
<final>.......<inicio> LOOP
instrucciones
.....
END LOOP;
<final>.......<inicio> LOOP
instrucciones
.....
END LOOP;
Y la estructura del LOOP seria de esta forma:
LOOP
instrucciones
....
EXIT WHEN <condición>
instrucciones
...
END LOOP;
instrucciones
....
EXIT WHEN <condición>
instrucciones
...
END LOOP;
Suscribirse a:
Entradas (Atom)