Está en la página 1de 7

FUNDAMENTOS DEL LENGUAJE PL/SQL

1. TIPO DE DATOS BSICOS. AMPLIACIN. A. CARCTER. 1. char(L) Almacena cadenas de caracteres de longitud fija. L indica la longitud en caracteres. Sino se pone longitud toma por defecto 1. Ejemplo: Nombre char(15); Nombre char; Nombre char(); --da error 2. Varchar2(L) Cadena de caracteres de longitud variable. L indica longitud de caracteres. Ej.: Nombre varchar2(15); Nombre varchar2; -- da error 3. Long(L) Igual que el anterior pero para cadenas muy largas. Ej.: Observaciones long(5000);

B. NUMRICOS. 1. number (x,y) Almacena datos numricos. x indica el nmero total de dgitos. y indica el nmero total de decimales. Ej.: Importe number(3,2); --admite hasta 999.99 Se disponen los subtipos: decimal, integer, real, numeric, smallint, etc. 2. pls_integer. Es un tipo numrico que se almacena en memoria en forma binaria para facilitar los clculos. Valor: -2147483647 hasta +2147483647 Se utiliza principalmente en contadores e ndices. Tiene la ventaja que es muy rpido. Ej.: Contador pls_integer; C. BOOLEANO.

1. bolean. Almacena valores TRUE, FALSE y NULL. D. FECHA Y HORA. 1. date. Almacena fecha y horas en el formato, por defecto: dd-mm-aaaa Comentar aqu que se pueden hacer conversiones implcitas de tipos (carcternumrico y carcter-fecha) mediante las funciones correspondientes: TO_CHAR, TO_NUMBER, TO_DATE 2. FUNCIONES

Caracteres.
CONCAT Sintaxis: CONCAT(cadena1,cadena2) Devuelve la cadena1 concatenada con la cadena2. INITCAP Sintaxis: INITCAP(cadena) Devuelve la cadena con el primer caracter de cada palabra en mayscula y el resto en minscula. LOWER Sintaxis: LOWER(cadena) Devuelve la cadena con todos los caracteres en minscula. LPAD Sintaxis: LPAD(cadena1, x[, cadena2]) Devuelve la cadena1 rellena hacia la izquierda con los caracteres de la cadena2, hasta completar la longitud x. Si no se ingresa la cadena2, se rellena de espacios en blanco.

RPAD Sintaxis: RPAD(cadena1, x[, cadena2]) Devuelve la cadena1 rellena hacia la derecha con los caracteres de la cadena2, hasta completar la longitud x. Si no se ingresa la cadena2, se rellena de espacios en blanco.

LTRIM Sintaxis: LTRIM(cadena1[,cadena2]) Devuelve la cadena1, quitando los caracteres de la izquierda contenidos en cadena2. Si no se ingresa cadena2, la funcin utiliza como cadena predeterminada un nico carcter de espacio en blanco.

RTRIM Sintaxis: RTRIM(cadena1[,cadena2])

Devuelve la cadena1, quitando los caracteres de la derecha contenidos en cadena2. Si no se ingresa cadena2, la funcin utiliza como cadena predeterminada un nico carcter de espacio en blanco. REPLACE Sintaxis: REPLACE(cadena, cad_busc[, cad_subst]) Devuelve la cadena, reemplazando todas las apariciones de la cadena cad_busc con la cadena cad_subst. Si no se especifica cad_subst, se eliminan todas las apariciones de cad_busc. SUBSTR Sintaxis: SUBSTR(cadena, a [, b]) Devuelve una porcin de b caracteres de longitud de la cadena proporcionada como argumento, empezando a partir de la posicin a. Si no se especifica b se devuelve toda la cadena a partir de la posicin indicada. UPPER Sintaxis: UPPER(cadena) Devuelve la cadena proporcionada con todas las letras en maysculas. LENGTH Sintaxis: LENGTH(cadena) Devuelve la longitud de la cadena proporcionada.

Funciones Numricas.
ABS Sintaxis: ABS(x) Devuelve el valor absoluto de x. ASIN Sintaxis: ASIN(x) Devuelve el arco seno de x. CEIL Sintaxis: CEIL(x) Devuelve el menor entero que sea mayor o igual que x. FLOOR Sintaxis: FLOOR(x) Devuelve el mayor entero igual o menor que x.

POWER Sintaxis: POWER(x, y) Devuelve el nmero x elevado a la potencia de y. SQRT Sintaxis: SQRT(x) Devuelve la raz cuadrada de x. ROUND Sintaxis: ROUND(x[, y]) Devuelve el valor x redondeado a y posiciones a la derecha del punto decimal. El valor predeterminado de y es 0, lo que redondea x al entero mas cercano. Si y es negativo, redondean los dgitos a las izquierda del punto decimal. TRUNC Sintaxis: TRUNC(x[, y])

Devuelve el valor x truncado a y posiciones a la derecha del punto decimal. El valor predeterminado de y es 0, lo que redondea x al entero mas cercano. Si y es negativo, redondean los dgitos a las izquierda del punto decimal.

3. SUBPROGRAMAS: PROCEDIMIENTOS Y FUNCIONES. Los procedimientos en pl/sql, para aquellos que no saben lo que son, son como los bloques script o de php que se insertan en el cdigo html, pero en este caso no se insertan, los creas, los guardas con un nombre y cuando lo necesitas lo llamas desde el bloque principal. Las funciones son un tanto igual, sino que a diferencia de los anteriores devuelven un valor. A. PROCEDIMIENTOS. Tienen la siguiente estructura general: CREATE OR REPLACE PROCEDURE [(<parmetrosqueseenvian>)] IS <declaracionesdevariables> BEGIN <instrucciones> EXCEPTION <excepciones> END <nombredelprocedimiento>; <nombredelprocedimiento>

Ejemplo 1: CREATE OR REPLACE PROCEDURE ejemplo_1 IS Variable varchar2(50); BEGIN SELECT ENAME INTO variable FROM EMP WHERE EMPNO=7369; DBMS_OUTPUT.PUT_LINE(El nombre es: || variable); END ejemplo_1; Create procedure Para poder ver el resultado tendremos que ejecutarlo, del siguiente modo: EXECUTE ejemplo_1; El nombre es: SMITH Procedimiento pl/sql terminado con xito. esto saldr en aquellos que trabajen con la consola SQL plus Ejemplo 2: Vamos a ver el mismo ejemplo pero esta vez enviando el numero de empleado (empno).

CREATE OR REPLACE PROCEDURE ejemplo_2(variable NUMBER) IS nombre varchar2(50); BEGIN SELECT ENAME INTO nombre FROM emp WHERE empno=variable; DBMS_OUTPUT.PUT_LINE('El nombre es:' || variable); END ejemplo_2; Create procedure Lo ejecutamos EXECUTE ejemplo_2(7369); El nombre es: SMITH Procedimiento pl/sql terminado con xito. esto saldr en aquellos que trabajen con la consola SQL plus

B. FUNCIONES. Las funciones tienen una estructura y funcionalidad similar a los procedimientos, pero, a diferencia de aquellos, stas devuelven un valor. Sintaxis: CREATE OR REPLACE FUNCTION <nombrefuncion> ([<listaparmetros>]) RETURN <tipovalordevuelto> IS <declaracionvariables> BEGIN <instrucciones> RETURN<expresin> EXCEPTION <excepciones> END <nombreprocedimiento>;

Ejemplo 3: CREATE OR REPLACE FUNCTION ejemplo_3 (variable NUMBER) RETURN VARCHAR2 IS nombre varchar2(50); BEGIN SELECT ENAME INTO nombre FROM emp WHERE empno=variable; RETURN nombre; END ejemplo_3; Create function Ahora para ver el resultado hacemos lo siguiente:

DECLARE NOMBRE VARCHAR2(50); BEGIN NOMBRE:=EJEMPLO_3(7369); Dbms_Output.PUT_LINE('EL NOMBRE ES: ' || NOMBRE); END; Sale como resultado: EL NOMBRE ES: SMITH

EJERCICIOS-EJEMPLOS.
1. Escribir un bloque pl/sql que nos muestre la fecha de distintas formas. DECLARE cadena VARCHAR2(50); BEGIN cadena:=To_Char(SYSDATE,'dd month yyyy'); --sysdate es la fecha del sistema Dbms_Output.put_line('la fecha de hoy es: '|| cadena); END; la fecha de hoy es: 20 junio 2003

Procedimiento pl/sql terminado con xito.

DECLARE cadena VARCHAR2(50); BEGIN cadena:=To_Char(SYSDATE,'dd mm yyyy'); Dbms_Output.put_line('la fecha de hoy es: '|| cadena); END; la fecha de hoy es: 20 06 2003 Procedimiento pl/sql terminado con xito. DECLARE cadena VARCHAR2(50); BEGIN cadena:=To_Char(SYSDATE,'day dd month yyyy'); Dbms_Output.put_line('la fecha de hoy es: '|| cadena); END; la fecha de hoy es: viernes 20 junio 2003 Procedimiento pl/sql terminado con xito. 2. Realizar de 2 maneras distintas un bloque pl/sql que escriba la cadena HOLA al revs.

Caso 1: DECLARE cadena VARCHAR2(10); tam NUMBER; BEGIN tam:=Length ('hola'); FOR i IN REVERSE 1..tam LOOP cadena:=cadena || SubStr('hola',i,1); END LOOP; Dbms_Output.put_line(la cadena al revs es:||cadena); END; la cadena al revs es:aloh Caso 2: DECLARE cadena VARCHAR2(10); tam NUMBER; BEGIN tam:=Length('hola'); WHILE tam>=1 LOOP cadena:=cadena || SubStr('hola',tam,1); tam:=tam-1; END LOOP; Dbms_Output.put_line('la cadena al revs es: '|| cadena); END;

EJERCICIOS PROPUESTOS
1. Escribir un procedimiento que reciba 2 nmeros y visualice la suma. 2. Realizar un procedimiento que reciba una cadena y la muestre al revs. 3. Escribir un procedimiento que reciba una fecha y la visualice del siguiente modo, ejemplo: mircoles, 25 de junio de 2003 . 4. Escribir el bloque pl/sql que haga uso de la funcin anterior. 5. Escribir una funcin que, devuelva los trienios que hay entre dos fechas. Pista:

TRUNC(anios_dif(fecha1,fecha2) / 3
6. Codificar un procedimiento que reciba una lista de hasta 5 nmeros y visualice su suma. 7. Escribir una funcin que devuelva solamente caracteres alfabticos sustituyendo cualquier otro carcter por blancos a partir de una cadena que se pasar en la llamada. 8. Codificar un procedimiento que permita borrar un empleado cuyo nmero se pasar en la llamada.

También podría gustarte