plsql Tutorial
Empezando con plsql
Buscar..
Observaciones
Esta sección proporciona una descripción general de qué es plsql y por qué un desarrollador puede querer usarlo.
También debe mencionar cualquier tema grande dentro de plsql, y vincular a los temas relacionados. Dado que la Documentación para plsql es nueva, es posible que deba crear versiones iniciales de esos temas relacionados.
Definición de PLSQL
PL / SQL (Lenguaje de procedimiento / lenguaje de consulta estructurado) es la extensión de procedimiento de Oracle Corporation para SQL y la base de datos relacional de Oracle. PL / SQL está disponible en Oracle Database (desde la versión 7), en la base de datos en memoria de TimesTen (desde la versión 11.2.1) e IBM DB2 (desde la versión 9.7).
La unidad básica en PL / SQL se llama bloque, que se compone de tres partes: una parte declarativa, una parte ejecutable y una parte de creación de excepciones.
DECLARE
<declarations section>
BEGIN
<executable command(s)>
EXCEPTION
<exception handling>
END;
Declaraciones - Esta sección comienza con la palabra clave DECLARAR. Es una sección opcional y define todas las variables, cursores, subprogramas y otros elementos que se utilizarán en el programa.
Comandos ejecutables : esta sección se encuentra entre las palabras clave BEGIN y END y es una sección obligatoria. Consiste en las sentencias PL / SQL ejecutables del programa. Debe tener al menos una línea de código ejecutable, que puede ser solo un comando NULO para indicar que no se debe ejecutar nada.
Manejo de excepciones : esta sección comienza con la palabra clave EXCEPTION. Esta sección es nuevamente opcional y contiene excepciones que manejan errores en el programa.
Cada sentencia PL / SQL termina con un punto y coma (;). Los bloques PL / SQL se pueden anidar dentro de otros bloques PL / SQL usando BEGIN y END.
En el bloque anónimo, solo se requiere la parte ejecutable del bloque, otras partes no son necesarias. A continuación se muestra un ejemplo de código anónimo simple, que no hace nada pero funciona sin informe de errores.
BEGIN
NULL;
END;
/
La falta de una instrucción ejecutable genera un error, ya que PL / SQL no admite bloques vacíos. Por ejemplo, la ejecución del código a continuación conduce a un error:
BEGIN
END;
/
La aplicación generará un error:
END;
*
ERROR at line 2:
ORA-06550: line 2, column 1:
PLS-00103: Encountered the symbol "END" when expecting one of the following:
( begin case declare exit for goto if loop mod null pragma
raise return select update while with <an identifier>
<a double-quoted delimited-identifier> <a bind variable> <<
continue close current delete fetch lock insert open rollback
savepoint set sql execute commit forall merge pipe purge
Símbolo "*" en la línea debajo de la palabra clave "FIN"; significa, que el bloque que termina con este bloque está vacío o mal construido. Cada bloque de ejecución necesita instrucciones para hacerlo, incluso si no hace nada, como en nuestro ejemplo.
Hola Mundo
set serveroutput on
DECLARE
message constant varchar2(32767):= 'Hello, World!';
BEGIN
dbms_output.put_line(message);
END;
/
El set serveroutput on
comandos set serveroutput on
es necesario en los clientes SQL * Plus y SQL Developer para habilitar la salida de dbms_output
. Sin el comando no se muestra nada.
El end;
La línea señala el final del bloque PL / SQL anónimo. Para ejecutar el código desde la línea de comandos SQL, es posible que tenga que escribir /
al principio de la primera línea en blanco después de la última línea del código. Cuando el código anterior se ejecuta en el indicador SQL, produce el siguiente resultado:
Hello, World!
PL/SQL procedure successfully completed.
Acerca de PLSQL
PL / SQL significa extensiones de lenguaje de procedimiento a SQL. PL / SQL está disponible solo como una "tecnología habilitadora" dentro de otros productos de software; no existe como un lenguaje independiente. Puede usar PL / SQL en la base de datos relacional de Oracle, en el servidor de Oracle y en las herramientas de desarrollo de aplicaciones del lado del cliente, como Oracle Forms. Estas son algunas de las formas en que podría usar PL / SQL:
- Para construir procedimientos almacenados. .
- Para crear disparadores de base de datos.
- Para implementar la lógica del lado del cliente en su aplicación de Oracle Forms.
- Para vincular una página de inicio de World Wide Web a una base de datos de Oracle.
Diferencia entre% TYPE y% ROWTYPE.
%TYPE
: se utiliza para declarar un campo con el mismo tipo que el de una columna de tabla específica.
DECLARE
vEmployeeName Employee.Name%TYPE;
BEGIN
SELECT Name
INTO vEmployeeName
FROM Employee
WHERE RowNum = 1;
DBMS_OUTPUT.PUT_LINE(vEmployeeName);
END;
/
% ROWTYPE: se utiliza para declarar un registro con los mismos tipos que se encuentran en la tabla, vista o cursor especificados (= columnas múltiples).
DECLARE
rEmployee Employee%ROWTYPE;
BEGIN
rEmployee.Name := 'Matt';
rEmployee.Age := 31;
DBMS_OUTPUT.PUT_LINE(rEmployee.Name);
DBMS_OUTPUT.PUT_LINE(rEmployee.Age);
END;
/
Crear o reemplazar una vista
En este ejemplo vamos a crear una vista.
Una vista se utiliza principalmente como una forma sencilla de obtener datos de varias tablas.
Ejemplo 1:
Ver con una selección en una tabla.
CREATE OR REPLACE VIEW LessonView AS
SELECT L.*
FROM Lesson L;
Ejemplo 2:
Ver con una selección en varias tablas.
CREATE OR REPLACE VIEW ClassRoomLessonView AS
SELECT C.Id,
C.Name,
L.Subject,
L.Teacher
FROM ClassRoom C,
Lesson L
WHERE C.Id = L.ClassRoomId;
Para llamar a estas vistas en una consulta, puede utilizar una declaración de selección.
SELECT * FROM LessonView;
SELECT * FROM ClassRoomLessonView;
Crear una tabla
A continuación vamos a crear una tabla con 3 columnas.
El Id
columna que se debe completar es, por lo que lo definimos NOT NULL
.
En la columna Contract
, también agregamos un cheque para que el único valor permitido sea 'Y' o 'N'. Si una inserción está en hecho y esta columna no se especifica durante la inserción, entonces se inserta una 'N' por defecto.
CREATE TABLE Employee (
Id NUMBER NOT NULL,
Name VARCHAR2(60),
Contract CHAR DEFAULT 'N' NOT NULL,
---
CONSTRAINT p_Id PRIMARY KEY(Id),
CONSTRAINT c_Contract CHECK (Contract IN('Y','N'))
);