inicio de sesión interactiva ASIGBD vicious.hendrix-oracle.cps.unizar.es fecha: 13/03/16 SQL> select * from pieza; ref. Pieza COLOR ---- ---------------- ------------ 91 TUERCA AZUL 92 TUERCA VERDE 93 TORNILLO AZUL 94 TORNILLO ROJIZO 95 TUERCA AZUL 99 TUERCA desconocido 98 MARTILLO desconocido 7 filas seleccionadas. SQL> SELECT nombPieza "tipo", count(clvPieza) "total" 2 FROM Pieza 3 GROUP BY nombPieza; tipo total -------------------------------- ---------- MARTILLO 1 TORNILLO 2 TUERCA 4 SQL> SELECT nombPieza "tipo", count(clvPieza) "total", ROWNUM 2 FROM Pieza 3 GROUP BY nombPieza; SELECT nombPieza "tipo", count(clvPieza) "total", ROWNUM * ERROR en línea 1: ORA-00979: no es una expresión GROUP BY SQL> select rownum, * from pieza; select rownum, * from pieza * ERROR en línea 1: ORA-00936: falta una expresión SQL> select rownum, pieza.* from pieza; ROWNUM ref. Pieza COLOR ---------- ---- ---------------- ------------ 1 91 TUERCA AZUL 2 92 TUERCA VERDE 3 93 TORNILLO AZUL 4 94 TORNILLO ROJIZO 5 95 TUERCA AZUL 6 99 TUERCA desconocido 7 98 MARTILLO desconocido 7 filas seleccionadas. SQL> select rownum, pieza.* from pieza where rownum<4; ROWNUM ref. Pieza COLOR ---------- ---- ---------------- ------------ 1 91 TUERCA AZUL 2 92 TUERCA VERDE 3 93 TORNILLO AZUL SQL> select rownum, pieza.* from pieza order by nombPieza; ROWNUM ref. Pieza COLOR ---------- ---- ---------------- ------------ 7 98 MARTILLO desconocido 3 93 TORNILLO AZUL 4 94 TORNILLO ROJIZO 1 91 TUERCA AZUL 6 99 TUERCA desconocido 5 95 TUERCA AZUL 2 92 TUERCA VERDE 7 filas seleccionadas. SQL> SELECT rownum, pieza.* 2 FROM pieza 3 ORDER BY nombPieza; ROWNUM ref. Pieza COLOR ---------- ---- ---------------- ------------ 7 98 MARTILLO desconocido 3 93 TORNILLO AZUL 4 94 TORNILLO ROJIZO 1 91 TUERCA AZUL 6 99 TUERCA desconocido 5 95 TUERCA AZUL 2 92 TUERCA VERDE 7 filas seleccionadas. SQL> SQL> SELECT rownum, pieza.* 2 FROM pieza 3 ORDER BY nombPieza; ROWNUM ref. Pieza COLOR ---------- ---- ---------------- ------------ 7 98 MARTILLO desconocido 3 93 TORNILLO AZUL 4 94 TORNILLO ROJIZO 1 91 TUERCA AZUL 6 99 TUERCA desconocido 5 95 TUERCA AZUL 2 92 TUERCA VERDE 7 filas seleccionadas. SQL> SELECT rownum, pieza.* 2 FROM pieza; ROWNUM ref. Pieza COLOR ---------- ---- ---------------- ------------ 1 91 TUERCA AZUL 2 92 TUERCA VERDE 3 93 TORNILLO AZUL 4 94 TORNILLO ROJIZO 5 95 TUERCA AZUL 6 99 TUERCA desconocido 7 98 MARTILLO desconocido 7 filas seleccionadas. SQL> SQL> SELECT rownum, pieza.* 2 FROM pieza 3 ORDER BY nombPieza; ROWNUM ref. Pieza COLOR ---------- ---- ---------------- ------------ 7 98 MARTILLO desconocido 3 93 TORNILLO AZUL 4 94 TORNILLO ROJIZO 1 91 TUERCA AZUL 6 99 TUERCA desconocido 5 95 TUERCA AZUL 2 92 TUERCA VERDE 7 filas seleccionadas. SQL> SELECT rownum, pieza.* 2 FROM pieza 3 WHERE ROWNUM <5 4 ORDER BY nombPieza; ROWNUM ref. Pieza COLOR ---------- ---- ---------------- ------------ 3 93 TORNILLO AZUL 4 94 TORNILLO ROJIZO 1 91 TUERCA AZUL 2 92 TUERCA VERDE SQL> /* la solución es encapsular la consulta (en el FROM) para que la SQL> asignación del ROWNUM se efectúe después */ SQL> SQL> SELECT rownum, pieza.* 2 FROM (SELECT * 3 FROM pieza 4 ORDER BY nombPieza); SELECT rownum, pieza.* * ERROR en línea 1: ORA-00904: nombre de columna no válido SQL> SELECT rownum, PO.* 2 FROM (SELECT * 3 FROM pieza 4 ORDER BY nombPieza) PO; ROWNUM ref. Pieza COLOR ---------- ---- ---------------- ------------ 1 98 MARTILLO desconocido 2 93 TORNILLO AZUL 3 94 TORNILLO ROJIZO 4 91 TUERCA AZUL 5 99 TUERCA desconocido 6 95 TUERCA AZUL 7 92 TUERCA VERDE 7 filas seleccionadas. SQL> SELECT ROWNUM, PO.* 2 FROM (SELECT * 3 FROM pieza 4 ORDER BY nombPieza) PO 5 WHERE ROWNUM < 5; ROWNUM ref. Pieza COLOR ---------- ---- ---------------- ------------ 1 98 MARTILLO desconocido 2 93 TORNILLO AZUL 3 94 TORNILLO ROJIZO 4 91 TUERCA AZUL SQL> SELECT ROWNUM, totNombP.* 2 FROM (SELECT nombPieza "tipo", count(clvPieza) "total" 3 FROM Pieza 4 GROUP BY nombPieza) totNombP 5 WHERE ROWNUM < 3; ROWNUM tipo total ---------- -------------------------------- ---------- 1 MARTILLO 1 2 TORNILLO 2 SQL> SELECT nombPieza "tipo", count(clvPieza) "total" 2 FROM Pieza 3 GROUP BY nombPieza; tipo total -------------------------------- ---------- MARTILLO 1 TORNILLO 2 TUERCA 4 SQL> SELECT ROWNUM, totNombP.* 2 FROM (SELECT nombPieza "tipo", count(clvPieza) "total" 3 FROM Pieza 4 GROUP BY nombPieza 5 ORDER BY total DESC) totNombP 6 WHERE ROWNUM < 3; ORDER BY total DESC) totNombP * ERROR en línea 5: ORA-00904: nombre de columna no válido SQL> SELECT ROWNUM, totNombP.* 2 FROM (SELECT nombPieza "tipo", count(clvPieza) total 3 FROM Pieza 4 GROUP BY nombPieza 5 ORDER BY total DESC) totNombP 6 WHERE ROWNUM < 3; ROWNUM tipo TOTAL ---------- -------------------------------- ---------- 1 TUERCA 4 2 TORNILLO 2 SQL> SELECT ROWNUM, totNombP.* 2 FROM (SELECT nombPieza "tipo", count(clvPieza) "tot" total 3 FROM Pieza 4 GROUP BY nombPieza 5 ORDER BY total DESC) totNombP 6 WHERE ROWNUM < 3; FROM (SELECT nombPieza "tipo", count(clvPieza) "tot" total * ERROR en línea 2: ORA-00923: palabra clave FROM no encontrada donde se esperaba SQL> SELECT ROWNUM, totNombP.* 2 FROM (SELECT nombPieza "tipo", count(clvPieza) total "tot" 3 FROM Pieza 4 GROUP BY nombPieza 5 ORDER BY total DESC) totNombP 6 WHERE ROWNUM < 3; FROM (SELECT nombPieza "tipo", count(clvPieza) total "tot" * ERROR en línea 2: ORA-00923: palabra clave FROM no encontrada donde se esperaba SQL> SELECT ROWNUM, totNombP.* 2 FROM (SELECT nombPieza "tipo", count(clvPieza) AS total "tot" 3 FROM Pieza 4 GROUP BY nombPieza 5 ORDER BY total DESC) totNombP 6 WHERE ROWNUM < 3; FROM (SELECT nombPieza "tipo", count(clvPieza) AS total "tot" * ERROR en línea 2: ORA-00923: palabra clave FROM no encontrada donde se esperaba SQL> SELECT ROWNUM, totNombP.* 2 FROM (SELECT nombPieza "tipo", count(clvPieza) "tot" AS total 3 FROM Pieza 4 GROUP BY nombPieza 5 ORDER BY total DESC) totNombP 6 WHERE ROWNUM < 3; FROM (SELECT nombPieza "tipo", count(clvPieza) "tot" AS total * ERROR en línea 2: ORA-00923: palabra clave FROM no encontrada donde se esperaba SQL> SELECT ROWNUM, totNombP.* 2 FROM (SELECT nombPieza "tipo", count(clvPieza) AS total 3 FROM Pieza 4 GROUP BY nombPieza 5 ORDER BY total DESC) totNombP 6 WHERE ROWNUM < 3; ROWNUM tipo TOTAL ---------- -------------------------------- ---------- 1 TUERCA 4 2 TORNILLO 2 SQL> SQL> /* mostrar el ranking con los 2 nombres de piezas que las que hay más piezas SQL> SELECT ROWNUM, totNombP.* SQL> FROM (SELECT nombPieza "tipo", count(clvPieza) AS total SQL> FROM Pieza SQL> GROUP BY nombPieza SQL> ORDER BY total DESC) totNombP SQL> WHERE ROWNUM < 3; SQL> ; SQL> +/ SQL> */ SQL> SQL> /* mostrar el ranking con los 2 nombres de piezas que las que hay más piezas */ SQL> SELECT ROWNUM, totNombP.* 2 FROM (SELECT nombPieza "tipo", count(clvPieza) AS total 3 FROM Pieza 4 GROUP BY nombPieza 5 ORDER BY total DESC) totNombP 6 WHERE ROWNUM < 3; ROWNUM tipo TOTAL ---------- -------------------------------- ---------- 1 TUERCA 4 2 TORNILLO 2 SQL> CREATE SEQUENCE cont; Secuencia creada. SQL> SQL> CREATE TABLE rankingPiezas AS ( 2 SELECT cont.NEXTVAL, nombPieza, total 3 FROM (SELECT nombPieza, count(clvPieza) total 4 FROM Pieza 5 GROUP BY nombPieza 6 ORDER BY total DESC); ORDER BY total DESC) * ERROR en línea 6: ORA-00907: falta el paréntesis derecho SQL> SQL> SELECT * FROM rankingPiezas; SELECT * FROM rankingPiezas * ERROR en línea 1: ORA-00942: la tabla o vista no existe SQL> SQL> DROP TABLE rankingPiezas; DROP TABLE rankingPiezas * ERROR en línea 1: ORA-00942: la tabla o vista no existe SQL> DROP SEQUENCE cont; Secuencia borrada. SQL> CREATE TABLE rankingPiezas AS ( 2 SELECT cont.NEXTVAL, nombPieza, total 3 FROM (SELECT nombPieza, count(clvPieza) AS total 4 FROM Pieza 5 GROUP BY nombPieza 6 ORDER BY total DESC); ORDER BY total DESC) * ERROR en línea 6: ORA-00907: falta el paréntesis derecho SQL> SQL> CREATE SEQUENCE cont; Secuencia creada. SQL> SQL> CREATE TABLE rankingPiezas AS ( 2 SELECT cont.NEXTVAL, nombPieza, total 3 FROM (SELECT nombPieza, count(clvPieza) total 4 FROM Pieza 5 GROUP BY nombPieza 6 ORDER BY total DESC) 7 ); Tabla creada. SQL> SQL> SELECT * FROM rankingPiezas; NEXTVAL Pieza TOTAL ---------- ---------------- ---------- 1 TUERCA 4 2 TORNILLO 2 3 MARTILLO 1 SQL> SQL> DROP TABLE rankingPiezas; Tabla borrada. SQL> DROP SEQUENCE cont; Secuencia borrada. SQL> SQL> SQL> /* otro modo, usando secuencias */ SQL> CREATE SEQUENCE cont; Secuencia creada. SQL> SQL> CREATE TABLE rankingPiezas AS ( 2 SELECT cont.NEXTVAL orden, nombPieza, total 3 FROM (SELECT nombPieza, count(clvPieza) total 4 FROM Pieza 5 GROUP BY nombPieza 6 ORDER BY total DESC) 7 ); Tabla creada. SQL> SQL> SELECT * FROM rankingPiezas WHERE orden < 3; ORDEN Pieza TOTAL ---------- ---------------- ---------- 1 TUERCA 4 2 TORNILLO 2 SQL> SQL> DROP TABLE rankingPiezas; Tabla borrada. SQL> DROP SEQUENCE cont; Secuencia borrada. SQL> SQL> /* otro modo, usando secuencias */ SQL> CREATE SEQUENCE cont; Secuencia creada. SQL> SQL> CREATE VIEW rankingPiezas AS ( 2 SELECT cont.NEXTVAL orden, nombPieza, total 3 FROM (SELECT nombPieza, count(clvPieza) total 4 FROM Pieza 5 GROUP BY nombPieza 6 ORDER BY total DESC) 7 ); SELECT cont.NEXTVAL orden, nombPieza, total * ERROR en línea 2: ORA-02287: número de secuencia no permitido aquí SQL> SQL> SELECT * FROM rankingPiezas WHERE orden < 3; SELECT * FROM rankingPiezas WHERE orden < 3 * ERROR en línea 1: ORA-00942: la tabla o vista no existe SQL> SQL> DROP VIEW rankingPiezas; DROP VIEW rankingPiezas * ERROR en línea 1: ORA-00942: la tabla o vista no existe SQL> DROP SEQUENCE cont; Secuencia borrada. SQL> SELECT orden, totNombP.* 2 FROM (SELECT nombPieza "tipo", count(clvPieza) AS total, ROW_NUMBER() OVER (ORDER BY total DESC) AS orden 3 FROM Pieza 4 GROUP BY nombPieza) totNombP 5 WHERE ROWNUM < 3; FROM (SELECT nombPieza "tipo", count(clvPieza) AS total, ROW_NUMBER() OVER (ORDER BY total DESC) AS orden * ERROR en línea 2: ORA-00904: nombre de columna no válido SQL> SELECT orden, totNombP.* 2 FROM (SELECT nombPieza "tipo", count(clvPieza) AS total, ROW_NUMBER() OVER (ORDER BY count(clvPieza) DESC) AS orden 3 FROM Pieza 4 GROUP BY nombPieza) totNombP 5 WHERE ROWNUM < 3; ORDEN tipo TOTAL ORDEN ---------- -------------------------------- ---------- ---------- 1 TUERCA 4 1 2 TORNILLO 2 2 SQL> SELECT orden, totNombP.* 2 FROM (SELECT nombPieza "tipo", count(clvPieza) AS total, ROW_NUMBER() OVER (PARTITION BY nombPieza) AS orden 3 FROM Pieza) totNombP 4 WHERE ROWNUM < 3; FROM (SELECT nombPieza "tipo", count(clvPieza) AS total, ROW_NUMBER() OVER (PARTITION BY nombPieza) AS orden * ERROR en línea 2: ORA-30485: falta la expresión ORDER BY en la especificación de ventana SQL> SQL> SELECT orden, totNombP.* 2 FROM (SELECT nombPieza "tipo", count(clvPieza) AS total, ROW_NUMBER() OVER (PARTITION BY nombPieza ORDER BY nombPieza) AS orden 3 FROM Pieza) totNombP 4 WHERE ROWNUM < 3; FROM (SELECT nombPieza "tipo", count(clvPieza) AS total, ROW_NUMBER() OVER (PARTITION BY nombPieza ORDER BY nombPieza) AS orden * ERROR en línea 2: ORA-00937: la función de grupo no es de grupo único SQL> SQL> SELECT orden, totNombP.* 2 FROM (SELECT nombPieza "tipo", ROW_NUMBER() OVER (PARTITION BY nombPieza ORDER BY nombPieza) AS orden 3 FROM Pieza) totNombP 4 WHERE ROWNUM < 3; ORDEN tipo ORDEN ---------- -------------------------------- ---------- 1 MARTILLO 1 1 TORNILLO 1 SQL> SELECT orden, totNombP.* 2 FROM (SELECT nombPieza "tipo", ROW_NUMBER() OVER (PARTITION BY nombPieza ORDER BY color) AS orden 3 FROM Pieza) totNombP 4 WHERE ROWNUM < 3; ORDEN tipo ORDEN ---------- -------------------------------- ---------- 1 MARTILLO 1 1 TORNILLO 1 SQL> SQL> SELECT orden, totNombP.* 2 FROM (SELECT nombPieza "tipo", ROW_NUMBER() OVER (PARTITION BY nombPieza ORDER BY color) AS orden 3 FROM Pieza) totNombP 4 ; ORDEN tipo ORDEN ---------- -------------------------------- ---------- 1 MARTILLO 1 1 TORNILLO 1 2 TORNILLO 2 1 TUERCA 1 2 TUERCA 2 3 TUERCA 3 4 TUERCA 4 7 filas seleccionadas. SQL> SELECT orden, totNombP.* 2 FROM (SELECT nombPieza "tipo", ROW_NUMBER() OVER (PARTITION BY nombPieza ORDER BY color) AS orden 3 FROM Pieza) totNombP 4 WHERE orden < 3; ORDEN tipo ORDEN ---------- -------------------------------- ---------- 1 MARTILLO 1 1 TORNILLO 1 2 TORNILLO 2 1 TUERCA 1 2 TUERCA 2 SQL> SQL> select * from pieza; ref. Pieza COLOR ---- ---------------- ------------ 91 TUERCA AZUL 92 TUERCA VERDE 93 TORNILLO AZUL 94 TORNILLO ROJIZO 95 TUERCA AZUL 99 TUERCA desconocido 98 MARTILLO desconocido 7 filas seleccionadas. SQL> SELECT orden, totNombP.* 2 FROM (SELECT nombPieza "tipo", color, ROW_NUMBER() OVER (PARTITION BY nombPieza ORDER BY color) AS orden 3 FROM Pieza) totNombP 4 WHERE orden < 3; ORDEN tipo COLOR ORDEN ---------- -------------------------------- ------------ ---------- 1 MARTILLO desconocido 1 1 TORNILLO AZUL 1 2 TORNILLO ROJIZO 2 1 TUERCA AZUL 1 2 TUERCA AZUL 2 SQL> SQL> exit