Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ------Area Perimetro-----
- DECLARE
- CURSOR rectanguloi IS SELECT * FROM rectangulo;
- elrectangulo rectangulo%ROWTYPE;
- BEGIN
- dbms_output.put_line('RID'||' '||'AREA'||' '||'PERIMETRO');
- FOR elrectangulo IN rectanguloi LOOP
- dbms_output.put_line(elrectangulo.rid||' '|| rectangleTools.Area(elrectangulo.rid)||' '||rectangleTools.Perimetro(elrectangulo.rid));
- END LOOP;
- END;
- /
- ----------------------------
- ---------------Area Rec------------
- DECLARE
- CURSOR rec IS SELECT * FROM rectangulo;
- reci rectangulo%ROWTYPE;
- BEGIN
- dbms_output.put_line('---------rectangulos area > 4------------');
- FOR reci IN rec LOOP
- IF (area_rectangulo(reci.xl,reci.yl,reci.xh,reci.yh)>4) THEN
- dbms_output.put_line((reci.rid));
- END IF;
- END LOOP;
- END;
- ----------------------------------
- -------------Area >4---------------
- DECLARE
- CURSOR rectanguloi IS SELECT * FROM rectangulo;
- elrectangulo rectangulo%ROWTYPE;
- area number;
- BEGIN
- dbms_output.put_line('RID'||' '||'AREA');
- FOR elrectangulo IN rectanguloi LOOP
- area:=rectangleTools.Area(elrectangulo.rid);
- IF area>4 THEN
- dbms_output.put_line(elrectangulo.rid||' '||area );
- END IF;
- END LOOP;
- END;
- /
- -----------------------------------
- ------------Arregla Rectangulo PreparedStatement----
- import java.sql.*;
- class arreglaRectangulo{
- public static void main (String args[]) throws SQLException{
- DriverManager.registerDriver (new oracle.jdbc.driver.OracleDriver());
- Connection conn= DriverManager.getConnection
- ("jdbc:oracle:thin:@oracle.localdomain:1521:orcl", "mquezada", "hack3015");
- Statement stmt= conn.createStatement();
- ResultSet rs = stmt.executeQuery("SELECT RID,XL,XH FROM RECTANGULO");
- PreparedStatement ps1=conn.prepareStatement("UPDATE RECTANGULO SET XL=? WHERE RID = ?");
- PreparedStatement ps2=conn.prepareStatement("UPDATE RECTANGULO SET XH=? WHERE RID = ?");
- while (rs.next()){
- int rid=rs.getInt("RID");
- double xl = rs.getDouble("XL");
- double xh = rs.getDouble("XH");
- xl=xl*0.1;
- xh=xh*0.1;
- ps1.setDouble(1,xl);
- ps1.setInt(2,rid);
- ps2.setDouble(1,xh);
- ps2.setInt(2,rid);
- ps1.executeUpdate();
- ps2.executeUpdate();
- }
- ps1.close();
- ps2.close();
- }
- }
- -----------------------------------------
- -----------------Cada Punto------------------
- DECLARE
- CURSOR puntoi IS SELECT * FROM puntos;
- CURSOR rectanguloi IS SELECT * FROM rectangulo;
- elrectangulo rectangulo%ROWTYPE;
- elpunto puntos%ROWTYPE;
- contiene number;
- BEGIN
- contiene:=0;
- dbms_output.put_line('PUNTO'||' '||'RID DE RECTANGULOS');
- FOR elpunto IN puntoi LOOP
- FOR elrectangulo IN rectanguloi LOOP
- IF rectangleTools.puntoenRectangulo(elpunto.x,elpunto.y,elrectangulo.rid)=1 THEN
- contiene:=contiene+1;
- END IF;
- END LOOP;
- --Ya se si el punto esta contenido en alguno o no
- IF contiene>0 THEN
- dbms_output.put('('||elpunto.x||','||elpunto.y||')'||' ');
- FOR elrectangulo IN rectanguloi LOOP
- IF rectangleTools.puntoenRectangulo(elpunto.x,elpunto.y,elrectangulo.rid)=1 THEN
- dbms_output.put(elrectangulo.rid||' ');
- END IF;
- END LOOP;
- END IF;
- contiene:=0;
- dbms_output.put_line('');
- END LOOP;
- END;
- /
- -----------------------------------
- ---------------Cada Rectangulo------------
- DECLARE
- CURSOR puntoi IS SELECT * FROM puntos;
- CURSOR rectanguloi IS SELECT * FROM rectangulo;
- elrectangulo rectangulo%ROWTYPE;
- elpunto puntos%ROWTYPE;
- contiene number;
- BEGIN
- contiene:=0;
- dbms_output.put_line('RID RECTANGULO'||' '||'CANTIDAD DE PUNTOS');
- FOR elrectangulo IN rectanguloi LOOP
- FOR elpunto IN puntoi LOOP
- IF rectangleTools.puntoenRectangulo(elpunto.x,elpunto.y,elrectangulo.rid)=1 THEN
- contiene:=contiene+1;
- END IF;
- END LOOP;
- --Ya se si el punto esta contenido en alguno o no
- IF contiene>0 THEN
- dbms_output.put(elrectangulo.rid||' '||contiene);
- END IF;
- contiene:=0;
- dbms_output.put_line('');
- END LOOP;
- END;
- /
- --------------------------------------------
- -------------Crear Tabla-----------------
- begin
- create table casados(
- idM number not null,
- idH number not null,
- fechaCas date,
- fechaSep date default null),
- foreigh key (idM) references amigos(id),
- foreigh key (idH) references amigos(id);
- end;
- -----------------------------------------
- -------------------edad-----------------
- CREATE OR REPLACE FUNCTION edad(id_amigo number)
- RETURN NUMBER AS
- fnac_amigo DATE;
- now DATE;
- BEGIN
- SELECT SYSDATE INTO now FROM DUAL;
- SELECT FNAC INTO fnac_amigo FROM amigos WHERE id_amigo=id;
- RETURN (now-fnac_amigo)/365;
- END;
- /
- -----------------------------------------
- -------------------edadesSexo.pl----------
- DECLARE
- -- Un ejemplo de cursor explicito
- CURSOR amg IS
- SELECT * FROM amigos;
- elamigo amigos%ROWTYPE;
- mm20 INTEGER; m2030 INTEGER; m3040 INTEGER; mm40 INTEGER;
- hm20 INTEGER; h2030 INTEGER; h3040 INTEGER; hm40 INTEGER;
- edad INTEGER;
- FechaSistema DATE;
- BEGIN
- mm20:=0; m2030:=0; m3040:=0;mm40:=0;
- hm20:=0; h2030:=0; h3040:=0;hm40:=0;
- -- Fecha del sistema
- SELECT SYSDATE INTO FechaSistema FROM DUAL;
- FOR elamigo in amg LOOP
- -- se calcula la edad (en años) de cada amigo
- edad := (FechaSistema - elamigo.fnac) / 365;
- -- Mujeres
- IF (elamigo.sexo='F') THEN
- IF edad < 20 THEN mm20 := mm20+1;
- ELSIF edad >= 20 and edad <=30 THEN m2030 := m2030+1;
- ELSIF edad >= 30 and edad <=40 THEN m3040 := m3040+1;
- ELSE mm40 := mm40 +1;
- END IF;
- -- Hombres
- ELSE
- IF edad < 20 THEN hm20 := hm20+1;
- ELSIF edad >= 20 and edad <=30 THEN h2030 := h2030+1;
- ELSIF edad >= 30 and edad <=40 THEN h3040 := h3040+1;
- ELSE hm40 := hm40 +1;
- END IF;
- END IF;
- END LOOP;
- -- impresión de la tabla
- dbms_output.put_line( '-----------------Rango de edades ----------' );
- dbms_output.put_line( ' < 20 [20,30] [30,40] >40 Total ' );
- dbms_output.put_line( '--------------------------------------------' );
- dbms_output.put_line( 'Mj ' || mm20 || ' ' || m2030 || ' ' || m3040 || ' ' || ' ' || mm40|| ' ' || (mm20+m2030+m3040+mm40));
- dbms_output.put_line( 'Hm ' || hm20 || ' ' || h2030 || ' ' || h3040 || ' ' || ' ' || hm40 || ' ' || (hm20+h2030+h3040+hm40));
- dbms_output.put_line( '---------------------------------------------' );
- dbms_output.put_line( 'Tt ' || (mm20+hm20) || ' ' || (h2030+m2030) || ' ' || (m3040+h3040) || ' ' || ' ' || (mm40+ hm40) || ' ' || (mm20+hm20+m2030+h2030+m3040+h3040+mm40+hm40));
- dbms_output.put_line( '---------------------------------------------' );
- END;
- -----------------------------------------------------
- ------------------isVigente-------------------
- CREATE OR REPLACE FUNCTION isVigente(idM number, idH number)
- RETURN BOOLEAN AS
- vigente BOOLEAN;
- elcasado casados%ROWTYPE;
- BEGIN
- elcasado:=SELECT fechaSep from casados WHERE idM=casadoss.idM and idH=casados.idH;
- IF (fechaSep is null) THEN
- vigente:=true;
- ELSE
- vigente:=false;
- END IF;
- END;
- /
- --------------------------------------------------
- ------------------------function area rect----------
- CREATE OR REPLACE FUNCTION area_rectangulo(xl NUMBER, yl NUMBER, xh NUMBER, yh NUMBER)
- RETURN NUMBER AS
- area NUMBER;
- BEGIN
- area:= (xh-xl)*(yh-yl);
- RETURN area;
- END;
- -------------------------------------------------
- --------------------getRows2---------------------
- import java.sql.*;
- class getRows2{
- public static void main(String args []) throws SQLException{
- DriverManager.registerDriver (new oracle.jdbc.driver.OracleDriver());
- Connection conn=DriverManager.getConnection
- ("jdbc:oracle:thin:@oracle.localdomain:1521:orcl","mquezada","hack3015");
- Statement stmt=conn.createStatement();
- ResultSet rs= stmt.executeQuery("SELECT sexo , COUNT(*) as cont FROM AMIGOS GROUP BY SEXO");
- while(rs.next()){
- String sexo=rs.getString("sexo");
- if(sexo.equals(args[0])){
- int contador=rs.getInt("cont");
- System.out.println(sexo+" "+contador);
- }
- }
- stmt.close();
- }
- }
- -------------------------------------------------
- ---------------Insert---------------------------
- import java.sql.*;
- class insert{
- public static void main(String Args[]) throws SQLException{
- DriverManager.registerDriver (new oracle.jdbc.driver.OracleDriver());
- Connection conn= DriverManager.getConnection
- ("jdbc:oracle:thin:@oracle.localdomain:1521:orcl", "mquezada", "hack3015");
- Statement stmt=conn.createStatement();
- stmt.executeUpdate("INSERT INTO AMIGOS VALUES(32, 'Lorena', 56488829, date '1970-08-1', 'F',780,540)");
- stmt.close();
- }
- }//
- ------------------------------------------------
- -------------------Insert2-----------------------
- import java.sql.*;
- class insert2{
- public static void main(String args[]) throws SQLException{
- DriverManager.registerDriver (new oracle.jdbc.driver.OracleDriver());
- Connection conn= DriverManager.getConnection
- ("jdbc:oracle:thin:@oracle.localdomain:1521:orcl", "mquezada", "hack3015");
- Statement stmt=conn.createStatement();
- stmt.executeUpdate("INSERT INTO AMIGOS VALUES('"+args[0]+"','"+args[1]+"',"+args[2]+", date '"+args[3]+"','"+args[4]+"',null,null)");
- stmt.close();
- }
- }//
- -----------------------------------------------
- --------------------InsertPs---------------------
- import java.sql.*;
- class insertPs{
- public static void main(String args[]) throws SQLException{
- DriverManager.registerDriver (new oracle.jdbc.driver.OracleDriver());
- Connection conn= DriverManager.getConnection
- ("jdbc:oracle:thin:@oracle.localdomain:1521:orcl", "mquezada", "hack3015");
- PreparedStatement ps=conn.prepareStatement("insert into amigos values (?,?,?,?,?,null,null)");
- int id= new Integer(args[0]).intValue();
- String nombre= args[1];
- int cel = new Integer(args[2]).intValue();
- Date fnac=Date.valueOf(args[3]);
- String sexo=args[4];
- ps.setInt(1,id);
- ps.setString(2,nombre);
- ps.setInt(3,cel);
- ps.setDate(4,fnac);
- ps.setString(5,sexo);
- ps.executeUpdate();
- ps.close();
- }
- }//
- ---------------------------------------------
- -------------------InsertPs2--------------------
- import java.sql.*;
- import java.util.Scanner;
- class insertPs2{
- public static void main(String args[]) throws SQLException{
- DriverManager.registerDriver (new oracle.jdbc.driver.OracleDriver());
- Connection conn= DriverManager.getConnection
- ("jdbc:oracle:thin:@oracle.localdomain:1521:orcl", "mquezada", "hack3015");
- PreparedStatement ps=conn.prepareStatement("insert into amigos values (?,?,?,?,?,null,null)");
- Scanner sc=new Scanner (System.in);
- for(;;){
- System.out.println("--------Datos del Amigo--------");
- System.out.print("ID (-1 --> Termina) : ");
- int id= sc.nextInt();
- System.out.println();
- if(id==-1){
- System.out.println("Terminado ...");
- ps.close();
- System.exit(0);
- }
- System.out.print("Nombre : ");
- String nombre= sc.next();
- System.out.println();
- System.out.print("Celular : ");
- int cel = sc.nextInt();
- System.out.println();
- System.out.print("Fecha Nacimiento (aaaa-mm-dd) : ");
- Date fnac=Date.valueOf(sc.next());
- System.out.println();
- //Date miDate = new SimpleDateFormat("dd/MM/yyyy").parse(scanner.nextLine());
- System.out.print("Sexo (M/F) : ");
- String sexo=sc.next();
- ps.setInt(1,id);
- ps.setString(2,nombre);
- ps.setInt(3,cel);
- ps.setDate(4,fnac);
- ps.setString(5,sexo);
- ps.executeUpdate();
- System.out.println("Insertado...");
- }
- }
- }//
- -------------------------------------------------
- ------------------isCasado------------------------
- create or replace function isCasado (id_amigo number)
- RETURN BOOLEAN
- IS
- casado matrimonios%ROWTYPE;
- BEGIN
- SELECT * INTO casado FROM matrimonios where id_amigo= idh or id_amigo=idm;
- if casado.idh is null Then
- return false;
- END IF;
- Return true;
- END;
- /
- -------------------------------------------------
- ---------------------LAB-----------------------
- import java.sql.*;
- import java.util.*;
- class LAB {
- public static void main (String args []) throws SQLException
- {
- Scanner sc= new Scanner(System.in);
- if(args.length!=7){
- System.err.println("Usage: java insertAmigo ID Nombre Cel Fnac(aaaa-mm-dd) Sexo(M/F) IDMADRE IDMADRE");
- System.exit(-1);
- }
- int id;
- String nombre;
- int cel;
- Date fechaNacimiento;
- String sexo;
- int idMadre;
- int idPadre;
- DriverManager.registerDriver (new oracle.jdbc.driver.OracleDriver());
- Connection conn = DriverManager.getConnection
- ("jdbc:oracle:thin:@oracle.localdomain:1521:orcl", "mquezada", "hack3015");
- Statement stmt = conn.createStatement();
- PreparedStatement ps = conn.prepareStatement("insert into amigos values (?,?,?,?,?,?,?)");
- id=new Integer(args[0]).intValue();
- nombre=args[1];
- cel=new Integer(args[2]).intValue();
- fechaNacimiento=Date.valueOf(args[3]);
- sexo=args[4];
- idMadre=new Integer (args[5]).intValue();
- idPadre=new Integer (args[6]).intValue();
- ps.setInt(1,id);
- ps.setString(2,nombre);
- ps.setInt(3,cel);
- ps.setDate(4,fechaNacimiento);
- ps.setString(5,sexo);
- ps.setInt(6,idMadre);
- ps.setInt(7,idPadre);
- ps.executeUpdate();
- ps.close();
- }
- }
- -------------------------------------------------------
- -----------------------LAB01---------------------------
- CREATE OR REPLACE TABLE rectangulo (
- rid NUMBER PRIMARY KEY ,
- xl NUMBER,
- yl NUMBER,
- XH NUMBER,
- YH NUMBER
- );
- INSERT INTO rectangulo VALUES(1,0,0,2,2);
- INSERT INTO rectangulo VALUES(2,1,5,4,9);
- INSERT INTO rectangulo VALUES(3,5,6,7,7);
- INSERT INTO rectangulo VALUES(4,4,4,8,8);
- -- Ejercicio 1
- CREATE OR REPLACE FUNCTION funcion1lab1(id NUMBER)
- RETURN NUMBER AS
- rec rectangulo%ROWTYPE;
- area NUMBER;
- BEGIN
- SELECT * INTO rec FROM rectangulo WHERE rid = id;
- area := (rec.xh - rec.xl) * (rec.yh - rec.yl);
- RETURN area;
- END;
- SELECT funcion1lab1(2) FROM DUAL;
- --Ejercicio 2
- SELECT * FROM rectangulo WHERE funcion1lab1(RID)>4;
- -- Ejercicio 3
- CREATE OR REPLACE FUNCTION funcion2lab1(id NUMBER)
- RETURN NUMBER AS;
- rec rectangulo%ROWTYPE;
- perimetro NUMBER;
- BEGIN
- SELECT * INTO rec FROM rectangulo WHERE rid = id;
- perimetro := ((rec.xh - rec.xl) + (rec.yh - rec.yl)) * 2;
- RETURN perimetro;
- END;
- -- Ejercicio 4
- CREATE OR REPLACE FUNCTION funcion3lab1(x1 NUMBER, y1 NUMBER, x2 NUMBER, y2 NUMBER, a NUMBER, b NUMBER)
- RETURN NUMBER AS
- BEGIN
- IF(a<x1 OR a>x2 OR b<y1 OR b>y2) THEN
- RETURN 0;
- ELSE
- RETURN 1;
- END IF;
- END;
- -- Ejercicio 5
- CREATE OR REPLACE FUNCTION funcion4lab1(x1 NUMBER, y1 NUMBER, X2 NUMBER, y2 NUMBER, w1 NUMBER, z1 NUMBER, w2 NUMBER, z2 NUMBER)
- RETURN NUMBER AS
- BEGIN
- IF((w1 >= x1 AND w2 <= x2) AND (z1 >= y1 AND z2 <= y2)) THEN
- RETURN 1;
- ELSE
- RETURN 0;
- END IF;
- END;
- --Ejercicio 6
- CREATE OR REPLACE PROCEDURE procedimiento1lab1 IS
- CURSOR c_rec IS SELECT * FROM rectangulo;
- rec3 rectangulo%ROWTYPE;
- BEGIN
- FOR rec3 IN c_rec LOOP
- IF (funcion1lab1(rec3.xl,rec3.yl,rec3.hx,rec3.yh) > 3 AND funcion3lab1(rec3.xl,rec3.yl,rec3.hx,rec3.yh,2,6) = 1) THEN
- DBMS_OUTPUT.PUT_LINE('RID ' || ' ' || 'XL' || ' ' || 'YL' || ' ' || 'XH' || ' ' || 'YH');
- DBMS_OUTPUT.PUT_LINE(rec3.rid || ' ' || rec3.xl || ' ' || rec3.yl || ' ' || rec3.xh || ' ' || rec3.yh);
- END IF;
- END LOOP;
- END;
- ------------------------------------------------------
- ---------------------lab2.pl-----------------------------
- Declare
- Cursor hot1 is Select * from hoteles;
- Cursor hot2 is Select * from hoteles;
- hoteli hoteles%ROWTYPE;
- hotelj hoteles%ROWTYPE;
- skyline boolean;
- Begin
- dbms_output.put_line('-----------------------Hoteles Skyline----------------------');
- dbms_output.put_line('Nombre');
- skyline:=true;
- For hoteli in hot1 LOOP
- For hotelj in hot2 LOOP
- If hoteli.id<>hotelj.id Then
- If hoteli.distancia_playa>=hotelj.distancia_playa and hoteli.precio>=hotelj.precio Then
- skyline:=false;
- End If;
- End IF;
- End LOOP;
- If skyline then
- dbms_output.put_line(hoteli.nombre);
- End If;
- skyline:=true;
- End LOOP;
- END;
- ---------------------------------------------------
- ---------------------lab3.trigger-------------------
- CREATE OR REPLACE TRIGGER separar
- AFTER UPDATE OF fechaSep ON matrimonios
- FOR EACH ROW
- DECLARE
- duracion number;
- BEGIN
- IF :NEW.fechaSep is not null THEN
- duracion:=(:NEW.fechaSep-:OLD.fechaCas)/365;
- INSERT INTO separacion values(:OLD.idH,:OLD.idM,duracion);
- END IF;
- END;
- /
- --------------------------------------------------
- --------------------------lab3.trigger2----------
- CREATE OR REPLACE TRIGGER noPrimos
- BEFORE INSERT ON matrimonios
- FOR EACH ROW
- DECLARE
- primos boolean;
- idPadreH amigos.idPadre%TYPE;
- idMadreH amigos.idMadre%TYPE;
- idAbuelaH amigos.idMadre%TYPE;
- idAbueloH amigos.idPadre%TYPE;
- idPadreM amigos.idPadre%TYPE;
- idMadreM amigos.idMadre%TYPE;
- idAbuelaM amigos.idMadre%TYPE;
- idAbueloM amigos.idPadre%TYPE;
- BEGIN
- primos:=false;
- select amigos.idPadre into idPadreH from amigos where :NEW.idH=id;
- select amigos.idMadre into idMadreH from amigos where :NEW.idH=id;
- select amigos.idPadre into idPadreM from amigos where :NEW.idM=id;
- select amigos.idMadre into idMadreM from amigos where :NEW.idM=id;
- select amigos.idPadre into idAbueloH from amigos where idPadreH=id;
- select amigos.idMadre into idAbuelaH from amigos where idMadreH=id;
- select amigos.idPadre into idAbueloM from amigos where idPadreM=id;
- select amigos.idMadre into idAbuelaM from amigos where idMadreM=id;
- IF idAbuelaH=idAbuelaM or idAbueloH=idAbueloM THEN
- raise_application_error(-20000,'<'||:NEW.idH||' y '||:NEW.idM||' son primos >');
- END IF;
- END;
- /
- ----------------------------------------------------
- ----------------------masJoven---------------------
- CREATE OR REPLACE PROCEDURE masJoven
- IS
- CURSOR amigoi IS SELECT * FROM amigos;
- elamigo amigos%ROWTYPE;
- elMasJoven amigos.nombre%TYPE;
- mini number;
- BEGIN
- elMasJoven:='';
- mini:=999999;
- FOR elamigo IN amigoi LOOP
- IF(edad(elamigo.id)<=mini) THEN
- mini:=edad(elamigo.id);
- elMasJoven:= elamigo.nombre;
- END IF;
- END LOOP;
- dbms_output.put_line('El amigo mas joven es '||elMasJoven);
- END masJoven;
- /
- -------------------------------------------------
- ----------------------pretest1--------------------
- Declare
- Cursor casadoi is select * from casados;
- elcasado casados%ROWTYPE;
- contCas number;
- contSep number;
- Begin
- contCas:=0;
- contSep:=0;
- FOR elcasado IN casadoi LOOP
- IF (elcasado.fechaSep is null) THEN
- contCas:=contCas+1;
- ELSE
- contSep:=contSep+1;
- END IF;
- END LOOP;
- dbms_output.put_line('La cantidad de matrimonios terminados es: '|| contSep );
- dbms_output.put_line('La cantidad de matrimonios vigentes es : '||contCas);
- END;
- --------------------------------------------------
- -------------------------pretest2-----------------
- DECLARE
- CURSOR casadoi is select * from casados;
- elcasado casados%ROWTYPE;
- duracion number;
- mujer amigos%ROWTYPE;
- hombre amigos%ROWTYPE;
- now date;
- BEGIN
- dbms_output.put_line('Matrimonio'||' '||'Duración');
- FOR elcasado IN casadoi LOOP
- IF elcasado.fechaSep is null THEN
- SELECT SYSDATE INTO now FROM DUAL;
- duracion:= (now-elcasado.fechaCas)/365;
- ELSE
- duracion:= (elcasado.fechaSep-elcasado.fechaCas)/365;
- END IF;
- select trunc(duracion) into duracion from dual;
- select * into hombre from amigos where id=elcasado.idH;
- select * into mujer from amigos where id=elcasado.idM;
- dbms_output.put_line(hombre.nombre||' y '|| mujer.nombre||' '|| duracion);
- END LOOP;
- END;
- ---------------------------------------------------
- ------------------------pretest3-------------------
- Declare
- CURSOR amigoi IS SELECT * FROM amigos;
- CURSOR casadoi IS SELECT * FROM casados;
- elamigo amigos%ROWTYPE;
- elcasado casados%ROWTYPE;
- cont number;
- contFinal number;
- nombre amigos.nombre%TYPE;
- nombreFinal amigos.nombre%TYPE;
- BEGIN
- cont:=0;
- contFinal:=0;
- FOR elamigo IN amigoi LOOP
- FOR elcasado IN casadoi LOOP
- IF (elamigo.id=elcasado.idH or elamigo.id=elcasado.idM) THEN
- cont:= cont+1;
- nombre:=elamigo.nombre;
- END IF;
- END LOOP;
- IF (contFinal<cont) THEN
- contFinal:=cont;
- nombreFinal:=elamigo.nombre;
- END IF;
- cont:=0;
- END LOOP;
- dbms_output.put_line('El que se ha casado mas veces es '|| nombreFinal || ', con '||contFinal||' veces.');
- END;
- ------------------------------------------------
- --------------------puntoPkg---------------------
- CREATE OR REPLACE PACKAGE PointTools IS
- CURSOR elPunto(elPid puntos.pid%TYPE) IS SELECT * FROM puntos WHERE pid=elPid;
- distancia number;
- --verifica si son iguales
- FUNCTION iguales(x number, y number, pid puntos.pid%TYPE)
- RETURN BOOLEAN;
- --calcula distancia
- FUNCTION distancia (x number, y number, pid puntos.pid%TYPE)
- RETUNR NUMBER;
- --verifica si esta en circulo
- --cuerpo de las funciones
- CREATE OR REPLACE PACKAGE BODY PointTools IS
- --igualdad
- FUNCTION iguales (x number, y number, pid puntos.pid%TYPE)
- RETURN NUMBER IS
- puntoi puntos&ROWTYPE;
- BEGIN
- OPEN elPunto(pid)
- FETCH elPunto into puntoi;
- IF (x=puntoi.x and y=puntoi.y)THEN
- RETURN TRUE;
- END IF;
- RETURN FALSE;
- CLOSE elPunto;
- END iguales;
- --distancia
- FUNCTION distancia (x number, y number, pid puntos.pid%TYPE)
- RETUNR NUMBER IS
- puntoi puntos%ROWTYPE;
- BEGIN
- OPEN elPunto(pid)
- FETCH elPunto INTO puntoi;
- distancia:=(((x-puntoi.x)**2)+((y-puntoi.y)**2))**(1/2);
- CLOSE elPunto;
- RETURN distancia;
- END distancia;
- ---------------------------------------------------
- ----------------recContiene67----------------------
- DECLARE
- CURSOR rectanguloi IS SELECT * FROM rectangulo;
- elrectangulo rectangulo%ROWTYPE;
- BEGIN
- dbms_output.put_line('LOS SIGUIENTES RECTANGULOS CONTIENEN EL (6,7)');
- FOR elrectangulo IN rectanguloi LOOP
- IF rectangleTools.puntoenRectangulo(6,7,elrectangulo.rid)=1 THEN
- dbms_output.put_line(elrectangulo.rid);
- END IF;
- END LOOP;
- END;
- /
- --------------------------------------------------
- ----------------RectanguloPkg-----------------------
- ----Definicion del paquete-----------------
- -------------------------------------------
- CREATE OR REPLACE PACKAGE RectangleTools IS
- dx NUMBER;
- dy NUMBER;
- CURSOR elRec(elId rectangulo.rid%type) IS SELECT * FROM RECTANGULO WHERE rID=elId;
- --calcula el area
- FUNCTION area(elrid INTEGER)
- RETURN NUMBER;
- --calcula el perimetro
- FUNCTION perimetro(elrid INTEGER)
- RETURN NUMBER;
- --verifica si un punto esta dentro de un rectangulo.
- FUNCTION puntoenRectangulo(x NUMBER, y NUMBER, elRid INTEGER)
- RETURN INTEGER;
- END RectangleTools;
- /
- ------ Cuerpo de las funciones-------------------
- ------------------------------------------------
- CREATE OR REPLACE PACKAGE BODY RectangleTools IS
- ---el area
- FUNCTION area(elRid integer)
- RETURN NUMBER IS
- rec rectangulo%ROWTYPE;
- BEGIN
- OPEN elRec(elRid);
- FETCH elRec into rec;
- dx := rec.XH - rec.XL;
- dy := rec.YH - rec.YL;
- CLOSE elRec;
- RETURN (dx * dy);
- END area;
- --- el perimetro
- FUNCTION perimetro(elRid integer)
- RETURN NUMBER IS
- rec rectangulo%ROWTYPE;
- BEGIN
- OPEN elRec(elRid);
- FETCH elRec into rec;
- dx := rec.XH - rec.XL;
- dy := rec.YH - rec.YL;
- CLOSE elRec;
- RETURN (2 * (dx + dy));
- END perimetro;
- --Punto dentro de un rectangulo
- FUNCTION puntoenRectangulo(x NUMBER, y NUMBER, elRid INTEGER)
- RETURN INTEGER IS
- rec rectangulo%ROWTYPE;
- rt INTEGER;
- BEGIN
- OPEN elRec(elRid);
- FETCH elRec into rec;
- rt := 0;
- IF (x>=rec.xl and x <= rec.xh and y >= rec.yl and y <= rec.yh) THEN
- rt:= 1;
- END IF;
- CLOSE elRec;
- RETURN rt;
- END puntoenRectangulo;
- END RectangleTools;
- /
- ---------------------------------------------------
- ------------------skyline_ejemplo------------------
- DECLARE
- CURSOR losHoteles IS select * from hoteles;
- hotel hoteles%ROWTYPE;
- menorPrecio hoteles%ROWTYPE;
- menorDistancia hoteles%ROWTYPE;
- BEGIN
- OPEN losHoteles;
- FETCH losHoteles into menorPrecio;
- menorDistancia := menorPrecio;
- CLOSE losHoteles;
- FOR hotel in losHoteles LOOP
- --REVISO SI ES EL QUE POSEE MENOR PRECIO
- IF hotel.id = menorPrecio.id THEN menorPrecio := hotel;
- ELSIF hotel.precio < menorPrecio.precio THEN menorPrecio := hotel;
- ELSE menorPrecio := menorPrecio;
- END IF;
- --REVISO SI ES EL QUE POSEE MENOR DISTANCIA
- IF hotel.id = menorDistancia.id THEN menorDistancia := hotel;
- ELSIF hotel.distancia_playa < menorDistancia.distancia_playa THEN menorDistancia := hotel;
- ELSE menorDistancia := menorDistancia;
- END IF;
- END LOOP;
- DELETE from hotelSkyline;
- commit;
- IF(menorDistancia.id=menorPrecio.id) THEN INSERT INTO hotelSkyline values (menorDistancia.id,menorDistancia.nombre,menorDistancia.precio,menorDistancia.distancia_playa);
- ELSE dbms_output.put_line('no existe un hotel SKYLINE');
- END IF;
- FOR hotel in losHoteles LOOP
- IF(menorDistancia.id <> hotel.id) THEN
- IF(menorDistancia.precio = hotel.precio AND menorDistancia.distancia_playa = hotel.distancia_playa) THEN INSERT INTO hotelSkyline values(hotel.id,hotel.nombre,hotel.precio,hotel.distancia_playa);
- END IF;
- END IF;
- END LOOP;
- END;
- ------------------------------------------------
- ------------------test1_1-----------------------
- DECLARE
- CURSOR amigoi IS SELECT id,nombre FROM amigos WHERE sexo='M';
- CURSOR casadoi IS SELECT idH FROM casados;
- elamigo amigos%ROWTYPE;
- elcasado casados%ROWTYPE;
- soltero amigos%ROWTYPE;
- cont number;
- BEGIN
- cont:=0;
- dbms_output.put_line('--Hombres solterisimos--');
- dbms_output.put_line('ID'||' '||'NOMBRE');
- cont:=0;
- FOR elamigo IN amigoi LOOP
- FOR elcasado IN casadoi LOOP
- IF (elamigo.id=elcasado.idH) THEN
- cont:=cont+1;
- END IF;
- END LOOP;
- IF cont=0 THEN
- dbms_output.put_line(elamigo.id||' '||elamigo.nombre);
- END IF;
- cont:=0;
- END LOOP;
- END;
- ----------------------------------------------------
- ---------------------------test1_2-------------------
- DECLARE
- CURSOR casadoi is select * from casados;
- elcasado casados%ROWTYPE;
- duracion number;
- maximo number;
- vigente BOOLEAN;
- mujer amigos%ROWTYPE;
- hombre amigos%ROWTYPE;
- now date;
- BEGIN
- duracion:=0;
- maximo:=0;
- dbms_output.put_line('El matrimonio que mas ha durado es :');
- FOR elcasado IN casadoi LOOP
- IF elcasado.fechaSep is null THEN
- SELECT SYSDATE INTO now FROM DUAL;
- duracion:= (now-elcasado.fechaCas)/365;
- vigente:=true;
- ELSE
- duracion:= (elcasado.fechaSep-elcasado.fechaCas)/365;
- vigente:=false;
- END IF;
- select trunc(duracion) into duracion from dual;
- IF maximo < duracion THEN
- maximo:=duracion;
- select * into hombre from amigos where id=elcasado.idH;
- select * into mujer from amigos where id=elcasado.idM;
- END IF;
- END LOOP;
- IF vigente=true THEN
- dbms_output.put_line(hombre.nombre||' y '||mujer.nombre||', '||maximo||' anios.'||' Vigente.');
- ELSE
- dbms_output.put_line(hombre.nombre||' y '||mujer.nombre||', '||maximo||' anios.'||' Separados.');
- END IF;
- END;
- -------------------------------------------------
- ----------------------test2_1--------------------
- CREATE OR REPLACE FUNCTION edadMenor
- RETURN NUMBER
- IS
- CURSOR elamigo IS SELECT * FROM amigos;
- amigoi amigos%ROWTYPE;
- minimo NUMBER;
- fechaDada DATE;
- aux number;
- idAux number;
- BEGIN
- minimo:=99999999;
- fechaDada:=date '1999-12-31';
- FOR amigoi in elamigo LOOP
- aux:=(fechaDada-amigoi.fnac)/365;
- if (aux<0) then
- aux:=aux*-1;
- END IF;
- if(aux<minimo) THEN
- minimo:=aux;
- idAux:=amigoi.id;
- END IF;
- END LOOP;
- Return idAux;
- END;
- /
- ---------------------------------------------------
- -------------------------------test2_2------------
- CREATE OR REPLACE PROCEDURE test2_2 as
- CURSOR elamigo IS SELECT * from amigos;
- amigoi amigos%ROWTYPE;
- CURSOR elcasado IS SELECT * from matrimonios;
- casadoi matrimonios%ROWTYPE;
- nombreMama varchar(30);
- nombrePapa varchar(30);
- aux number;
- aux2 number;
- aux3 number;
- idP number;
- idM number;
- BEGIN
- aux2:=-5;
- aux:=-5;
- FOR amigoi in elamigo LOOP
- if(amigoi.idPadre is null and amigoi.idMadre is null) THEN
- aux3:=-1;
- ELSE
- FOR casadoi in elcasado LOOP
- if amigoi.idPadre=casadoi.idH then aux:=casadoi.idH; end if;
- if amigoi.idMadre=casadoi.idM then aux2:=casadoi.idM; end if;
- END LOOP;
- if(aux<>-5 and aux2<>-5) then
- SELECT nombre into nombrePapa from amigos where id=aux;
- SELECT nombre into nombreMama from amigos where id=aux2;
- dbms_output.put_line(amigoi.nombre ||' '||amigoi.cel||' '||amigoi.fnac||' '||amigoi.sexo||' '||nombrePapa||' '|| nombreMama);
- END IF;
- END IF;
- aux:=-5;
- aux2:=-5;
- END LOOP;
- if aux=-3 then dbms_output.put_line('No existen datos de los padres'); end if;
- END test2_2;
- /
- ----------------------------------------------
- -------------------test2_3--------------------
- CREATE OR REPLACE TRIGGER "JUAN.ORTIZ1601"."INSERTARMAXIMODIEZ"
- BEFORE INSERT ON CASADOS
- FOR EACH ROW
- DECLARE
- cant INT;
- fecha DATE;
- BEGIN
- SELECT count(*) INTO cant FROM CASADOS where fechasep is null;
- DBMS_OUTPUT.PUT_LINE(cant);
- if(cant>=2) THEN
- raise_application_error(-20001,' Se ha superado el maximo de matrimonios casados vigentes');
- end if;
- END;
- /
- ALTER TRIGGER "JUAN.ORTIZ1601"."INSERTARMAXIMODIEZ" ENABLE;
- ----------------------------------------------
- -------test2_4---Llamar funcion JDBC---------
- package lab5;
- import java.sql.*;
- /**
- *
- * @author jc
- */
- public class ejercicioCuatro {
- public static void main(String[] args) throws SQLException{
- DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
- Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@colvin.chillan.ubiobio.cl:1521:orcl","juan.ortiz1601","askjzxmnqwpo19");
- Statement stmt = conn.createStatement();
- CallableStatement cs = conn.prepareCall ("begin ? := fechaMasCercana(?); end;");
- cs.registerOutParameter(1,Types.INTEGER);
- cs.setInt(2, 5);
- cs.executeUpdate();
- int id = cs.getInt(1);
- ResultSet rs = stmt.executeQuery("SELECT * FROM AMIGOS WHERE id = "+id);
- rs.next();
- System.out.println("ID: "+rs.getInt(1));
- System.out.println("Nombre: "+rs.getString(2));
- System.out.println("Celular: "+rs.getInt(3));
- System.out.println("Nacimiento: "+rs.getString(4));
- System.out.println("Sexo: "+rs.getString(5));
- int mama = rs.getInt(6);
- int papa = rs.getInt(7);
- if(mama!=0){
- rs = stmt.executeQuery("SELECT nombre FROM AMIGOS WHERE id = "+mama);
- rs.next();
- System.out.println("Madre: "+rs.getString("nombre"));
- }
- if(papa!=0){
- rs = stmt.executeQuery("SELECT nombre FROM AMIGOS WHERE id = "+papa);
- rs.next();
- System.out.println("Padre: "+rs.getString("nombre"));
- }
- stmt.close();
- cs.close();
- }
- }
- --------------------------------------------------
- ----------------------trigger labx1-------------
- CREATE OR REPLACE TRIGGER menores
- AFTER INSERT ON matrimonios
- FOR EACH ROW
- DECLARE
- edadH number;
- fnacH amigos.fnac%TYPE;
- fnacM amigos.fnac%TYPE;
- edadM number;
- BEGIN
- select fnac into fnacH from amigos where :NEW.idH=amigos.id;
- select fnac into fnacM from amigos where :NEW.idM=amigos.id;
- edadH:=(:NEW.fechaCas-fnacH)/365;
- edadM:=(:NEW.fechaCas-fnacM)/365;
- IF edadH<18 THEN
- INSERT INTO notificaciones values(:NEW.idH,:NEW.idM,'El novio es menor de edad');
- ELSIF edadM<16 THEN
- INSERT INTO notificaciones values (:NEW.idH,:NEW.idM,'La novia es menor de edad');
- END IF;
- END;
- /
- ---------------------------------------------------
- -----------------------trigger lab x2--------------
- CREATE OR REPLACE TRIGGER menores
- BEFORE INSERT ON matrimonios
- FOR EACH ROW
- DECLARE
- edadH number;
- edadM number;
- fnacH amigos.fnac%TYPE;
- fnacM amigos.fnac%TYPE;
- BEGIN
- SELECT fnac INTO fnacH FROM amigos WHERE :NEW.idH=amigos.id;
- SELECT fnac INTO fnacM FROM amigos WHERE :NEW.idM=amigos.id;
- edadH:=(:NEW.fechaCas-fnacH)/365;
- edadM:=(:NEW.fechaCas-fnacM)/365;
- IF edadM<16 and edadH<18 THEN
- raise_application_error(-20000,'<'||'Ambos novios son menores de edad'||'>');
- ELSIF edadM<16 THEN
- raise_application_error(-20000,'<'||'La novia es menor de edad'||'>');
- ELSIF edadH<18 THEN
- raise_application_error(-20000,'<'||'El novio es menor de edad'||'>');
- END IF;
- END;
- -----------------------------------------------
- ----------usa edad menor------------------
- DECLARE
- id number;
- Begin
- id:=edadMenor();
- dbms_output.put_line('El id del amigo con la fecha de nacimiento mas cercana a 1999-12-31 es '||id);
- END;
- /
- -----------------------------------------------
- ------------------------gentVtas--------------
- import java.sql.*;
- import java.util.*;
- import java.io.*;
- import java.util.Random;
- public class GenVtas {
- public static void main(String[] args) throws SQLException {
- DriverManager.registerDriver (new oracle.jdbc.driver.OracleDriver());
- Connection conn = Con();
- PreparedStatement ps = conn.prepareStatement("INSERT INTO VENTAS VALUES(?,?,?,?,?)");
- long dia = 24 * 3600 * 1000; // milisegundos x día
- int ntuplas = 50;
- // Locales
- int l1 = 1;
- int l2 = 3;
- // Productos
- int p1 = 1;
- int p2 = 30;
- // Cantidades
- int q1 = 10;
- int q2 = 20;
- // Montos
- int m1 = 2000;
- int m2 = 50000;
- java.sql.Date f1 = java.sql.Date.valueOf("2012-01-01");
- java.sql.Date f2 = java.sql.Date.valueOf("2018-01-01");
- int df = (int) ((f2.getTime() - f1.getTime()) / dia);
- Random rand = new Random();
- for (int i = 0; i < ntuplas; i++) {
- java.sql.Date f = new java.sql.Date (f1.getTime() + rand.nextInt(df) * dia);
- int idLocal = l1 + rand.nextInt(l2 - l1 + 1) ;
- int idProducto = p1 + rand.nextInt(p2 - p1 + 1);
- int cantidad = q1 + rand.nextInt(q2 - q1 + 1);
- int monto = m1 + rand.nextInt(m2 - m1 + 1);
- ps.setDate(1, f);
- ps.setInt(2, idProducto);
- ps.setInt(3, idLocal);
- ps.setInt(4, cantidad);
- ps.setInt(5, monto);
- ps.executeUpdate();
- System.out.println(f + " " + idLocal + " " + idProducto + " " + cantidad + " " + monto);
- }
- }
- public static Connection Con() throws SQLException {
- DriverManager.registerDriver (new oracle.jdbc.driver.OracleDriver());
- Connection conn = null;
- try {
- conn = DriverManager.getConnection
- ("jdbc:oracle:thin:@oracle.localdomain:1521:orcl", "juan.ortiz1601", "askjzxmnqwpo19");
- } catch (SQLException exception) {
- System.out.println("Error en la conexion de bd");
- System.exit(-1);
- }
- return conn;
- }
- }
- -------------------------------------------------
- -------------------Primo hermano----------------
- CREATE OR REPLACE FUNCTION primoHermanos(R1 number, R2 number)
- RETURN integer AS
- p1 number;
- m1 number;
- p2 number;
- m2 number;
- ph integer;
- BEGIN
- SELECT rutPadre, rutMadre INTO p1, m1 FROM PERSONAS WHERE rut = R1;
- SELECT rutPadre, rutMadre INTO p2, m2 FROM PERSONAS WHERE rut = R2;
- ph :=
- sonHermanos(p1,p2);
- ph := ph + sonHermanos(p1, m2);
- ph := ph + sonHermanos(m1, p2);
- ph := ph + sonHermanos(m1, m2);
- return ph;
- END;
- /
- -------------------------------------------------
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement