23
Copyright Oracle Corporation, 1998. All rights reserved. 5 5 Interacción con el Servidor Oracle8 Interacción con el Servidor Oracle8

Interacción con el Servidor Oracle8• Extraiga una fila de datos de la base de datos utilizando el comando SELECT. Sólo puede ser devuelto un juego de valores. • Haga cambios

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Interacción con el Servidor Oracle8• Extraiga una fila de datos de la base de datos utilizando el comando SELECT. Sólo puede ser devuelto un juego de valores. • Haga cambios

Copyright Oracle Corporation, 1998. All rights reserved.

55

Interacción con el Servidor Oracle8

Interacción con el Servidor Oracle8

Page 2: Interacción con el Servidor Oracle8• Extraiga una fila de datos de la base de datos utilizando el comando SELECT. Sólo puede ser devuelto un juego de valores. • Haga cambios

5-2 Copyright Oracle Corporation, 1998. All rights reserved.

ObjetivosObjetivosAl final de esta lección usted podrá:

• Escribir correctamente una sentencia SELECT en PL/SQL

• Declarar din ámicamente el tipo de datos y tamaño de una variable PL/SQL

• Escribir sentencias DML en PL/SQL

• Controlar transacciones en PL/SQL

• Determinar las consecuencias de las sentencias SQL DML

Al final de esta lecciAl final de esta lecci óón usted podrn usted podr áá::

• Escribir correctamente una sentencia SELECT en PL/SQL

• Declarar din ámicamente el tipo de datos y tamaño de una variable PL/SQL

• Escribir sentencias DML en PL/SQL

• Controlar transacciones en PL/SQL

• Determinar las consecuencias de las sentencias SQL DML

Page 3: Interacción con el Servidor Oracle8• Extraiga una fila de datos de la base de datos utilizando el comando SELECT. Sólo puede ser devuelto un juego de valores. • Haga cambios

5-3 Copyright Oracle Corporation, 1998. All rights reserved.

Sentencias SQL en PL/SQLSentencias SQL en PL/SQL

• Extraiga una fila de datos de la base de datos utilizando el comando SELECT. S ólo puede ser devuelto un juego de valores.

• Haga cambios a las filas de la base de datos utilizando comandos DML.

• Controle una transacción con el comando COMMIT, ROLLBACK, o SAVEPOINT.

• Determine las consecuencias DML con cursores implícitos.

• Extraiga una fila de datos de la base de datos utilizando el comando SELECT. S ólo puede ser devuelto un juego de valores.

• Haga cambios a las filas de la base de datos utilizando comandos DML.

• Controle una transacción con el comando COMMIT, ROLLBACK, o SAVEPOINT.

• Determine las consecuencias DML con cursores implícitos.

Page 4: Interacción con el Servidor Oracle8• Extraiga una fila de datos de la base de datos utilizando el comando SELECT. Sólo puede ser devuelto un juego de valores. • Haga cambios

5-4 Copyright Oracle Corporation, 1998. All rights reserved.

Sentencias SELECT de PL/SQLSentencias SELECT de PL/SQLRecupere datos de la base de datos con SELECT.

Sintaxis

Recupere datos de la base de datos con Recupere datos de la base de datos con SELECT.SELECT.

SintaxisSintaxis

SELECT select_listINTO { variable_name[, variable_name]...

| record_name} FROM tableWHERE condition;

SELECT select_listINTO { variable_name[, variable_name]...

| record_name} FROM tableWHERE condition;

Page 5: Interacción con el Servidor Oracle8• Extraiga una fila de datos de la base de datos utilizando el comando SELECT. Sólo puede ser devuelto un juego de valores. • Haga cambios

5-5 Copyright Oracle Corporation, 1998. All rights reserved.

Sentencias SELECT de PL/SQLSentencias SELECT de PL/SQL

La cláusula INTO es necesaria.

Ejemplo

La clLa cl ááusula INTO es necesaria.usula INTO es necesaria.

EjemploEjemploDECLARE

v_deptno NUMBER(2);v_loc VARCHAR2(15);

BEGINSELECT deptno, loc

INTO v_deptno, v_locFROM deptWHERE dname = 'SALES';

...END;

DECLAREv_deptno NUMBER(2);v_loc VARCHAR2(15);

BEGINSELECT deptno, loc

INTO v_deptno, v_locFROM deptWHERE dname = 'SALES';

...END;

Page 6: Interacción con el Servidor Oracle8• Extraiga una fila de datos de la base de datos utilizando el comando SELECT. Sólo puede ser devuelto un juego de valores. • Haga cambios

5-6 Copyright Oracle Corporation, 1998. All rights reserved.

Recuperación de Datos en PL/SQLRecuperación de Datos en PL/SQLRecupere la fecha de pedido y la fecha de envío del siguiente pedido.

Ejemplo

Recupere la fecha de pedido y la fecha de Recupere la fecha de pedido y la fecha de envenv íío del siguiente pedido. o del siguiente pedido.

EjemploEjemplo

DECLAREv_orderdate ord.orderdate%TYPE;v_shipdate ord.shipdate%TYPE;

BEGINSELECT orderdate, shipdate

INTO v_orderdate, v_shipdateFROM ordWHERE id = 157;

...END;

DECLAREv_orderdate ord.orderdate%TYPE;v_shipdate ord.shipdate%TYPE;

BEGINSELECT orderdate, shipdate

INTO v_orderdate, v_shipdateFROM ordWHERE id = 157;

...END;

Page 7: Interacción con el Servidor Oracle8• Extraiga una fila de datos de la base de datos utilizando el comando SELECT. Sólo puede ser devuelto un juego de valores. • Haga cambios

5-7 Copyright Oracle Corporation, 1998. All rights reserved.

Recuperación de Datos en PL/SQLRecuperación de Datos en PL/SQL

Devuelva la suma de los salarios de todos los empleados de un departamento específico.

Ejemplo

Devuelva la suma de los salarios de todos Devuelva la suma de los salarios de todos los empleados de un departamento los empleados de un departamento especespec íífico.fico.

EjemploEjemploDECLARE

v_sum_sal emp.sal%TYPE; v_deptno NUMBER NOT NULL := 10;

BEGINSELECT SUM(sal) -- group function

INTO v_sum_salFROM empWHERE deptno = v_deptno;

END;

DECLARE v_sum_sal emp.sal%TYPE; v_deptno NUMBER NOT NULL := 10;

BEGINSELECT SUM(sal) -- group function

INTO v_sum_salFROM empWHERE deptno = v_deptno;

END;

Page 8: Interacción con el Servidor Oracle8• Extraiga una fila de datos de la base de datos utilizando el comando SELECT. Sólo puede ser devuelto un juego de valores. • Haga cambios

5-8 Copyright Oracle Corporation, 1998. All rights reserved.

INSERT

UPDATE

DELETE

Manipulación de Datos Utilizando PL/SQL

Manipulación de Datos Utilizando PL/SQL

• Modifique las tablas de la base de datos utilizando comandos DML:

– INSERT

– UPDATE

– DELETE

• Modifique las tablas de la base de datos utilizando comandos DML:

– INSERT

– UPDATE

– DELETE

Page 9: Interacción con el Servidor Oracle8• Extraiga una fila de datos de la base de datos utilizando el comando SELECT. Sólo puede ser devuelto un juego de valores. • Haga cambios

5-9 Copyright Oracle Corporation, 1998. All rights reserved.

Inserción de DatosInserción de Datos

Añada nueva información sobre los empleados en la tabla emp.

Ejemplo

AAññada nueva informaciada nueva informaci óón sobre los n sobre los empleados en la tabla emp. empleados en la tabla emp.

EjemploEjemplo

DECLAREv_empno emp.empno%TYPE;

BEGINSELECT empno_sequence.NEXTVAL

INTO v_empnoFROM dual;

INSERT INTO emp(empno, ename, job, deptno)VALUES(v_empno, 'HARDING', 'CLERK', 10);

END;

DECLAREv_empno emp.empno%TYPE;

BEGINSELECT empno_sequence.NEXTVAL

INTO v_empnoFROM dual;

INSERT INTO emp(empno, ename, job, deptno)VALUES(v_empno, 'HARDING', 'CLERK', 10);

END;

Page 10: Interacción con el Servidor Oracle8• Extraiga una fila de datos de la base de datos utilizando el comando SELECT. Sólo puede ser devuelto un juego de valores. • Haga cambios

5-10 Copyright Oracle Corporation, 1998. All rights reserved.

Actualización de DatosActualización de Datos

Aumente el salario de todos los empleados de la tabla emp que son Analistas.

Ejemplo

Aumente el salario de todos los empleados Aumente el salario de todos los empleados de la tabla emp que son Analistas.de la tabla emp que son Analistas.

EjemploEjemplo

DECLAREv_sal_increase emp.sal%TYPE := 2000;

BEGINUPDATE emp

SET sal = sal + v_sal_increaseWHERE job = 'ANALYST';

END;

Page 11: Interacción con el Servidor Oracle8• Extraiga una fila de datos de la base de datos utilizando el comando SELECT. Sólo puede ser devuelto un juego de valores. • Haga cambios

5-11 Copyright Oracle Corporation, 1998. All rights reserved.

Supresión de DatosSupresión de Datos

Suprima las filas pertenecientes al departamento 10 de la tabla emp.

Ejemplo

Suprima las filas pertenecientes al Suprima las filas pertenecientes al departamento 10 de la tabla emp. departamento 10 de la tabla emp.

EjemploEjemplo

DECLAREv_emp deptno.emp%TYPE := 10;

BEGINDELETE FROM emp

WHERE deptno = v_deptno;END;

DECLAREv_emp deptno.emp%TYPE := 10;

BEGINDELETE FROM emp

WHERE deptno = v_deptno;END;

Page 12: Interacción con el Servidor Oracle8• Extraiga una fila de datos de la base de datos utilizando el comando SELECT. Sólo puede ser devuelto un juego de valores. • Haga cambios

5-12 Copyright Oracle Corporation, 1998. All rights reserved.

Convenciones de NomenclaturaConvenciones de Nomenclatura

• Utilice una convención de nomenclatura para evitar la ambig üedad en la cláusula WHERE.

• Los identificadores y columnas de la base de datos deberían tener nombres distintos.

• Los errores de sintaxis pueden surgir porque PL/SQL comprueba en primer lugar la base de datos en busca de una columna de la tabla.

• Utilice una convención de nomenclatura para evitar la ambig üedad en la cláusula WHERE.

• Los identificadores y columnas de la base de datos deberían tener nombres distintos.

• Los errores de sintaxis pueden surgir porque PL/SQL comprueba en primer lugar la base de datos en busca de una columna de la tabla.

Page 13: Interacción con el Servidor Oracle8• Extraiga una fila de datos de la base de datos utilizando el comando SELECT. Sólo puede ser devuelto un juego de valores. • Haga cambios

5-13 Copyright Oracle Corporation, 1998. All rights reserved.

Convenciones de NomenclaturaConvenciones de NomenclaturaDECLARED

orderdate ord.orderdate%TYPE;shipdate ord.shipdate%TYPE;v_date DATE := SYSDATE;

BEGINSELECT orderdate, shipdateINTO orderdate, shipdateFROM ordWHERE shipdate = v_date;

END;SQL> /DECLARE*ERROR at line 1:ORA-01403: no data foundORA-06512: at line 6

DECLAREDorderdate ord.orderdate%TYPE;shipdate ord.shipdate%TYPE;v_date DATE := SYSDATE;

BEGINSELECT orderdate, shipdateINTO orderdate, shipdateFROM ordWHERE shipdate = v_date;

END;SQL> /DECLARE*ERROR at line 1:ORA-01403: no data foundORA-06512: at line 6

Page 14: Interacción con el Servidor Oracle8• Extraiga una fila de datos de la base de datos utilizando el comando SELECT. Sólo puede ser devuelto un juego de valores. • Haga cambios

5-14 Copyright Oracle Corporation, 1998. All rights reserved.

Comandos COMMIT y ROLLBACK

Comandos COMMIT y ROLLBACK

• Inicie una transacción con el primer comando DML, siguiendo con un COMMIT o ROLLBACK.

• Utilice sentencias SQL COMMIT y ROLLBACK para terminar explícitamente una transacción.

• Inicie una transacción con el primer comando DML, siguiendo con un COMMIT o ROLLBACK.

• Utilice sentencias SQL COMMIT y ROLLBACK para terminar explícitamente una transacción.

Page 15: Interacción con el Servidor Oracle8• Extraiga una fila de datos de la base de datos utilizando el comando SELECT. Sólo puede ser devuelto un juego de valores. • Haga cambios

5-15 Copyright Oracle Corporation, 1998. All rights reserved.

Comando ROLLBACKComando ROLLBACK

DELETEDELETE

TransacciónTransacciTransacci óónn

Savepoint ASavepoint A

ROLLBACK to Savepoint BROLLBACK to Savepoint B

DELETEDELETE

Savepoint BSavepoint BCOMMITCOMMIT

INSERTINSERTUPDATEUPDATE

ROLLBACK to Savepoint AROLLBACK to Savepoint A

INSERTINSERTUPDATEUPDATEINSERTINSERT

ROLLBACKROLLBACK

INSERTINSERT

Page 16: Interacción con el Servidor Oracle8• Extraiga una fila de datos de la base de datos utilizando el comando SELECT. Sólo puede ser devuelto un juego de valores. • Haga cambios

5-16 Copyright Oracle Corporation, 1998. All rights reserved.

Control de TransaccionesControl de TransaccionesDetermine el procesamiento de transacciones para el siguiente bloque PL/SQL.

Determine el procesamiento de Determine el procesamiento de transacciones para el siguiente bloque transacciones para el siguiente bloque PL/SQL.PL/SQL.

BEGININSERT INTO temp(num_col1, num_col2, char_col)

VALUES (1, 1, 'ROW 1');SAVEPOINT a;INSERT INTO temp(num_col1, num_col2, char_col)

VALUES (2, 1, 'ROW 2');SAVEPOINT b;INSERT INTO temp(num_col1, num_col2, char_col)

VALUES (3, 3, 'ROW 3');SAVEPOINT c;ROLLBACK TO SAVEPOINT b;COMMIT;

END;

Page 17: Interacción con el Servidor Oracle8• Extraiga una fila de datos de la base de datos utilizando el comando SELECT. Sólo puede ser devuelto un juego de valores. • Haga cambios

5-17 Copyright Oracle Corporation, 1998. All rights reserved.

Cursor SQLCursor SQL

• Un cursor es un área de trabajo privada de SQL.

• Existen dos tipos de cursores:

– Cursores implícitos

– Cursores explícitos

• El Servidor Oracle8 utiliza cursores implícitos para analizar y ejecutar las sentencias SQL.

• Los cursores explícitos son declarados explícitamente por el programador.

• Un cursor es un área de trabajo privada de SQL.

• Existen dos tipos de cursores:

– Cursores implícitos

– Cursores explícitos

• El Servidor Oracle8 utiliza cursores implícitos para analizar y ejecutar las sentencias SQL.

• Los cursores explícitos son declarados explícitamente por el programador.

Page 18: Interacción con el Servidor Oracle8• Extraiga una fila de datos de la base de datos utilizando el comando SELECT. Sólo puede ser devuelto un juego de valores. • Haga cambios

5-18 Copyright Oracle Corporation, 1998. All rights reserved.

Atributos del Cursor SQLAtributos del Cursor SQLAl utilizar atributos de cursor SQL puede comprobar las consecuencias de las sentencias SQL.

Al utilizar atributos de cursor SQL puede Al utilizar atributos de cursor SQL puede comprobar las consecuencias de las comprobar las consecuencias de las sentencias SQL. sentencias SQL. SQL%ROWCOUNT Número de filas afectadas por la

sentencia SQL m ás reciente (un valor entero).

SQL%FOUND Atributo booleano que da como resultado TRUE si la sentencia SQL más reciente afecta una o m ás filas.

SQL%NOTFOUND Atributo booleano que resulta en TRUE si la sentencia SQL m ás reciente no afecta a ninguna fila.

SQL%ISOPEN Siempre resulta FALSE porque PL/SQL cierra los cursores implícitos inmediatamente una vez ejecutados.

Page 19: Interacción con el Servidor Oracle8• Extraiga una fila de datos de la base de datos utilizando el comando SELECT. Sólo puede ser devuelto un juego de valores. • Haga cambios

5-19 Copyright Oracle Corporation, 1998. All rights reserved.

Atributos del Cursor SQLAtributos del Cursor SQLSuprima de la tabla ITEM las filas que tienen el n úmero de pedido especificado. Imprima el n úmero de filas suprimidas.

Ejemplo

Suprima de la tabla ITEM las filas que Suprima de la tabla ITEM las filas que tienen el ntienen el n úúmero de pedido especificado. mero de pedido especificado. Imprima el nImprima el n úúmero de filas suprimidas.mero de filas suprimidas.

EjemploEjemplo

DECLAREv_ordid NUMBER := 605;

BEGINDELETE FROM itemWHERE ordid = v_ordid;

DBMS_OUTPUT.PUT_LINE(SQL%ROWCOUNT) ||' rows deleted.');

END;

Page 20: Interacción con el Servidor Oracle8• Extraiga una fila de datos de la base de datos utilizando el comando SELECT. Sólo puede ser devuelto un juego de valores. • Haga cambios

5-20 Copyright Oracle Corporation, 1998. All rights reserved.

ResumenResumen

Embeba SQL en el bloque PL/SQL:

• SELECT recupera exactamente una fila.

• INSERT añade una fila.

• UPDATE modifica una o m ás filas existentes.

• DELETE suprime una o m ás filas existentes.

Embeba SQL en el bloque PL/SQL:Embeba SQL en el bloque PL/SQL:

• SELECT recupera exactamente una fila.

• INSERT añade una fila.

• UPDATE modifica una o m ás filas existentes.

• DELETE suprime una o m ás filas existentes.

Page 21: Interacción con el Servidor Oracle8• Extraiga una fila de datos de la base de datos utilizando el comando SELECT. Sólo puede ser devuelto un juego de valores. • Haga cambios

5-21 Copyright Oracle Corporation, 1998. All rights reserved.

ResumenResumen

Embeba sentencias de control de transacciones en un bloque PL/SQL:

• COMMIT hace permanentes todas las modificaciones pendientes.

• ROLLBACK elimina todas las modificaciones pendientes.

• SAVEPOINT marca un punto intermedio en el procesamiento de las transacciones.

Embeba sentencias de control de Embeba sentencias de control de transacciones en un bloque PL/SQL:transacciones en un bloque PL/SQL:

• COMMIT hace permanentes todas las modificaciones pendientes.

• ROLLBACK elimina todas las modificaciones pendientes.

• SAVEPOINT marca un punto intermedio en el procesamiento de las transacciones.

Page 22: Interacción con el Servidor Oracle8• Extraiga una fila de datos de la base de datos utilizando el comando SELECT. Sólo puede ser devuelto un juego de valores. • Haga cambios

5-22 Copyright Oracle Corporation, 1998. All rights reserved.

ResumenResumen• Existen dos tipos de cursores; implícitos y

explícitos.

• Los atributos de los cursores implícitos verifican los resultados de las sentencias DML:

– SQL%ROWCOUNT

– SQL%FOUND

– SQL%NOTFOUND

– SQL%ISOPEN

• Los cursores explícitos son definidos por el usuario.

• Existen dos tipos de cursores; implícitos y explícitos.

• Los atributos de los cursores implícitos verifican los resultados de las sentencias DML:

– SQL%ROWCOUNT

– SQL%FOUND

– SQL%NOTFOUND

– SQL%ISOPEN

• Los cursores explícitos son definidos por el usuario.

Page 23: Interacción con el Servidor Oracle8• Extraiga una fila de datos de la base de datos utilizando el comando SELECT. Sólo puede ser devuelto un juego de valores. • Haga cambios

5-23 Copyright Oracle Corporation, 1998. All rights reserved.

Visión General de la PrácticaVisión General de la Práctica

• Creación de un bloque PL/SQL para seleccionar datos de una tabla

• Creación de un bloque PL/SQL para insertar datos en una tabla

• Creación de un bloque PL/SQL para suprimir un registro de una tabla

• Creación de un bloque PL/SQL para seleccionar datos de una tabla

• Creación de un bloque PL/SQL para insertar datos en una tabla

• Creación de un bloque PL/SQL para suprimir un registro de una tabla