PL SQL Programming
PL SQL Programming
PL SQL Programming
Los desarrolladores de Oracle que quieren tener xito en el siglo 21 deben aprender a
utilizar PL / SQL para el mximo provecho. Este es un proceso de dos etapas. En
primer lugar, usted debe conocer y aprender a utilizar el lenguaje en constante
expansin conjunto de caractersticas; y en segundo lugar, despus de ganar la
competencia en las caractersticas individuales, debe aprender a poner estas
construcciones en conjunto para construir aplicaciones complejas.
Por estas razones y ms, los desarrolladores de Oracle necesitan un slido recurso
integral para la base lenguaje PL / SQL. Es necesario conocer los elementos bsicos de
PL / SQL de construccin, pero tambin hay que aprender con el ejemplo, para que
pueda evitar algunos de la prueba y error. Como con cualquier lenguaje de
programacin, PL / SQL tiene una manera correcta y muchos caminos equivocados (o
por lo menos no como formas "correctas") para manejar casi cualquier tarea. Es mi
esperanza que este libro le ayudar a aprender cmo utilizar el lenguaje PL / SQL de la
manera ms eficaz y eficiente posible.
El lenguaje SQL
Supongo que usted ya tiene un conocimiento prctico del lenguaje SQL, y que sabes
cmo escribir SELECTs, UPDATEs, INSERTs, MERGEs y DELETEs.
Qu plataforma o versin?
En general, todos los debates y ejemplos de este libro se aplican con independencia
del sistema de la mquina y / o operativo que est utilizando. En aquellos casos en los
que una caracterstica est en ningn ejemplo de la versin dependiente de por
medio, si se puede usar slo en Oracle Database 11g (o en una nota especfica, como
Oracle Database 11g Release 2) -I nota de que en el texto.
Hay muchas versiones de PL / SQL, y usted puede encontrar que usted necesita para
utilizar varias versiones en su trabajo de desarrollo. El Captulo 1 describe las distintas
versiones de PL / SQL y lo que usted debe saber acerca de ellos; consulte la seccin
"Acerca de PL/ SQL Versiones " en la pgina 10.
PARTE I
Programacin en PL / SQL
Esta primera parte de este libro introduce PL/SQL, se explica cmo crear y ejecutar
cdigo PL / SQL, y presenta los fundamentos del lenguaje. Captulo 1 hace las
preguntas fundamentales: De dnde PL / SQL viene? Para qu es bueno? Cules
son las principales caractersticas del lenguaje PL / SQL? Captulo 2 est diseado para
que usted ponga en funcionamiento programas PL / SQL lo ms rpidamente posible;
contiene instrucciones claras y sencillas para la ejecucin de cdigo PL / SQL en SQL
algunos otros ambientes comunes * Plus y. Captulo 3 responde a preguntas bsicas
sobre la estructura del lenguaje y las palabras clave: Qu hace una declaracin PL /
SQL? Cul es la estructura de bloque PL / SQL trata? Cmo puedo escribir los
comentarios en PL / SQL?
Introduccin a PL / SQL
PL / SQL es sinnimo de "extensiones del lenguaje de procedimiento a la Structured
Query Language". SQL es el lenguaje ahora omnipresente tanto para consulta y
actualizacin, no importa el nombre de bases de datos relacionales. Oracle
Corporation present PL / SQL para superar algunas limitaciones en SQL y para
proporcionar una solucin de programacin ms completa para aquellos que buscaban
construir aplicaciones de misin crtica para ejecutar la base de datos Oracle. Este
captulo presenta PL / SQL, sus orgenes y sus diferentes versiones. Ofrece un resumen
rpido de PL / SQL en las ltimas versiones de Oracle, Oracle Database 11g Release 1
y Release 2. Por ltimo, se ofrece una gua de recursos adicionales para los
desarrolladores de PL / SQL y algunas palabras de consejo.
Qu es PL / SQL?
Oracle PL / SQL idioma tiene varias caractersticas que lo definen:
Es un lenguaje embebido
PL / SQL no fue diseado para ser utilizado como un lenguaje independiente, pero en
lugar de ser invocado desde dentro de un entorno de acogida. As, por ejemplo, puede
ejecutar programas PL / SQL desde dentro de la base de datos (a travs, por ejemplo,
la interfaz de SQL * Plus).
Las sentencias IF y CASE los cuales implementan lgica condicional; por ejemplo, "Si
el nmero de pginas de un libro es mayor que 1000, entonces ...."
La sentencia GOTO
S, PL / SQL incluso ofrece un GOTO que le permite ramifican incondicional de una
parte de su programa a otro. Eso no significa, sin embargo, que en realidad se debe
utilizar.
Aqu un procedimiento (un bloque de cdigo reutilizable que se puede llamar por su
nombre) que demuestra algunas de estas caractersticas:
1. PROCEDURE pay_out_balance (
2. account_id_in IN accounts.id%TYPE)
3. IS
4. l_balance_remaining NUMBER;
5. BEGIN
6. LOOP
7. l_balance_remaining := account_balance (account_id_in);
8.
9. IF l_balance_remaining < 1000
10. THEN
11. EXIT;
12. ELSE
13. apply_balance (account_id_in, l_balance_remaining);
14. END IF;
15. END LOOP;
16. END pay_out_balance;
1. PROCEDURE check_account (
2. account_id_in IN accounts.id%TYPE)
3.
4. l_balance_remaining NUMBER;
5. l_balance_below_minimum EXCEPTION;
6. l_account_name accounts.name%TYPE;
7. BEGIN
8. SELECT name
9. INTO l_account_name
10. FROM accounts
11. WHERE id = account_id_in;
12.
13. l_balance_remaining := account_balance (account_id_in);
14.
15. DBMS_OUTPUT.PUT_LINE (
16. 'Balance for ' || l_account_name ||
17. ' = ' || l_balance_remaining);
18.
19. IF l_balance_remaining < 1000
20. THEN
21. RAISE l_balance_below_minimum;
22. END IF;
23.
24. EXCEPTION
25. WHEN NO_DATA_FOUND
26. THEN
27. -- No account found for this ID
28. log_error (...);
29.
30. WHEN l_balance_below_minimum
31. THEN
32. log_error (...);
33. RAISE;
34. END;
Hay, por supuesto, mucho ms que se puede decir acerca de PL / SQL, razn por la
cual usted tiene cientos ms pginas de material para estudiar en este libro! Estos
ejemplos iniciales deben, sin embargo, le dar una idea de la clase de cdigo que va a
escribir con PL / SQL, algunos de sus ms importantes elementos sintcticos, y la
facilidad con que se puede escribir y leer-PL / SQL de cdigo.
Declaracin CONTINUE
Oracle Database 11g ofrece una nueva caracterstica para los bucles: Declaracin
CONTINUE. Utilice esta declaracin para salir de la iteracin actual de un bucle e
inmediatamente continuar a la siguiente iteracin de ese bucle. Esta declaracin se
presenta en dos formas para salir, utilizando nicamente CONTINUE y utilizando la
condicional CONTINUE WHEN.
DECLARE
SALUDO VARCHAR2(500);
CONTADOR NUMBER;
BEGIN
CONTADOR := 0;
LOOP
CONTADOR := CONTADOR + 1;
CONTINUE WHEN CONTADOR = 4;
DBMS_OUTPUT.PUT_LINE(SALUDO);
IF CONTADOR = 6
THEN
EXIT;
END IF;
END LOOP;
END;
Software est escrito por los seres humanos; es importante, por lo tanto, reconocer
que la psicologa humana desempea un papel clave en el desarrollo de software. Lo
siguiente es un ejemplo.
Pensamientos como "Por qu no veo eso?" Y "Si yo slo haba pasado otros cinco
minutos haciendo mi propia depuracin me he encontrado" correr aunque la mente de
Joe. Esto es comprensible, pero tambin muy gruesa con cabeza. La conclusin es que
muchas veces no somos capaces de identificar nuestros propios problemas porque
estamos demasiado cerca de nuestro propio cdigo. A veces, todo lo que necesitamos
es una nueva perspectiva, la visin relativamente objetiva de alguien con nada en
juego. No tiene nada que ver con la antigedad, experiencia o competencia.
Pedir ayuda
Si no puede averiguar el origen de un fallo en 30 minutos, inmediatamente pedir
ayuda. Usted podra incluso crear un "sistema de amigos", por lo que todo el mundo
se le asigna una persona de quien se espera que se le pregunte para obtener ayuda.
No permita que usted (u otros en su grupo) ir durante horas golpeando su cabeza
contra la pared en una infructuosa bsqueda de respuestas.
Pero la realidad es que su programa puede casi siempre correr un poco ms rpido. Y
la pantalla se puede, de hecho, funcionar de la manera que el usuario quiere que lo
haga. Y aunque cada producto tiene sus limitaciones, fortalezas y debilidades, nunca
debera tener que esperar a la prxima versin. No es mucho ms satisfactorio que
ser capaz de decirle a su terapeuta que abord el problema de frente, acept sin
excusas, y hecho a mano una solucin?
Cmo haces esto? Salir de los confines de sus puntos de vista endurecidos y tomar
una nueva mirada a el mundo (o tal vez slo su cubculo). Vuelva a evaluar los hbitos
de programacin que ha desarrollado. Sea creativo-paso de los mtodos tradicionales,
desde los enfoques a menudo limitados y mecnicas constantemente reforzados en
nuestros lugares de trabajo.
Intente algo nuevo: experimentar con lo que puede parecer ser un cambio radical de
la norma. Usted se sorprender de cunto va a aprender y crecer como programador y
solucionador de problemas. Con los aos, me he sorprendido a m mismo una y otra
vez con lo que es realmente alcanzable cuando dej de decir "No puedes hacer eso!" Y
en lugar de simplemente asent y murmur en voz baja, "Sabe, si lo hago de esta
manera.... "
CAPITULO 2
Creacin y Ejecucin de PL / SQL Code
Todos los programadores PL / SQL deben estar familiarizados con algunas tareas
operativas bsicas:
Navegacin a la base de datos.
Crear y editar cdigo PL / SQL fuente.
Compile el cdigo PL / SQL fuente, corregir los errores de cdigo (y,
opcionalmente, advertencias) anotaron por el compilador.
Ejecute el programa compilado de algn medio ambiente.
Examinar los resultados de la ejecucin del programa (salida de pantalla, los
cambios en las tablas, etc.). en las tablas, etc.).
Hay dos enfoques distintos que puede tomar para la navegacin de base de datos:
Captulo 20 tambin ofrece ejemplos del uso de varias vistas del diccionario de datos
para trabajar con su base de cdigo PL / SQL.
SQL * Plus
Oracle SQL * Plus proporciona un intrprete de lnea de comandos de SQL y PL / SQL.
Es decir, se acepta declaraciones por parte del usuario, los enva al servidor de Oracle,
y muestra los resultados. A menudo vilipendiado por su interfaz de usuario, SQL * Plus
es una de mis herramientas favoritas de Oracle. De hecho, me gusta la falta de
artilugios de fantasa y mens. Irnicamente, cuando empec a usar Oracle (alrededor
de 1986), el predecesor de este producto fue nombrado audazmente UFI fcil de usar
interfaz. Dos dcadas ms tarde, incluso la ltima versin de SQL * Plus sigue siendo
poco probable que gane algn premio de facilidad de uso, pero al menos no se
bloquea con mucha frecuencia. Oracle, a lo largo de los aos, ofrecido diferentes
versiones de SQL * Plus.
SERVEROUTPUT
Generalmente pongo el comando SERVEROUTPUT en mi archivo de inicio (ver "Carga su
propio entorno personalizado automticamente en el arranque" en la pgina 35),
haciendo que se habilitar hasta que ocurra una de las siguientes:
Desconecte, cierre la sesin, o de otra manera terminar su sesin.
Se establece explcitamente SERVEROUTPUT OFF.
La base de datos Oracle descarta estado de la sesin, ya sea a peticin o
debido a un error de compilacin (ver "Unidades Programa invlida Compilar"
en la pgina 731).
En las versiones de Oracle a travs de la base de datos Oracle9i Release 2, se
emite una nueva sentencia CONNECT; en versiones posteriores, SQL * Plus
automticamente vuelve a ejecutar el archivo de inicio despus de cada
CONNECT.
Ejemplo:
SQL> SET SERVEROUTPUT ON
SQL> BEGIN
2 DBMS_OUTPUT.PUT_LINE('Hey look, Ma!');
3 END;
4/
Hey look, Ma!
PL/SQL procedure successfully completed.
SQL>
Como una caracterstica de conveniencia, SQL * Plus ofrece a los usuario de PL / SQL
un comando EXECUTE, lo que ahorra escribir el BEGIN, END, y barra final. As que lo
siguiente es equivalente al programa corto corr antes:
Un punto y coma final es opcional, pero prefiero omitirlo. Como con la mayora de los
comandos SQL * Plus, ejecute pueden abreviada y es entre maysculas y minsculas,
por lo que ms uso interactivo se reduce a:
SQL> @abc.pkg
If you prefer words to at-signs, you can use the equivalent START command:
For example:
SQL> @abc.pkg
Package created.
Package body created.
SQL>
The default behavior is to display only the output from the individual statements on the screen;
if you want to see the original source from the file, use the SQL*Plus command SET ECHO ON.
In my example, Ive used a filename extension of pkg. If I leave off the extension, this is what
happens:
SQL> @abc
SP2-0310: unable to open file "abc.sql"
To address this problem, Oracle created the @@ command. This double at-sign means during
this call, pretend I have changed the current directory to be that of the currently executing
file. So, the preferred way of writing the calls in the abc.pkg script is:
Now I get:
C:\BOB\FILES> sqlplus
...
SQL> @/files/src/release/1.0/abc.pkg
Package created.
Package body created.
SQL * Plus tambin puede crear y manipular sus propias variables en memoria, y se
deja de lado algunas variables especiales que afectarn su comportamiento. En
realidad, hay dos tipos diferentes de variables en SQLPlus: define y variables se unen.
Para asignar un valor a una variable DEFINE, puede utilizar el comando DEFINE:
SQL> DEFINE x
DEFINE X = "the answer is 42" (CHAR)