Está en la página 1de 40

Tipos de datos

Dispone de los mismos tipos de datos que SQL, adems de otros propios.
CARCTER CHAR(L) Ejemplos: Nombre CHAR(15); Letra_nif CHAR; Situacion CHAR(); ERROR VARCHAR2(L) Ejemplos: Apellidos VARCHAR2(25); Control VARCHAR2; ERROR LONG(L) Ejemplos: V_observaciones LONG(5000); Almacena caracteres de longitud fija. Entre parntesis se puede indicar el tamao mximo, por defecto es de 1 carcter. Las posiciones no utilizadas se rellenan con blancos. Almacena cadenas de caracteres de longitud variable, cuyo tamao mximo se debe especificar en nmero de bytes (L). Almacena cadenas de longitud variable, es similar a VARCHAR2.

Tema 11_Fundamentos del lenguaje PL-SQL

Tipos de datos
NUMRICOS NUMBER(P,E) Ejemplos: Importe NUMBER(5,2); Centimos NUMBER(2,2) P, es la precisin, nmero total de dgitos y E, es la escala o nmero de decimales. Si se excede la escala, se producir truncamiento y se rebasa la precisin se producir un error. PL/SQL, dispone de subtipos NUMBER como: DECIMAL, NUMERIC, INTEGER, REAL, .. Es un tipo numrico entero que se almacena en memoria en formato binario para facilitar los clculos. Puede contener valores comprendidos entre -2147483647 y +2147483647. Se utiliza para contadores, ndices, .. Subtipos: NATRUAL y POSITIVE

BINARY_INTEGER Ejemplos: Contador BINARY_INTEGER;

PLS_INTEGER Ejemplos: Indice PLS_INTEGER);

Tipo de datos similar al BINARY_INTEGER y con el mismo rango, pero es ms rpido y si se da desbordamiento en el calculo, se produce un error y se llama a la excepcin oportuna. Tema 11_Fundamentos 2
del lenguaje PL-SQL

Tipos de datos
BOOLEANO BOOLEAN Admite valores TRUE, FALSE y NULL. La base de datos no soporta este tipo. FECHA Y HORA DATE Almacena fechas. El formato estndar es dd-mmm-aaaa. Tambin almacena la hora. Otros tipos escalares RAW(L) Almacena datos binarios en longitud fija. Se utiliza para almacenar cadenas de caracteres evitando las conversiones entre conjuntos de caracteres que realiza Oracle. Almacena datos binarios en longitud fija. evitando conversiones entre conjuntos de caracteres. Almacena identificadores de fila.

LONG RAW

ROWID

Tema 11_Fundamentos del lenguaje PL-SQL

Identificadores
intervienen en los programas: variables, constantes, procedimientos, funciones,.. Pueden tener hasta 30 caracteres, empezando siempre por una letra, pudiendo ir seguida de mas letras, nmeros, signo de dlar, de almohadilla y el subguin. No diferencia entre maysculas y minsculas. Ejemplos: Vlidos: x2,Anio, v_num No vlidos: 2x,ao, v-num
Se utilizan para nombrar objetos que

Tema 11_Fundamentos del lenguaje PL-SQL

Variables
Declaracin e inicializacin
Se deben declarar en la seccin DECLARE, antes de su uso. Formato genrico: <nombre_var> <tipo> [NOT NULL] [{:= |DEFAULT} <valor>] Cada variable se debe declarar por separado, no admite poner varias variables separadas por comas y luego indicar el tipo. La opcin NOT NULL, fuerza a que la variable tenga siempre un valor. Si se usa, deber inicializarse la variable en la inicializacin, con DEFAULT o con := Si no se inicializan las variables , se garantiza que la variable tiene el valor NULL. No obstante, no es aconsejable hacer referencia a una variable antes de que se haya asignado un valor.

Tema 11_Fundamentos del lenguaje PL-SQL

Variables Uso de los atributos %TYPE y %ROWTYPE


%TYPE declara una variable del mismo tipo que otra, o que una columna de una tabla. %ROWTYPE crea una variable de registro cuyos campos se corresponden con las columnas de una tabla o vista. Al declarar una variable del mismo tipo que otro objeto usando los atributos anteriores, se hereda el tipo y la longitud, pero no los posibles atributos NOT NULL ni los valores por defecto que tuviese definido el objeto original.
Tema 11_Fundamentos del lenguaje PL-SQL 6

Ejemplos:

Variables

1- total importe %TYPE; declara la variable total del mismo tipo que la variable importe. 2- nombre_moroso CLIENTES.NOMBRE%TYPE; declara la variable nombre_moroso del mismo tipo que la columna nombre de la tabla clientes. 3- moroso CLIENTES%ROWTYPE; creamos una variable de registro de la tabla Clientes. Para hacer referencia a cada uno de los campos de una variable registro, utilizamos el nombre de la variable registro, punto y el nombre del campo que coincide con el de la columna correspondiente en la tabla o vista original. moroso.nombre;

Tema 11_Fundamentos del lenguaje PL-SQL

Constantes:

Variables

mbito y visibilidad de las variables:

Se pueden declarar constantes mediante el siguiente formato: <nombre_de_constante> CONSTANT <tipo> := <valor> Siempre se debe asignar un valor en la declaracin. Ejemplo: iva CONSTANT REAL :=16; El mbito de una variable es el bloque en que se declara y los bloques hijos de dicho bloque. La variable ser local para el bloque en el que se declara La variable ser global para los bloques hijos. Las variables declaradas en los bloques hijos no son accesibles desde el bloque padre.

Tema 11_Fundamentos del lenguaje PL-SQL

DECLARE -------------------- Bloque PADRE v1 CHAR; BEGIN v1:=1; DECLARE --------------------- Bloque HIJO v2 CHAR; BEGIN v2:=2; . v1:=v2; END; ------------------------- Fin bloque HIJO v2:=v1; (error, v2 desconocida) END; ------------------------ Fin bloque PADRE La variable v1 es accesible para los dos bloques (local para el bloque padre y global para el bloque hijo), mientras que v2 solamente es accesible para el bloque hijo.

Ejemplo:

Variables

Tema 11_Fundamentos del lenguaje PL-SQL

Las variables se crean al comienzo del bloque y dejan de existir una vez finalizada la ejecucin del bloque en que han sido declaradas. En el caso de que un identificador local coincida con uno global, si no se indica ms, se referencia al local. No obstante, se pueden utilizar etiquetas o calificadores para deshacer ambigedades.
<<padre>> --etiqueta bloque padre DECLARE v CHAR; BEGIN DECLARE v CHAR; BEGIN V:=padre.v; .

Variables

Tema 11_Fundamentos del lenguaje PL-SQL

10

PL/SQL dispone de operadores que se utilizan para asignar valores y formar expresiones.
Asignacin: se utiliza el operador := Lgicos: AND, OR, NOT Concatenacin: se utiliza el operador || Comparacin: >,<,>=,<=,!=,=, IS NULL, BETWEEN, LIKE, IN, Aritmticos: +,-,*,/, ** (este ltimo es la exponenciacin)

Operadores

Orden de precedencia en los operadores de mayor a menor:


1: **,NOT 2: *,/ 3: +,-,|| 4: =,!=,<,>,<=,>=, IS NULL, LIKE, BETWEEN,IN 5: AND 6: OR

Los operadores que se encuentran en el mismo grupo, tienen la misma precedencia, si queremos dar prioridad a uno frente a otro, tendremos que hacer uso de los parntesis.
Tema 11_Fundamentos del lenguaje PL-SQL 11

En PL/SQL se pueden utilizar las funciones de SQL que se han visto en SQL. No obstante, algunas funciones (AVG,MIN,MAX,COUNT,SUM,..) solamente se pueden utilizar dentro de un SELECT. Se deben tener en cuenta los siguientes aspectos:
La funcin no modifica el valor de las variables o expresiones que se pasan como argumento, sino que devuelven un valor a partir de dicho argumento. Si a una funcin se le pasa el valor NULL en la llamada, normalmente devolver un valor nulo.

Funciones

Ejemplo: SQL>BEGIN DBMS_OUTPUT.PUT_LINE (TO_CHAR (SYSDATE, DAY,DD MONTH a las HH24:MI:SS)); END; /
Tema 11_Fundamentos del lenguaje PL-SQL

12

PL/SQL dispone de estructuras para controlar el flujo de ejecucin de los programas. La mayora de las estructuras de control requieren evaluar una condicin, que en PL/SQL puede tener tres resultados: TRUE, FALSE o NULL. El valor NULL es equivalente a FALSE, se considera que se cumple la condicin solamente si el resultado es TRUE, en cualquier otro caso (FALSE o NULL), se considera que no se cumple. Alternativa simple: IF <condicion> THEN Instrucciones; END IF; Si la condicin se cumple, se ejecutan las instrucciones que siguen a la clusula THEN. Alternativa doble: IF <condicion> THEN Instrucciones1; ELSE Instrucciones2; .. END IF; Si la condicin se cumple, se ejecutan el bloque de instrucciones entre el THEN del IF y el ELSE. Si la condicin no se cumple, se ejecutan las instrucciones entre el ELSE y el END IF.
Tema 11_Fundamentos del lenguaje PL-SQL 13

Estructuras de control

Estructuras de control
Alternativa mltiple: IF <condicion1> THEN Instrucciones1; ELSIF <condicion2> THEN Instrucciones; ELSIF <condicion3> THEN Instrucciones; [ELSE instrucciones;] END IF; Evala, comenzando desde el principio, cada condicin, hasta encontrar alguna condicin que se cumpla, en cuyo caso ejecutar las instrucciones que siguen a la clusula THEN correspondiente. La clusula ELSE es opcional, en caso de que se utilice, se ejecuta cuando no se ha cumplido ninguna de las condiciones anteriores.

Tema 11_Fundamentos del lenguaje PL-SQL

14

Estructuras de control
Iterar fin iterar salir si LOOP Instrucciones; ..; IF <condicion> THEN EXIT; END IF; Instrucciones; END LOOP; Se trata de un bucle que se repetir hasta encontrar la clusula EXIT. Normalmente esta orden se encontrar en el formato indicado al lado, o bien: LOOP Instrucciones; EXIT WHEN <condicion>; Instrucciones; ; END LOOP;
Tema 11_Fundamentos del lenguaje PL-SQL 15

Mientras: WHILE <condicion> LOOP instrucciones; ..; END LOOP; Es un bucle que se ejecutar mientras se cumpla la condicin. Se evala la condicin y, si se cumple, se ejecutarn las instrucciones del bucle. Para: FOR <variablecontrol> IN <valorInicio>..<valorFinal> LOOP instrucciones; .; END LOOP; Se suele emplear este bucle, cuando se conoce a priori el nmero de veces que se debe ejecutar un bucle.

Estructuras de control

Tema 11_Fundamentos del lenguaje PL-SQL

16

La variablecontrol, es variable local al bucle y no hay que declararla y por defecto es de tipo BINARY_INTEGER. No es accesible desde fuera del bucle, y se puede usar dentro del bucle en alguna expresin, pero no se le puede asignar valores. Si definimos una variable previamente e intentamos usarla como variable de control, la estructura crear la suya propia como local, quedando la nuestra como global en el bucle. El incremento siempre es una unidad, pero puede ser negativo utilizando la opcin REVERSE. FOR <variablecontrol> IN REVERSE <valorFinal>..<valorInicial>. Consideraciones sobre los bucles: Los bucles se pueden etiquetar para conseguir mayor legibilidad
<<mi bucle>> LOOP <secuencia de instrucciones>; END LOOP mi bucle;

Estructuras de control

Tema 11_Fundamentos del lenguaje PL-SQL

17

En PL/SQL se puede usar la clusula GOTO etiqueta. Para poder utilizar esta orden se deben cumplir las siguientes condiciones:

GOTO

BEGIN GOTO insertar_fila; <<insertar_fila>> INSERT INTO empleados VALUES END; O

Ejemplos vlidos:

No puede haber otra etiqueta en el entorno actual con el mismo nombre. La etiqueta debe preceder a un bloque o a un conjunto de rdenes ejecutables. La etiqueta no puede estar dentro de un IF, de un LOOP ni de un sub-bloque interno al bloque donde se produce la llamada. Desde una excepcin no se puede pasar el control del programa a una etiqueta que est en el mismo bloque.

Tema 11_Fundamentos del lenguaje PL-SQL

18

BEGIN << insertar_fila>> BEGIN INSERT INTO empleados VALUES END .. GOTO insertar_fila; END

GOTO

BEGIN FOR i IN 1..10 LOOP GOTO fin_loop; <<fin_loop>> /* ILEGAL, no hay instrucciones ejecutables */ END LOOP; .. GOTO insertar_fila; IF THEN .. <<insertar_fila>> /* ILEGAL, est dentro de un IF */ INSERT INTO empleados VALUES END IF;
Tema 11_Fundamentos del lenguaje PL-SQL 19

Ejemplos errneos:

GOTO otro_sub; /*ILEGAL, est en otro bloque */ BEGIN <<otro_sub>> DELETE FROM END; <<mi etiqueta>> EXCEPTION WHEN THEN .. GOTO mi_etiqueta; /* ILEGAL, la etiqueta est en el bloque actual */ END;

GOTO

Tema 11_Fundamentos del lenguaje PL-SQL

20

Los subprogramas son bloques PL/SQL que tienen un nombre, pueden recibir parmetros y en el caso de las funciones, tambin devolver un valor. Se guardan en la BD, y podemos ejecutarlos invocndolos desde otros subprogramas o desde herramientas. En todo subprograma se distinguen: La cabecera del subprograma: Contiene el nombre del subprograma Definicin de sus parmetros: nombre y tipo Y el tipo del valor de retorno en el caso de las funciones. El cuerpo del subprograma: Declaracin variables locales Instrucciones Manejo de excepciones. En PL/SQL tenemos dos tipos de subprogramas: PROCEDIMIENTOS y FUNCIONES.
Tema 11_Fundamentos del lenguaje PL-SQL 21

Subprogramas

Estructura: PROCEDURE <nombreproced> [(lista de parmetros)] IS (o AS) <declaraciones> BEGIN <instrucciones> EXCEPTION <excepciones> END [<nombreproced>]; La estructura tiene dos partes:

Procedimientos

La cabecera: especificacin del procedimiento. Comienza con la palabra PROCEDURE y termina despus del ltimo parmetro. El cuerpo: corresponde a un bloque PL/SQL. Comienza con la palabra IS o AS y termina con la palabra END.
Tema 11_Fundamentos del lenguaje PL-SQL 22

Al indicar los parmetros debemos indicar el tipo, pero no el tamao. En el caso de que no haya parmetros no se pondrn los parntesis. Las declaraciones de variables se hacen despus del IS o AS, y aqu si debemos indicar adems del tipo, la longitud de las variables locales.

Declaracin de parmetros: <nombrevariable> [IN | OUT |IN OUT] <tipodedato> [{:= |DEFAULT } <valor>]

En la lista de parmetros encontramos cada uno de los parmetros separados por comas.

Procedimientos

Creacin de un procedimiento: CREATE [OR REPLACE] PROCEDURE <nombreproced>.

Con el REPLACE , si existe un procedimiento llamado as, lo reemplaza.


Tema 11_Fundamentos del lenguaje PL-SQL 23

Para ejecutar un procedimiento: Se puede ejecutar desde cualquier herramienta de Oracle con la orden EXCUTE. EXECUTE procedimiento (parmetros); Tambin se puede llamar al procedimiento desde otro bloque o funcin, en ese caso slo har falta nombrarlo y pasarle los correspondientes parmetros si los tuviera.
Procedimiento (parmetros):

Procedimientos

Tema 11_Fundamentos del lenguaje PL-SQL

24

Funciones
La diferencia entre procedimientos y funciones, es que estas ltimas devuelven un valor. Estructura: FUNCTION <nombrefuncin> ([lista de parmetros>]) RETURN <tipo de valor devuelto> IS BEGIN <instrucciones>; RETURN <expresin>; EXCEPTION <excepciones>; END <nombrefuncion>;
Tema 11_Fundamentos del lenguaje PL-SQL 25

Los parmetros tienen la misma sintaxis en los procedimientos que en las funciones. La clusula RETURN de la cabecera especifica el tipo de valor que devuelve la funcin. En el cuerpo del programa se utilizar de nuevo el RETURN junto con la expresin cuyo valor devolver. Esta clusula devuelve el control al programa que llam a la funcin, asignando el valor devuelto por la funcin al identificador de la misma en el punto de la llamada. Para crear un funcin: CREATE [OR REPLACE] FUNCTION

Funciones

Tema 11_Fundamentos del lenguaje PL-SQL

26

Funciones
El formato de la llamada a una funcin consiste en utilizarla como parte de una expresin: <variable>:=<nombredefuncin>(par metros); Se pueden invocar funciones en comandos PL/SQL, pero para hacerlo desde SQL se tienen que cumplir ciertas restricciones. Una funcin puede tener varios RETURN
IF nota<5 THEN RETURN suspenso; ELSE RETURN aprobado; END IF;

Tema 11_Fundamentos del lenguaje PL-SQL

27

Parmetros
Los subprogramas utilizan parmetros para pasar y recibir informacin. Hay dos clases: Parmetros actuales o reales: son las variables o expresiones indicadas en la llamada a un subprograma. Parmetros formales: son variables declaradas en la especificacin del subprograma. Si es necesario PL/SQL har la conversin automtica de tipos; sin embargo los tipos de los parmetros actuales y los correspondientes formales deben ser compatibles.

Tema 11_Fundamentos del lenguaje PL-SQL

28

Parmetros
Podemos hacer el paso de parmetros utilizando la notacin posicional, nominal o mixta (ambas): Posicional: el compilador asocia los parmetros actuales a los formales basndose en su posicin. Nominal: el smbolo => despus del parmetro actual y antes del nombre del formal indica al compilador la correspondencia. Mixta: consiste en usar ambas notaciones, con la restriccin de que la notacin posicional debe preceder a la nominal.

Tema 11_Fundamentos del lenguaje PL-SQL

29

Parmetros
PROCEDURE ges_dept (n_departamento INTEGER, localidad VARCHAR) IS Desde otro bloque: DECLARE num_dep INTEGER; local VARCHAR(14); BEGIN ges_dept (num_dep,local); --posicional ges_dept (num_dep => n_departamento, local=>localidad); -- nominal ges_dept (local=>localidad, num_dep =>n_departamento); -- nominal ges_dept (num_dept, local=>localidad); -mixta END;
Tema 11_Fundamentos del lenguaje PL-SQL 30

Ejemplo:

Valores por defecto en el paso de parmetros (parmetros IN): todos los vistos hasta ahora, se pueden iniciar con valores por omisin, as que si no se pasa el valor para el parmetro se asume el valor por defecto. Tipos de parmetros:
Tipo IN Caractersticas -Permite pasar valores a subprogramas. -Dentro del subprograma, al parmetro no se le puede asignar ningn valor. -El parmetro actual puede ser una variable, una constante, literal o expresin. -Permite devolver valores al bloque que llam al subprograma. -Dentro del subprograma el parmetro acta como una variable no inciada. -No puede intervenir en ninguna expresin, salvo para tomar un valor. -El parmetro actual debe ser una variable.Tema 11_Fundamentos
del lenguaje PL-SQL

Parmetros

Se puede hacer con DEFAULT <valor> o := <valor>.

OUT

31

Tipos de parmetros:
Tipo Caractersticas

Parmetros

IN OUT -Permite pasar un valor inicial y devolver un valor actualizado. -Dentro del subprograma acta como una variable inicializada. -Puede intervenir en otras expresiones y puede tomar nuevos valores. -El parmetro actual debe ser una variable.

Los parmetros IN se sitan siempre a la derecha del operador de asignacin. Los parmetros OUT siempre a la izquierda Los parmetros IN OUT, pueden situarse tanto a la derecha como a la izquierda.

Tema 11_Fundamentos del lenguaje PL-SQL

32

Ejemplo: Un programa que recibe un nmero que representa la cantidad en pesetas y devuelve la cantidad equivalente en la moneda cuyo cambio se especifica en el segundo parmetro, deduciendo un mnimo o una comisin:

Parmetros

CREATE OR REPLACE PROCEDURE cambiar_divisas ( cantidad_pesetas IN NUMBER, cambio_actual IN NUMBER, cantidad_comision IN OUT NUMBER, cantidad_divisas OUT NUMBER) AS Pct_comision NUMBER (3,2) DEFAULT 0.2; Minimo_comision NUMBER(6) DEFAULT 500; BEGIN IF cantidad_comision IS NULL THEN Cantidad_comision:= GREATEST(cantidad_pesetas/100*pct_comision, minimo_comision); END IF; Cantidad_divisas:= (cantidad_pesetascantidad_comision/cambio_actual) END;

Tema 11_Fundamentos del lenguaje PL-SQL

33

CREATE OR REPLACE PROCEDURE probar_cambio_divisas (ptas NUMBER, cambio NUMBER) AS v_comision NUMBER(9); v_divisas NUMBER(9); BEGIN Cambiar_divisas (ptas,cambio,v_comision,v_divisas); DBMS_OUTPU.PUT_LINE(Pesetas : ||TO_CHAR(ptas,999,999,999.999)); DBMS_OUTPUT.PUT_LIINE (Precio divisa: || TO_CHAR(cambio, 999,999,999.999)); DBMS_OUTPU.PUT_LINE (Ptas. Comision: ||TO_CHAR(v_comision,999,999,999.999)); DBMS_OUTPUT.PUT_LINE (Cantidad divisas: ||TO_CHAR(v_divisas,999,999,999.999)); END;

Ejemplo: El siguiente procedimiento llama al programa anterior:

Parmetros

SQL>SET SERVEROUTPUT ON SQL>EXECUTE probar_cambio_divisas(25000,166.36); Pesetas: 25,000.000 Precio divisa: 166.360 Ptas. Comision: 500.000 Cantidad divisas: 147.000
Tema 11_Fundamentos del lenguaje PL-SQL 34

Ejemplo de ejecucin:

Subprogramas
Para llamar a un subprograma:
Desde otro subprograma: Desde SQL*Plus y otras herramientas Oracle: SQL> EXECUTE nombresubprograma (lista de parmetros); o SQL>BEGIN nombresubprograma(lista de parmetros); END; Este ultimo crea un bloque PL/SQL annimo y desde all realiza la llamada. DROP {PROCEDURE|FUNCTION} nombresubprograma;
nombresubprograma(lista de parmetros);

Para borrar un subprograma:

Tema 11_Fundamentos del lenguaje PL-SQL

35

Subprogramas almacenados
Los subprogramas (procedimientos y funciones) que hemos visto ahora se pueden compilar independientemente y almacenar en la BD Oracle. Cuando creamos procedimientos y funciones almacenados desde SQL*Plus utilizando el comando CREATE PROCEDURE o CREATE FUNCTION, Oracle compila automticamente el cdigo fuente, genera el cdigo objeto (llamado pcdigo) y los guarda en el diccionario de datos, quedando disponible para su utilizacin. Los programas almacenados tienen dos estados: disponible (valid) y no disponible (invalid). Si alguno de los objetos referenciados por el programa ha sido borrado o alterado desde la ltima compilacin del programa quedar no disponible.
Tema 11_Fundamentos del lenguaje PL-SQL 36

Subprogramas almacenados
Los estados de un programa se pueden consultar en la vista USER_OBJECTS, en el campo STATUS. Tambin se puede encontrar el cdigo fuente en la vista USER_SOURCE, mediante los campos NAME, LINE y TEXT. Para volver a compilar un subprograma almacenado en la BD, se emplea la orden ALTER, indicando PROCEDURE o FUNCTION, segn el tipo de subprograma. ALTER {PROCEDURE|FUNCTION} nombresubprograma COMPILE;

Tema 11_Fundamentos del lenguaje PL-SQL

37

Subprogramas locales
Dentro de un subprograma se puede declarar y crear otro subprograma. Estos segundos subprogramas reciben el nombre de subprogramas locales. Estructura:

CREATE OR REPLACE pr_ejem1 AS .. PROGRAM sprloc1 [<lista de parmetros del subprograma local>] IS [<lista de variables locales del subprograma local>] BEGIN <instrucciones del subprograma local> END; BEGIN <instrucciones del subprograma> Sprloc1(); /* llamada al subprograma local*/ END;

Tema 11_Fundamentos del lenguaje PL-SQL

38

Subprogramas locales
Caractersticas: Se declaran al final de la seccin declarativa de otro subprograma o bloque. Se les aplica las mismas reglas de mbito y visibilidad que a las variables declaradas en el mismo bloque. Se utilizar este tipo de subprogramas cuando no se contemple su reutilizacin por otros subprogramas (distintos a aqul en el que se declaran). En el caso de subprogramas locales con referencias cruzadas o subprogramas mutuamente recursivos, hay que realizar declaraciones anticipadas. Declaracin anticipada: esta tcnica consiste en indicar la especificacin del subprograma, incluyendo la lista de parmetros formales.
DECLARE PROCEDURE subprograma2(); - declaracin anticipada PROCEDURE subprograma1 ()IS BEGIN Subprograma2(); - no dar error, porque tiene la declaracion anticipada . END; PROCEDURE subprograma2 ()IS BEGIN . END; Tema 11_Fundamentos 39 del lenguaje PL-SQL

Ejemplo:

Subprogramas
RECURSIVIDAD: PL/SQL implementa, al igual que la mayora de los lenguajes de programacin, la posibilidad de escribir subprogramas recursivos. Ejemplo de subprograma recursivo: CREATE OR REPLACE FUNCTION factorial (n POSITIVE) RETURN INTEGER AS BEGIN
IF n=1 THEN
RETURN 1;

ELSE
RETURN n* factorial (n-1);

END IF;

END factorial; SOBRECARGA: PL/SQL permite la sobrecarga en los nombres de los subprogramas siempre que los parmetros formales de los subprogramas difieran en nmero, orden y/ tipo.
Tema 11_Fundamentos del lenguaje PL-SQL 40

También podría gustarte