Docsity
Docsity

Prepara tus exámenes
Prepara tus exámenes

Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity


Consigue puntos base para descargar
Consigue puntos base para descargar

Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium


Orientación Universidad
Orientación Universidad

PLSQL - INFORMACION BASE DE DATOS CON PL-SQL, Apuntes de Principios de la Gestión de Bases de Datos

PLSQL DATOS INFORMACION DE ESTUDIO DE BASE DE DATOS ( PLSQL)

Tipo: Apuntes

2017/2018

Subido el 15/10/2021

wilson-calderon-2
wilson-calderon-2 🇵🇪

1

(1)

2 documentos

1 / 48

Toggle sidebar

Esta página no es visible en la vista previa

¡No te pierdas las partes importantes!

bg1
plsql
#plsql
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c
pf2d
pf2e
pf2f
pf30

Vista previa parcial del texto

¡Descarga PLSQL - INFORMACION BASE DE DATOS CON PL-SQL y más Apuntes en PDF de Principios de la Gestión de Bases de Datos solo en Docsity!

plsql

#plsql

Tabla de contenido

  • Acerca de
  • Capítulo 1: Empezando con plsql
    • Observaciones
    • Examples
      • Definición de PLSQL
      • Hola Mundo
      • Acerca de PLSQL
      • Diferencia entre% TYPE y% ROWTYPE.
      • Crear o reemplazar una vista
      • Crear una tabla
  • Capítulo 2: Asignaciones modelo y lenguaje.
    • Examples
      • Modelo de asignaciones en PL / SQL.
  • Capítulo 3: Colecciones y registros
    • Examples
      • Utilice una colección como un tipo de retorno para una función de división
  • Capítulo 4: Cursores
    • Sintaxis
    • Observaciones
    • Examples
      • Cursor parametrizado "FOR loop"
      • Cursor de bucle "FOR" implícito
      • Trabajando con SYS_REFCURSOR
  • función devolviendo un cursor
  • Y cómo usarlo:
    • Manejando un CURSOR
  • Capítulo 5: Declaración IF-THEN-ELSE
    • Sintaxis
    • Examples
      • IF-THEN
      • IF-THEN-ELSE
      • IF-THEN-ELSIF-ELSE
  • Capítulo 6: Funciones
    • Sintaxis
    • Examples
      • Generar GUID
      • Funciones de llamada
  • Capítulo 7: Gatillos
    • Introducción
    • Sintaxis
    • Examples
      • Antes de activar INSERT o ACTUALIZAR
  • Capítulo 8: Lazo
    • Sintaxis
    • Examples
      • Bucle simple
      • Mientras que bucle
      • En bucle
  • Capítulo 9: Manejo de excepciones
    • Introducción
    • Examples
      • Manejo de excepciones
      • Sintaxis
      • Excepciones definidas internamente
      • Excepciones predefinidas
      • Excepciones definidas por el usuario
      • Defina una excepción personalizada, levántela y vea de dónde viene.
      • Manejo de excepciones de error de conexión
  • Capítulo 10: Manejo de excepciones
    • Introducción
    • Examples
      • Manejo de excepciones de error de conexión
      • Defina una excepción personalizada, levántela y vea de dónde viene.
  • Capítulo 11: Paquetes
    • Sintaxis
    • Examples
      • Uso del paquete
      • Sobrecarga
    • Restricciones en la sobrecarga
      • Definir un encabezado de paquete y un cuerpo con una función.
  • Capítulo 12: Procedimiento PLSQL
    • Introducción
    • Examples
      • Sintaxis
      • Hola Mundo
      • Parámetros de entrada / salida
  • Capítulo 13: Recoger a granel
    • Examples
      • Procesamiento de datos a granel
  • Capítulo 14: Tipos de objeto
    • Observaciones
    • Examples
      • BASE_TYPE
      • MID_TYPE
      • LEAF_TYPE
      • Accediendo a objetos almacenados
  • Creditos

Acerca de

You can share this PDF with anyone you feel could benefit from it, downloaded the latest version

from: plsql

It is an unofficial and free plsql ebook created for educational purposes. All the content is extracted

from Stack Overflow Documentation, which is written by many hardworking individuals at Stack

Overflow. It is neither affiliated with Stack Overflow nor official plsql.

The content is released under Creative Commons BY-SA, and the list of contributors to each

chapter are provided in the credits section at the end of this book. Images may be copyright of

their respective owners unless otherwise specified. All trademarks and registered trademarks are

the property of their respective company owners.

Use the content presented in this book at your own risk; it is not guaranteed to be correct nor

accurate, please send your feedback and corrections to info@zzzprojects.com

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 << 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:

1. Para construir procedimientos almacenados..

2. Para crear disparadores de base de datos.

3. Para implementar la lógica del lado del cliente en su aplicación de Oracle Forms.

4. 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.

Capítulo 2: Asignaciones modelo y lenguaje.

Examples

Modelo de asignaciones en PL / SQL.

Todos los lenguajes de programación nos permiten asignar valores a las variables. Por lo general,

un valor se asigna a la variable, de pie en el lado izquierdo. El prototipo de las operaciones de

asignación generales en cualquier lenguaje de programación contemporáneo se ve así:

left_operand assignment_operand right_operand instructions_of_stop

Esto asignará el operando derecho al operando izquierdo. En PL / SQL esta operación se ve así:

left_operand := right_operand;

El operando izquierdo debe ser siempre una variable. El operando derecho puede ser valor,

variable o función:

set serveroutput on declare v_hello1 varchar2(32767); v_hello2 varchar2(32767); v_hello3 varchar2(32767); function hello return varchar2 is begin return 'Hello from a function!'; end; begin -- from a value (string literal) v_hello1 := 'Hello from a value!'; -- from variable v_hello2 := v_hello1; -- from function v_hello3 := hello; dbms_output.put_line(v_hello1); dbms_output.put_line(v_hello2); dbms_output.put_line(v_hello3); end; /

Cuando el bloque de código se ejecuta en SQL * Plus, se imprime la siguiente salida en la

consola:

Hello from a value! Hello from a value! Hello from a function!

Hay una característica en PL / SQL que nos permite asignar "de derecha a izquierda". Es posible

hacerlo en sentencia SELECT INTO. Prototipo de este instrumento que se encuentra a

continuación:

SELECT [ literal | column_value ] INTO local_variable FROM [ table_name | aliastable_name ] WHERE comparison_instructions;

Este código asignará el carácter literal a una variable local:

set serveroutput on declare v_hello varchar2(32767); begin select 'Hello world!' into v_hello from dual; dbms_output.put_line(v_hello); end; /

Cuando el bloque de código se ejecuta en SQL * Plus, se imprime la siguiente salida en la

consola:

Hello world!

La asignación "de derecha a izquierda" no es un estándar , pero es una característica valiosa

para los programadores y usuarios. Generalmente se usa cuando el programador está usando

cursores en PL / SQL: esta técnica se usa cuando queremos devolver un único valor escalar o un

conjunto de columnas en la línea de cursor del cursor SQL.

Otras lecturas:

  • Asignación de valores a variables

Lea Asignaciones modelo y lenguaje. en línea:

https://riptutorial.com/es/plsql/topic/6959/asignaciones-modelo-y-lenguaje-

Capítulo 4: Cursores

Sintaxis

  • Cursor cursor_name Is your_select_statement
  • Cursor cursor_name (param TYPE) es your_select_statement_using_param
  • FOR x in ( your_select_statement ) LOOP ... Observaciones

Los cursores declarados son difíciles de usar, y usted prefiere los bucles FOR en la mayoría de los

casos. Lo que es muy interesante en cursores en comparación con los bucles FOR simples, es que

puede parametrizarlos.

Es mejor evitar hacer bucles con PL / SQL y cursores en lugar de usar Oracle SQL de todos

modos. Sin embargo, para las personas acostumbradas al lenguaje de procedimientos, puede ser

mucho más fácil de entender.

Si desea verificar si existe un registro, y luego hacer cosas diferentes dependiendo de si el

registro existe o no, entonces tiene sentido usar las instrucciones MERGE en consultas SQL de

ORACLE puras en lugar de usar bucles de cursor. (Tenga en cuenta que MERGE solo está

disponible en las versiones de Oracle> = 9i).

Examples

Cursor parametrizado "FOR loop" DECLARE CURSOR c_emp_to_be_raised(p_sal emp.sal%TYPE) IS SELECT * FROM emp WHERE sal < p_sal; BEGIN FOR cRowEmp IN c_emp_to_be_raised(1000) LOOP dbms_Output.Put_Line(cRowEmp .eName ||' ' ||cRowEmp.sal||'... should be raised ;)'); END LOOP; END; / Cursor de bucle "FOR" implícito BEGIN FOR x IN (SELECT * FROM emp WHERE sal < 100) LOOP dbms_Output.Put_Line(x.eName ||' '||x.sal||'... should REALLY be raised :D'); END LOOP; END; /

  • La primera ventaja es que no hay ninguna declaración tediosa que hacer (piense en esta

horrible cosa "CURSOR" que tenía en versiones anteriores)

La segunda ventaja es que primero construye su consulta de selección, luego, cuando tiene

lo que desea, puede acceder de inmediato a los campos de su consulta ( x. ) en su

bucle PL / SQL

El bucle abre el cursor y obtiene un registro a la vez para cada bucle. Al final del bucle se

cierra el cursor.

Los cursores implícitos son más rápidos porque el trabajo del intérprete crece a medida que

el código se alarga. Cuanto menos código menos trabajo tiene que hacer el intérprete.

Trabajando con SYS_REFCURSOR

SYS_REFCURSOR se puede usar como un tipo de retorno cuando necesita manejar fácilmente una

lista devuelta no desde una tabla, sino más específicamente desde una función:

función devolviendo un cursor

CREATE OR REPLACE FUNCTION list_of (required_type_in IN VARCHAR2) RETURN SYS_REFCURSOR IS v_ SYS_REFCURSOR; BEGIN CASE required_type_in WHEN 'CATS' THEN OPEN v_ FOR SELECT nickname FROM ( select 'minou' nickname from dual union all select 'minâ' from dual union all select 'minon' from dual ); WHEN 'DOGS' THEN OPEN v_ FOR SELECT dog_call FROM ( select 'bill' dog_call from dual union all select 'nestor' from dual union all select 'raoul' from dual ); END CASE; -- Whit this use, you must not close the cursor. RETURN v_; END list_of; /

Y cómo usarlo:

DECLARE

v_names SYS_REFCURSOR; v_ VARCHAR2 (32767); BEGIN v_names := list_of('CATS');

Capítulo 5: Declaración IF-THEN-ELSE

Sintaxis

  • SI [condición 1] ENTONCES
  • [instrucciones para ejecutar cuando la condición 1 es VERDADERA];
  • ELSIF [condición 2] LUEGO
  • [instrucciones para ejecutar cuando la condición 2 es VERDADERA];
  • MÁS
  • [declaraciones a ejecutar cuando tanto la condición 1 como la condición 2 son FALSAS];
  • TERMINARA SI;

Examples

IF-THEN DECLARE v_num1 NUMBER(10); v_num2 NUMBER(10); BEGIN v_num1 := 2; v_num2 := 1; IF v_num1 > v_num2 THEN dbms_output.put_line('v_num1 is bigger than v_num2'); END IF; END; IF-THEN-ELSE DECLARE v_num1 NUMBER(10); v_num2 NUMBER(10); BEGIN v_num1 := 2; v_num2 := 10; IF v_num1 > v_num2 THEN dbms_output.put_line('v_num1 is bigger than v_num2'); ELSE dbms_output.put_line('v_num1 is NOT bigger than v_num2'); END IF; END;

IF-THEN-ELSIF-ELSE DECLARE v_num1 NUMBER(10); v_num2 NUMBER(10); BEGIN v_num1 := 2; v_num2 := 2; IF v_num1 > v_num2 THEN dbms_output.put_line('v_num1 is bigger than v_num2'); ELSIF v_num1 < v_num2 THEN dbms_output.put_line('v_num1 is NOT bigger than v_num2'); ELSE dbms_output.put_line('v_num1 is EQUAL to v_num2'); END IF; END;

Lea Declaración IF-THEN-ELSE en línea: https://riptutorial.com/es/plsql/topic/5871/declaracion-if-

then-else

IF functionName() = 100 THEN Null; END IF;

Llamando una función en una instrucción SELECT

SELECT functionName() FROM DUAL;

Lea Funciones en línea: https://riptutorial.com/es/plsql/topic/4005/funciones

Capítulo 7: Gatillos

Introducción

Introducción:

Los disparadores son un concepto útil en PL / SQL. Un disparador es un tipo especial de

procedimiento almacenado que no requiere ser llamado explícitamente por el usuario. Es un

grupo de instrucciones, que se activan automáticamente en respuesta a una acción de

modificación de datos específica en una tabla o relación específica, o cuando se cumplen ciertas

condiciones específicas. Los activadores ayudan a mantener la integridad y la seguridad de los

datos. Hacen el trabajo conveniente tomando la acción requerida automáticamente.

Sintaxis

  • CREAR [O REEMPLAZAR] TRIGGER trigger_name
  • ANTES DE ACTUALIZAR [o INSERTAR] [o BORRAR]
  • ON table_name
  • [ POR CADA FILA ]
  • DECLARAR
    • Declaraciones variables
  • EMPEZAR
    • código de activación
  • EXCEPCIÓN
  • CUANDO ...
  • -- manejo de excepciones
  • FIN;

Examples

Antes de activar INSERT o ACTUALIZAR CREATE OR REPLACE TRIGGER CORE_MANUAL_BIUR BEFORE INSERT OR UPDATE ON CORE_MANUAL FOR EACH ROW BEGIN if inserting then -- only set the current date if it is not specified if :new.created is null then :new.created := sysdate; end if; end if; -- always set the modified date to now if inserting or updating then :new.modified := sysdate; end if;