Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
ORACLE 9i y 10g.
Nuevas funcionalidades
para desarrolladores de
ORACLE 9i y 10g.
1 de 79
Nuevas funcionalidades para desarrolladores de
ORACLE 9i y 10g.
Índice.
1. Mejoras en PL/SQL y SQL......................................................................................3
a. Mejoras en SQL.................................................................................................3
i. Mejoras incorporadas en la 9i.........................................................................3
ii. Mejoras incorporadas en la 10g......................................................................6
iii. Encriptación....................................................................................................7
b. Mejoras en PL/SQL............................................................................................8
i. Mejoras incorporadas en la 9i.........................................................................8
ii. Mejoras incorporadas en la 10g....................................................................10
c. La papelera de reciclaje:...................................................................................11
d. XML..................................................................................................................12
i. Conceptos básicos de XML...........................................................................12
e. JAVA en ORACLE............................................................................................15
i. Conceptos básicos de JAVA..........................................................................15
ii. Procedimientos almacenados JAVA..............................................................16
iii. Creación de objetos JAVA.............................................................................16
iv. JDBC.............................................................................................................16
v. SQLJ.............................................................................................................18
2. Instalación de Oracle Developer Suite 10g (10.1.2.0.2) para Windows...............20
3. Forms Builder. Diferencias entre las versiones 6i y 10g........................................29
a. Diferencias en el Navegador de Objetos:.........................................................29
b. Diferencias en el Editor de Informes:................................................................30
c. Diferencias en las Propiedades:.......................................................................31
d. Propiedades que cambian de 6i a 10g:............................................................32
e. Diferencias en las Paquetes incorporados, constantes y disparadores:...........33
f. Diferencias en el Editor PL/SQL:......................................................................37
g. Procedimientos................................................................................................38
h. Árbol jerárquico................................................................................................43
i. JAVA en Forms Developer................................................................................46
i. Entorno..........................................................................................................46
ii. Usando JAVA en Developer...........................................................................47
j. ANEXO A. Herramientas de migración.............................................................62
4. Report Builder. Diferencias entre las versiones 6i y 10g.......................................63
a. Diferencias en el Navegador de Objetos:.........................................................63
b. Diferencias en el Editor de Diseño:..................................................................66
c. Orígenes de datos:...........................................................................................69
d. Diferencias en las Propiedades:.......................................................................72
e. Plantillas........................................................................................................... 73
f. JSP con Developer Report 10g........................................................................76
i. Conceptos Básicos........................................................................................76
ii. reports_tld.jar................................................................................................78
2 de 79
Nuevas funcionalidades para desarrolladores de
ORACLE 9i y 10g.
ALTER TABLE
Se puede renombrar columnas de una tabla:
ALTER TABLE nombre_de_tabla
RENAME COLUMN nombre_columna TO nuevo_ nombre_columna
Las operaciones que se pueden hacer con los intervalos pueden ser:
Operando 1 Operador Operando 2 Resultado
Datetime + Intervalo Datetime
Datetime - Intervalo Datetime
Intervalo + Datetime Datetime
Datetime - Datetime Intervalo (No Datetime)
Intervalo + Intervalo Intervalo
Intervalo - Intervalo Intervalo
Intervalo * Numerico Intervalo
Numerico * Intervalo Intervalo
Intervalo / Numerico Intervalo
3 de 79
Nuevas funcionalidades para desarrolladores de
ORACLE 9i y 10g.
Mejoras en SELECT:
CASE:
CASE CAMPO
WHEN expresión THEN varlor de retorno […]
[ ELSE varlor de retorno ]
END
COALESCE:
COALESCE (campo|expresión [,…])
Si el primer campo|expresión es NULL, devuelve el siguiente, y así sucesivamente.
NULLIF:
NULLIF(expresión, expresion2)
Compara las expresiones, y si son iguales, devuelve NULL.
CURSOR:
CURSOR(‘consulta’), devuelve un refCursor
4 de 79
Nuevas funcionalidades para desarrolladores de
ORACLE 9i y 10g.
IS OF
Expressión IS [NOT] OF [TYPE] ([ONLY] TIPO)
Cierto si la expresión es del mismo tipo que TIPO
Joins:
Referencia_tabla1 Tipo_join JOIN Referencia_tabla2
{ON condición | USING (columna [,…])}
ó
Referencia_tabla1 {CROSS | NATURAL Tipo_join } JOIN Referencia_tabla2
SELECT jerárquicos:
SYS_CONNECT_BY_PATH(campo,’carácter’)
Concatena los niveles por ‘carácter’
5 de 79
Nuevas funcionalidades para desarrolladores de
ORACLE 9i y 10g.
SELECT jerárquicos:
CONNECT_BY_ROOT campo
Muestra el raiz, el padre de la rama de la consulta
CONNECT_BY_ISCYCLE campo
Indica 1 si es un elemento que se enlaza a si mismo
CONNECT_BY_ISLEAF campo
Indica 1 si es una hoja, es decir, no es elemento raíz
Expresiones regulares:
Operador Descripción
[caracteres] Indicamos que debe de ser uno de los caracteres indicados. Se
pueden usar rangos, [a-m] letras de a a m.
[^caracteres Indicamos que NO es uno de los caracteres indicados.
]
[:alnum:] Caracteres de tipo alfanumérico, igual que [0-9A-Za-z
[:alpha:] Caracteres de tipo alfabético.
[:digit:] Caracteres de tipo dígito.
[:lower:] Carácter inicial de tipo alfabético, y en minúsculas.
[:space:] Carácter espacio.
[:upper:] Carácter inicial de tipo alfabético, y en mayúsculas.
^ Inicio de línea.
$ Final de línea.
. Cualquier carácter.
? Uno o ningún carácter.
\símbolo Si quiero buscar líneas que contengan | o $ o + etc.
\n Indica un campo n. Se usa en las sustituciones. Los campos se
indican con (expresión)
r1|r2 O r1 ó r2.
r+ De una a más concurrencias de r.
r* De cero a más concurrencias de r.
r? De cero a una concurrencia de r.
r{n} n concurrencias consecutivas de r.
r{n,} n o menos concurrencias consecutivas de r.
r{n,m} entre n y m concurrencias consecutivas de r.
6 de 79
Nuevas funcionalidades para desarrolladores de
ORACLE 9i y 10g.
parámetros de búsqueda:
i Insensible a mayúsculas y minúsculas.
c Sensible a mayúsculas y minúsculas.
m Indica que la expresión se compone de múltiples líneas
x Ignora los espacios en blanco
REGEXP_REPLACE
REGEXP_REPLACE (expresión, ‘expresión regular’, ‘cadena que reemplaza’ [,
inicio] [, ocurrencias] [, parámetros de búsqueda]
Sustituye en la expresión, la ‘expresión regular’ por ‘cadena que reemplaza’, según
inicio, ocurrencias y parámetros de búsqueda.
Se pueden usar los campos “\n”.
REGEXP_SUBSTR
REGEXP_SUBSTR (expresión, ‘expresión regular’, [, inicio] [, ocurrencias] [,
parámetros de búsqueda]
Devuelve una subcadena que cumple la ‘expresión regular’, según inicio,
ocurrencias y parámetros de búsqueda.
REGEXP_LIKE
REGEXP_LIKE (expresión, ‘expresión regular’ [, parámetros de búsqueda]
Devuelve True si la expresión cumple la ‘expresión regular’.
Mejoras en SELECT:
IS NAN|INFINITE
Devuelve true si la expresión no es un número o ±INF.
IS EMPTY
Expresión IS [NOT] EMPTY
Devuelve true si la expresión está vacia. El NULL lo considera como valor.
iii. Encriptación
Se puede indicar al ORACLE que una columna de una tabla encripte su valores de
forma transparente al usuario final. Se indica como una restricción, usando la sintaxis:
Definición de columna ENCRYPT [ USING ’{3DES168 | AES128 | AES192 | AES256 }
’] [ IDENTIFIED BY contraseña] [ [NO] SALT]
7 de 79
Nuevas funcionalidades para desarrolladores de
ORACLE 9i y 10g.
b. Mejoras en PL/SQL.
i. Mejoras incorporadas en la 9i
Arrays asociativos.
Son como los hash de perl, es decir, el índice de la tabla no es un número, sino unas
claves.
TYPE tipo_tabla IS TABLE OF NUMBER INDEX BY VARCHAR2(N);
CASE.
Como expression:
Vble := CASE selector
{WHEN expresion1 THEN resultado1;} [WHEN …]
[ELSE resultadoN+1]
END;
Como instrucción:
CASE
{ WHEN expresión booleana THEN {comandos;} [WHEN …]
[ELSE {comandos;}... ]
END CASE
8 de 79
Nuevas funcionalidades para desarrolladores de
ORACLE 9i y 10g.
EXECUTE IMMEDIATE
EXECUTE IMMEDIATE ‘CADENA’ [INTO VBLE [,…]|REGISTRO]
[USING [[{IN|OUT|IN OUT}] VBLE [,…]]
[{RETURN|RETURNING} INTO VBLE [,…]]
Ejecuta el comando especificado en ‘CADENA’. Si el comando es del tipo ‘… INTO …’,
se usa INTO para indicar a donde se guarda la información, no confundir con RETURN o
RETURNING, ya que esto indica donde se guarda la información cuando se usa
RETURNING en las instrucciones DML. Si se quiere usar parámetros dentro del
comando especificado en la ‘CADENA’, se indican sus valores en USING.
BULK COLLECT
En los comandos que usen INTO (SELECT, FETCH ó cláusula RETURNING ), se puede usar
la cláusula BULK COLLECT, que indica que los datos se guardan en una elemento de tipo
TABLE. No lanza la excepción NO_DATA_FOUND
FORALL
Es igual al FOR, pero es mucho más rápido que el FOR clásico, cuando en el cuerpo
del bucle se encuentran comandos DML. Se puede usar la variable SQL
%BULK_ROWCOUNT(I), que indica las filas afectadas en la I vuelta del bucle.
9 de 79
Nuevas funcionalidades para desarrolladores de
ORACLE 9i y 10g.
FORALL
Se puede usar el record %BULK_EXCEPTIONS(I), con los campos ERROR_INDEX y
ERROR_CODE que indica el error DML en la I vuelta del bucle.
Conditional Compilation
Podemos usar directivas que controlan el comportamiento del preprocesador, de forma
que este puede ignorar o compilar determinadas líneas del código PL/SQL en función
de ciertas condiciones que son evaluadas durante el preproceso. Para ello tenemos la
siguiente directiva:
$IF expresión Booleana $THEN texto
[ $ELSIF expresión Booleana $THEN texto ]
[ $ELSE texto ]
$END
En expresión Booleana podemos usar:
$$PLSQL_LINE Devuelve la línea del código PL/SQL
DBMS_DB_VERSION.{VER_LE_9 | VER_LE_9_1 | VER_LE_9_2 | VER_LE_10
| VER_LE_10_1 | VER_LE_10_2} Devuelve TRUE si la versión de ORACLE
corresponde con VER_LE_XX
DBMS_DB_VERSION.VERSION Devuelve el número de versión de ORACLE.
10 de 79
Nuevas funcionalidades para desarrolladores de
ORACLE 9i y 10g.
c. La papelera de reciclaje:
Las nuevas versiones de ORACLE, nos proporcionan una especie de papelera de
reciclaje
FLASHBACK TABLE
Con FLASHBACK TABLE indicamos que la tabla se recupere de la papelera de
reciclaje cuando se borra (BEFORE DROP) o que se recuperen los cambios que se
producen con DML (SCN | TIMESTAMP …| RESTORE POINT). Para esto último tenemos
que habilitar en la tabla la propiedad ROW MOVEMENT (ALTER TABLE tabla ENABLE
ROW MOVEMENT)
FLASHBACK TABLE tabla TO { {{SCN | TIMESTAMP} expr
| RESTORE POINT punto_restauración}
[ { ENABLE | DISABLE} TRIGGERS ] }
| BEFORE DROP [ RENAME TO tabla] };
Si queremos ver los valores antiguos de las filas que han sido manipuladas con DML,
podemos usar en el SELECT la cláusula AS OF:
[ VERSIONS BETWEEN { SCN | TIMESTAMP} { expr | MINVALUE } AND
{expr | MAXVALUE }]
AS OF {SCN | TIMESTAMP} expr
PURGE
Con PURGE manipulamos la papelera. La opción RECYCLEBIN vaciara la papelera
completamente del usuario.
PURGE {TABLE tabla | INDEX índice | RECYCLEBIN };
PURGE es también un parametro del comando DROP, he indica que el objeto que se
va a eliminar no se almacene en la papelera (si previamente se ha usado con ella el
comando FLASHBACK TABLE). Un ejemplo:
DROP TABLE nombre_tabla PURGE;
11 de 79
Nuevas funcionalidades para desarrolladores de
ORACLE 9i y 10g.
d. XML.
i. Conceptos básicos de XML
(wikipedia)XML, sigla en inglés de eXtensible Markup Language («lenguaje de marcas
extensible»), es un metalenguaje extensible de etiquetas desarrollado por el World
Wide Web Consortium (W3C). Es una simplificación y adaptación del SGML y permite
definir la gramática de lenguajes específicos (de la misma manera que HTML es a su
vez un lenguaje definido por SGML). Por lo tanto XML no es realmente un lenguaje en
particular, sino una manera de definir lenguajes para diferentes necesidades. Algunos
de estos lenguajes que usan XML para su definición son XHTML, SVG, MathML.
XML no ha nacido sólo para su aplicación en Internet, sino que se propone como un
estándar para el intercambio de información estructurada entre diferentes plataformas.
Se puede usar en bases de datos, editores de texto, hojas de cálculo y casi cualquier
cosa imaginable.
XML es una tecnología sencilla que tiene a su alrededor otras que la complementan y
la hacen mucho más grande y con unas posibilidades mucho mayores. Tiene un papel
muy importante en la actualidad ya que permite la compatibilidad entre sistemas para
compartir la información de una manera segura, fiable y fácil.
Validez
Que un documento sea "bien formado" solamente habla de su estructura sintáctica
básica, es decir que se componga de elementos, atributos y comentarios como XML
manda que se escriban. Ahora bien, cada aplicación de XML, es decir cada lenguaje
12 de 79
Nuevas funcionalidades para desarrolladores de
ORACLE 9i y 10g.
13 de 79
Nuevas funcionalidades para desarrolladores de
ORACLE 9i y 10g.
en la API estándar de facto para usar XML en JAVA. Existen versiones de SAX
no sólo para JAVA, si no también para otros lenguajes de programación.
DOM Document Object Model (en español ‘Modelo de Objetos de Documento’),
frecuentemente abreviado DOM, es una forma de representar los elementos de
un documento estructurado (tal como una página web HTML o un documento
XML) como objetos que tienen sus propios métodos y propiedades. El
responsable del DOM es el World Wide Web Consortium (W3C).
XML y ORACLE
Desde Oracle9i release 1 (9.0.1) se ha creado un nuevo tipo de dato, XMLType, que
facilita el manejo de documentos XML.
Anteriormente, se usaba un CLOB, VARCHAR, etc. para guardar documentos XML en
la base de datos. Los paquetes más importantes para el uso de XML en ORACLE son:
Paquete DBMS_XMLDOM. Este paquete nos proporciona lo necesario para
usar Document Object Model (DOM).
Paquete DBMS_XMLSTORE. Este paquete nos proporciona herramientas para
poder convertir un documento XML a información relacional, es decir, a
información que se puede guardar en la base de datos.
Paquete DBMS_XMLPARSER. Este paquete nos proporciona lo necesario
para comprobar si un documento XML es valido y está bien formado.
Paquete DBMS_XMLGEN. Este paquete nos proporciona herramientas para
poder generar documentos XML a partir de datos de la base de datos, es
similar al paquete DBMS_XMLQUERY.
14 de 79
Nuevas funcionalidades para desarrolladores de
ORACLE 9i y 10g.
e. JAVA en ORACLE.
i. Conceptos básicos de JAVA.
(wikipedia)JAVA es un lenguaje orientado a objetos (clases). Es muy parecido a C++.
Los programas en Java son compilados a un lenguaje intermedio llamado bytecode,
que luego son interpretados por una máquina virtual (JVM). Esta última sirve como una
plataforma de abstracción entre la máquina y el lenguaje permitiendo que se pueda
"escribir el programa una vez, y correrlo en cualquier lado".
Clases
Son declaraciones o abstracciones de objetos, es decir, es la definición de un objeto,
con sus atributos y métodos.
Clases abstractas
Sirven para declarar un interfaz común a un conjunto de clases. Los métodos sólo se
declaran, no se implementan, de ello se encargarán las clases hijas.
Se declaran con abstract. No se pueden instanciar. Al menos un método de la clase es
abstracto.
Interfaces
Es parecido a las clases abstractas. Pero la mayor diferencia radica que una clase
puede “heredar” de varias interfaces.
Herencia en JAVA.
No existe la herencia múltiple como en C++, solo se puede heredar de una sola clase.
Las clases de java, son siempre descendientes de forma implícita, de la clase Object.
Para indicar que una clase hereda de otra (abstracta o normal), se usa la palabra clave
extends.
Cuando se “hereda” de un interfaz, se usa la palabra clave implements. Se pueden
implementar uno o varios interfaces.
Paquetes
Son agrupaciones de clases e interfaces comunes. Si declaro una clase dentro del
paquete demo.oracle.conexion, llamada validar, esa clase se encuentra en
$CLASS_PATH/demo/oracle/conexión. Cuidado con las mayúsculas, aunque
estemos en entornos Windows.
Bean.
Un Bean es un componente software que tiene la particularidad de ser reutilizable y
así evitar la tediosa tarea de programar los distintos componentes uno a uno. Se
puede decir que existen con la finalidad de ahorrarnos tiempo al programar. Es el caso
de la mayoría de componentes que manejan los editores visuales más comunes. Bean
viene del inglés "fríjol", y su idea principal es que se reaprovechan "frijoles" que ya han
sido creados por otros desarrolladores. Sabiendo esto, un Bean puede representar
desde un botón, un grid de resultados, un panel contenedor o un simple campo de
texto, hasta otras soluciones mucho más complejas como conexiones a bases de
datos, etc.
15 de 79
Nuevas funcionalidades para desarrolladores de
ORACLE 9i y 10g.
ALTER JAVA SOURCE identificador_objeto COMPILE
iv. JDBC
(wikipedia)JDBC es el acrónimo de Java Database Connectivity, un API que permite la
ejecución de operaciones sobre bases de datos desde Java, independientemente del
sistema de operación donde se ejecute o de la base de datos a la cual se accede
utilizando el SQL de la base de datos que se utilice.
El API JDBC se presenta como una colección de interfaces Java y métodos de gestión
de manejadores de conexión hacia cada modelo específico de base de datos. Un
manejador de conexiones hacia un modelo de base de datos en particular es un
conjunto de clases que implementan las interfaces Java y que utilizan los métodos de
registro para declarar los tipos de localizadores a base de datos (URL) que pueden
manejar. Para utilizar una base de datos particular, el usuario ejecuta su programa
junto con la librería de conexión apropiada al modelo de su base de datos, y accede a
ella estableciendo una conexión, para ello provee en localizador a la base de datos y
los parámetros de conexión específicos. A partir de allí puede realizar cualquier tipo de
tareas con la base de datos a las que tenga permiso: consultas, actualizaciones,
creado modificado y borrado de tablas, ejecución de procedimientos almacenados en
la base de datos, etc.
16 de 79
Nuevas funcionalidades para desarrolladores de
ORACLE 9i y 10g.
Tipos JDBC:
Bridge ( tipo 1 ) JDBC-ODBC tecnología de puente. Una mezcla de código
Java y software dependiente del sistema operativo, con el que JDBC accede a
una base de datos mediante ODBC.
Native ( tipo 2 ) Ejecutables dependientes del sistema operativo y Java. Una
mezcla de código Java y software dependiente del sistema operativo con el
que JDBC accede a la base de datos a través de código propietario del
proveedor de la base de datos.
Network (tipo 3 ) Middleware de Red y Java. Una mezcla de código Java y
código basado en un servidor donde el JDBC accede a la base de datos a
través de un middleware.
Thin ( tipo 4 ) 100% Java. Un controlador Java puro que no requiere de código
dependiente del sistema operativo, lo que hace al controlador 100% portable.
El controlador Java depende de la base de datos a la cual queremos acceder.
Un ejemplo:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.SQLException;
public class JdbcTest {
public static void main (String args []) throws SQLException {
// Cargar Oracle driver
DriverManager.registerDriver (new oracle.jdbc.OracleDriver());
// Conectar a oracle
Connection conn = DriverManager.getConnection
("jdbc:oracle:thin:@ host:puerto:sid","usuario", "password");
// Cargar empleados
Statement stmt = conn.createStatement ();
ResultSet rset = stmt.executeQuery ("SELECT ename FROM emp");
// Recorres y mostrar resultados
while (rset.next ())
System.out.println (rset.getString (1));
//cerrar recordset, statement y conexion
rset.close();
stmt.close();
conn.close();
}
}
17 de 79
Nuevas funcionalidades para desarrolladores de
ORACLE 9i y 10g.
v. SQLJ
(wikipedia)SQLJ es un estándard ISO (ISO/IEC 9075-10) para embeber sentencias
SQL en programas de Java. Al contrario que JDBC, SQLJ no es una API sino una
extensión del lenguaje. Así, los programas SQLJ deben ejecutarse a través de un
preprocesador (el traductor SQLJ) antes de que puedan ser compilados.
18 de 79
Nuevas funcionalidades para desarrolladores de
ORACLE 9i y 10g.
Un ejemplo:
import sqlj.runtime.*;
import sqlj.runtime.ref.*;
import java.sql.*;
#sql iterator TabIter (String);
public class SQLJTst {
public static void main(String[] args) {
Connection c = null;
try {
// Cargar Oracle driver
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
c = DriverManager.getConnection("jdbc:oracle:thin:@host:puerto:sid",
"usuario", "passwdord");
System.out.println("Conectando a Oracle...");
DefaultContext.setDefaultContext( new DefaultContext(c));
//Cargar empleados
TabIter tabIter;
#sql tabIter = { select ename from emp };
// Recorres y mostrar resultados
while (true) {
String dBTabName = null;
#sql { fetch :tabIter into :dBTabName};
if ( tabIter.endFetch() ) break;
System.out.println("Name: " + dBTabName);
}
//cerrar recordset, statement y conexion
#sql { commit work };
#sql { rollback work };
c.close();
System.out.println("Desconectando...");
} catch (SQLException e) {
e.printStackTrace();
}
}
}
19 de 79
Nuevas funcionalidades para desarrolladores de
ORACLE 9i y 10g.
Figura 1
Figura 2
20 de 79
Nuevas funcionalidades para desarrolladores de
ORACLE 9i y 10g.
Figura 3
21 de 79
Nuevas funcionalidades para desarrolladores de
ORACLE 9i y 10g.
En la Figura 4 indicamos la ruta de Origen de los productos a instalar (No hace falta
cambiarlo), y el Destino donde se instala el producto. El Nombre es una descripción
del HOME de instalación, que utiliza el Oracle Universal Installer para distinguir entre
los distintos productos instalados en el equipo. Como es una instalación nueva, le
ponemos una nueva descripción.
Figura 4
22 de 79
Nuevas funcionalidades para desarrolladores de
ORACLE 9i y 10g.
En la Figura 5 nos pregunta que tipo de instalación deseamos hacer. Podemos escoger
las siguientes instalaciones:
1. Desarrollo J2EE. Esta opción nos instala el JDeveloper
principalmente. Ocupa aproximadamente 800 Mb.
2. Terminar Esta opción nos instala los productos JDeveloper, Forms
Reports y Designer (Toda la suite). Ocupa aproximadamente 1250
Mb.
Figura 5
23 de 79
Nuevas funcionalidades para desarrolladores de
ORACLE 9i y 10g.
En la Figura 6 nos pregunta el servidor del correo saliente para la distribución de los
reports vía email.
Figura 6
24 de 79
Nuevas funcionalidades para desarrolladores de
ORACLE 9i y 10g.
En la Figura 7 nos muestra un resumen de los productos que nos va a instalar. Pulsamos
Instalar, y nos aparecerá la Figura 8.
Figura 7
25 de 79
Nuevas funcionalidades para desarrolladores de
ORACLE 9i y 10g.
Figura 8
Puede ocurrir un error si la longitud del PATH es superior a 1023 caracteres. Si da
dicho error, modificar el PATH del sistema, y Reintentar la instalación.
Figura 9
En la Figura 10 nos
muestra la
ejecución del
asistente del
Net8, lo dejamos
que acabe, ya
que después
pondremos los
ficheros
tnsnames.ora y
sqlnet.ora
adecuados
26 de 79
Nuevas funcionalidades para desarrolladores de
ORACLE 9i y 10g.
Figura 10
27 de 79
Nuevas funcionalidades para desarrolladores de
ORACLE 9i y 10g.
Figura 11
Recomendaciones
No se pueden usar nombres de directorios con espacios en blanco para las
fuentes (Cosas de JAVA).
Las páginas previas que llaman a los servlets de java se guardan en
C:\WINDOWS\Temp\*.Nhtm.(9i) Hay que tener cuidado con ellas, ya que se
guarda información sensible, referente a usuario y password.
No se pueden usar rutas absolutas (C:\....) en los enlaces con las librerías, sólo
UNC o NetBIOS (\\servidor\....).
28 de 79
Nuevas funcionalidades para desarrolladores de
ORACLE 9i y 10g.
29 de 79
Nuevas funcionalidades para desarrolladores de
ORACLE 9i y 10g.
30 de 79
Nuevas funcionalidades para desarrolladores de
ORACLE 9i y 10g.
Las diferencias son mínimas en el entorno visual. Solo destacar, que el la caja de
herramientas de la 10g no encontraremos ninguna referencia a objetos OCX y OLE.
10i (Propiedades):
Las diferencias son el los iconos que se utilizan, pero son exactamente iguales en su
funcionalidad.
31 de 79
Nuevas funcionalidades para desarrolladores de
ORACLE 9i y 10g.
32 de 79
Nuevas funcionalidades para desarrolladores de
ORACLE 9i y 10g.
Procedimientos y funciones:
APPLICATION_MENU No migrado o reemplazado funcionalidad
APPLICATION_PARAMETER No migrado o reemplazado funcionalidad
(Usar :GLOBAL)
BACKGROUND_MENU<N> No migrado o reemplazado funcionalidad
DEBUG_MODE No migrado o reemplazado funcionalidad
DISABLE_ITEM Usar SET_MENU_ITEM_PROPERTY()
ENABLE_ITEM Usar SET_MENU_ITEM_PROPERTY()
EXIT_MENU No migrado o reemplazado funcionalidad
HIDE_MENU No migrado o reemplazado funcionalidad
ITEM_ENABLED Usar
GET_MENU_ITEM_PROPERTY(<name>,
ENABLED). En futuras versiones no se
migrará
MAIN_MENU No migrado o reemplazado funcionalidad
MENU_CLEAR_FIELD Usar CLEAR_ITEM
MENU_FAILURE Usar FORM_FAILURE flag.
MENU_HELP No migrado o reemplazado funcionalidad
MENU_MESSAGE Usar MESSAGE
MENU_NEXT_FIELD Usar NEXT_ITEM
MENU_PARAMETER No migrado o reemplazado funcionalidad
(Usar :GLOBAL)
MENU_PREVIOUS_FIELD Usar PREVIOUS_ITEM
MENU_REDISPLAY No migrado o reemplazado funcionalidad
MENU_SHOW_KEYS Usar SHOW_KEYS
MENU_SUCCESS Usar FORM_SUCCESS flag
NEW_APPLICATION No migrado o reemplazado funcionalidad
NEW_USER Usar LOGOUT o LOGON
NEXT_MENU_ITEM No migrado o reemplazado funcionalidad
OS_COMMAND Usar HOST
OS_COMMAND1 Usar HOST
PREVIOUS_MENU No migrado o reemplazado funcionalidad
PREVIOUS_MENU_ITEM No migrado o reemplazado funcionalidad
QUERY_PARAMETER No migrado o reemplazado funcionalidad
(Usar :GLOBAL)
SET_INPUT_FOCUS No migrado o reemplazado funcionalidad
SHOW_BACKGROUND_MENU No migrado o reemplazado funcionalidad
SHOW_MENU No migrado o reemplazado funcionalidad
TERMINATE No migrado o reemplazado funcionalidad
(Usar :GLOBAL)
WHERE_DISPLAY No migrado o reemplazado funcionalidad
BLOCK_MENU No migrado o reemplazado funcionalidad
(KEY-MENU)
BREAK Migrar a DEBUG.SUSPEND
CALL Usar CALL_FORM
CHANGE_ALERT_MESSAGE Usar
SET_ALERT_PROPERTY(...,ALERT_MESSA
33 de 79
Nuevas funcionalidades para desarrolladores de
ORACLE 9i y 10g.
GE_TEXT,..);
DISPATCH_EVENT No migrado o reemplazado funcionalidad
(Usados en OCX)
(FORMS_OLE.)ACTIVATE_SERVER No migrado o reemplazado funcionalidad
(FORMS_OLE.)CLOSE_SERVER (Usados en OCX)
(FORMS_OLE.)EXEC_VERB
(FORMS_OLE.)FIND_OLE_VERB
(FORMS_OLE.)GET_INTERFACE_POINTER
(FORMS_OLE.)GET_VERB_COUNT
(FORMS_OLE.)GET_VERB_NAME
(FORMS_OLE.)INITIALIZE_CONTAINER
(FORMS_OLE.)SERVER_ACTIVE
MACRO No migrado o reemplazado funcionalidad
OHOST Usar HOST
PLAY_SOUND No migrado o reemplazado funcionalidad
READ_SOUND_FILE (Sonido)
WRITE_SOUND_FILE
ROLLBACK_FORM Usar CLEAR_FORM(NO_COMMIT,FULL_
ROLLBACK_NR ROLLBACK)
ROLLBACK_RL
ROLLBACK_SV
RUN_PRODUCT Valido únicamente para integrar con Oracle
Graphics,
use RUN_REPORT_OBJECT o
WEB.SHOW_DOCUMENT para Oracle
Reports. Para otros usos dará un error en
tiempo de ejecución
34 de 79
Nuevas funcionalidades para desarrolladores de
ORACLE 9i y 10g.
35 de 79
Nuevas funcionalidades para desarrolladores de
ORACLE 9i y 10g.
Constantes:
DATE_FORMAT_COMPATIBILITY mode Usado por GET_APPLICATION y SET_
APPLICATION. La constante es ignorada.
POPUPMENU_CUT_ITEM No migrado o reemplazado funcionalidad
POPUPMENU_COPY_ITEM (Usados en OCX)
POPUPMENU_DELOBJ_ITEM
POPUPMENU_INSOBJ_ITEM
POPUPMENU_LINKS_ITEM
POPUPMENU_OBJECT_ITEM
POPUPMENU_PASTE_ITEM
POPUPMENU_PASTESPEC_ITEM
SHOW_POPUPMENU
COMPRESSION_OFF No migrado o reemplazado funcionalidad
COMPRESSION_ON (Sonido)
HIGHEST_SOUND_QUALITY
HIGH_SOUND_QUALITY
LOW_SOUND_QUALITY
LOWEST_SOUND_QUALITY
MEDIUM_SOUND_QUALITY
MONOPHONIC
ORIGINAL_QUALITY
ORIGINAL_SETTING
SHOW_FAST_FORWARD_BUTTON
SHOW_PLAY_BUTTON
SHOW_RECORD_BUTTON
SHOW_REWIND_BUTTON
SHOW_SLIDER
SHOW_TIME_INDICATOR
SHOW_VOLUME_CONTROL
STEREOPHONIC
Síntaxis
NAME_IN() Usar & para las referencias indirectas
36 de 79
Nuevas funcionalidades para desarrolladores de
ORACLE 9i y 10g.
En vez de botones, usa iconos, añadiendo los de sangría. Se ha traducido Menu item
code por Código de Opción de Menú. Se han eliminado los botones de Nuevo… y
Borrar.
37 de 79
Nuevas funcionalidades para desarrolladores de
ORACLE 9i y 10g.
g. Procedimientos
Si se usa el asistente de bloque de datos, nos da a elegir entre 2 opciones:
38 de 79
Nuevas funcionalidades para desarrolladores de
ORACLE 9i y 10g.
39 de 79
Nuevas funcionalidades para desarrolladores de
ORACLE 9i y 10g.
40 de 79
Nuevas funcionalidades para desarrolladores de
ORACLE 9i y 10g.
A continuación, muestro las pantallas del asistente para poder usar los procedimientos
antes explicados:
41 de 79
Nuevas funcionalidades para desarrolladores de
ORACLE 9i y 10g.
Los procedimientos que no son de consulta, el forms genera triggers para cada uno de
ellos. En este ejemplo, genera el triggers DELETE_ PROCEDURE y
LOCK_PROCEDURE. Estos triggers NO se han de modificar, ya que son
automáticamente generados por el Forms
42 de 79
Nuevas funcionalidades para desarrolladores de
ORACLE 9i y 10g.
h. Árbol jerárquico.
Los árboles jerárquicos (hierarchical tree) nos muestran información de forma
ordenada por niveles, parecido a una jerarquía de directorios.
Los árboles deben estar en bloques de una sola fila y un solo elemento.
Para este ejemplo he creado la tabla:
create table jerarquia
(identificador number(4),
nombre varchar2(15),
depende number(4));
Con los datos:
insert into jerarquia
select * from
(select deptno as identificador,
dname as nombre ,
0 as depende from dept
union
select empno as identificador ,
ename as nombre,
deptno as depende from emp);
El PL/SQL para poder rellenar el árbol jerárquico (en este ejemplo se ve como
rellenarlo de tres maneras) es (se crea en el disparador: WHEN-NEW-FORM-
INSTANCE):
declare
nododepartamento ftree.node;
nodoempleado ftree.node;
n_departamento number;
retorno_populate_group number;
cursor departamento is
select dname, deptno from dept
order by dname;
43 de 79
Nuevas funcionalidades para desarrolladores de
ORACLE 9i y 10g.
cursor empleados is
select ename from emp
where deptno = n_departamento
order by ename;
--la consulta base para el grupo de registros,
--como para el data query del árbol es:
--select -1, level, nombre, null ,depende
--from jerarquia
--start with depende = 0
--connect by prior identificador=depende
begin
--relleno de un árbol jerarquico
--usando programación
for r_departamento in departamento loop
nododepartamento := ftree.add_tree_node('bloque.arbol',
ftree.root_node, ftree.parent_offset, ftree.last_child,
ftree.leaf_node,r_departamento.dname, 'computer',
r_departamento.dname);
44 de 79
Nuevas funcionalidades para desarrolladores de
ORACLE 9i y 10g.
n_departamento := r_departamento.deptno;
for r_empleado in empleados loop
nodoempleado := ftree.add_tree_node('bloque.arbol',
nododepartamento, ftree.parent_offset,
ftree.last_child, ftree.leaf_node,
r_empleado.ename, null, r_empleado.ename);
end loop;
end loop;
45 de 79
Nuevas funcionalidades para desarrolladores de
ORACLE 9i y 10g.
i. Entorno.
Versiones JAVA:
En la 6i nos encontramos el problema de la versión de JAVA, ya que le hace
falta una versión superior a la 1.2.2, además, hay que tener cuidado con la DLL
de JDK symcjit.dll. El error que muestra en caso de no haber tenido en cuenta
las explicaciones anteriores es:
Registro:
En 6i hay que crear, si no lo están, los valores del tipo “valor de cadena
expandible”:
o FORMS60_JAVADIR = ORACLE_HOME\FORMS60\java;
o ORACLE_JDK = ORACLE_HOME\JDK;
46 de 79
Nuevas funcionalidades para desarrolladores de
ORACLE 9i y 10g.
47 de 79
Nuevas funcionalidades para desarrolladores de
ORACLE 9i y 10g.
48 de 79
Nuevas funcionalidades para desarrolladores de
ORACLE 9i y 10g.
49 de 79
Nuevas funcionalidades para desarrolladores de
ORACLE 9i y 10g.
50 de 79
Nuevas funcionalidades para desarrolladores de
ORACLE 9i y 10g.
51 de 79
Nuevas funcionalidades para desarrolladores de
ORACLE 9i y 10g.
52 de 79
Nuevas funcionalidades para desarrolladores de
ORACLE 9i y 10g.
import oracle.forms.ui.*;
import oracle.forms.handler.IHandler;
import oracle.forms.properties.ID;
import oracle.forms.engine.*;
import java.awt.event.*;
import java.util.StringTokenizer;
public KeyFilter() {
super();
try {
jbInit();
}
catch (Exception e) {
e.printStackTrace();
}
}
53 de 79
Nuevas funcionalidades para desarrolladores de
ORACLE 9i y 10g.
addKeyListener(new KeyPressAdapter());
}
54 de 79
Nuevas funcionalidades para desarrolladores de
ORACLE 9i y 10g.
FilterState = 4;
for (int i = 0; i <= 3;i++)
{
if (PropValue.toUpperCase().compareTo(FilterNames[i]) == 0)
{
FilterState = i;
break;
}
}
return true;
}
else if (pid == CUSTOMFILTER)
{
if ((value.toString().equals("false")) && (value.hashCode() ==
1237))
{
System.out.println("Null custom Filter");
CustomFilterSet = false;
}
else
{
FilterArrays[CUSTOM_FILTER] = value.toString();
CustomFilterSet = true;
}
return true;
}
else
{
return super.setProperty(pid, value);
}
}
class KeyPressAdapter
extends KeyAdapter
{
public void keyPressed(KeyEvent e)
{
String ThisToken;
SavedKeyCode = e.getKeyCode();
StringTokenizer stMain = new
StringTokenizer(e.paramString(),",");
stMain.nextToken();
stMain.nextToken();
ThisToken = stMain.nextToken();
if (ThisToken.indexOf('=') > 0)
{
FilterChar = e.getKeyChar();
SavedKeyChar = "" + FilterChar;
if (FilterChar == 0) // If a modifier is pressed on it's own
{
SavedKeyChar = "{Modifier}";
}
}
else
{
FilterChar = 0;
SavedKeyChar = "{" + ThisToken + "}";
55 de 79
Nuevas funcionalidades para desarrolladores de
ORACLE 9i y 10g.
}
if (stMain.hasMoreTokens())
{
StringTokenizer stSub = new
StringTokenizer(stMain.nextToken(),"=");
stSub.nextToken();
SavedModifier = stSub.nextToken().toUpperCase();
}
else
{
SavedModifier = null;
}
}
56 de 79
Nuevas funcionalidades para desarrolladores de
ORACLE 9i y 10g.
57 de 79
Nuevas funcionalidades para desarrolladores de
ORACLE 9i y 10g.
ta.start();
return true;
}
if (id == STOP){
System.out.println(getClass().getName() + "ID:STOP");
ta.stop();
return true;
}
if (id == XPOS){
ta.setX(Integer.parseInt((String)value));
return true;
}
if (id == YPOS){
ta.setY(Integer.parseInt((String)value));
return true;
}
if (id == FOREGROUND){
ta.setForeground((Color)value);
return true;
}
if (id == BACKGROUND){
ta.setBackground((Color)value);
return true;
}
if (id == OUTERSIZE){
Point p = (Point)value;
System.out.println("OUTERSIZE:" + value.toString());
ta.setSize(new Dimension(p.x,p.y));
return super.setProperty(id,value);
}
if (id == FONT){
ta.setFont((Font)value);
return true;
}
58 de 79
Nuevas funcionalidades para desarrolladores de
ORACLE 9i y 10g.
public TickerApplet(){
initMouseDrag();
}
59 de 79
Nuevas funcionalidades para desarrolladores de
ORACLE 9i y 10g.
}
public void setX(int x){
this.x = x;
}
public int getX(){
return this.x;
}
public void setY(int y){
this.y = y;
}
public int getY(){
return this.y;
}
/*
public void init()
{
System.out.println(getClass().getName() + ": init()");
}
*/
System.out.println(getClass().getName() +
"calcOffsets() " + time + " x=" + x + ", y=" + y);
}
60 de 79
Nuevas funcionalidades para desarrolladores de
ORACLE 9i y 10g.
}
public void stop(){
System.out.println(getClass().getName() + ": stop()");
if (tickerThread != null) tickerThread.stop();
tickerThread = null;
}
61 de 79
Nuevas funcionalidades para desarrolladores de
ORACLE 9i y 10g.
62 de 79
Nuevas funcionalidades para desarrolladores de
ORACLE 9i y 10g.
10g(Navegador de Objetos)
63 de 79
Nuevas funcionalidades para desarrolladores de
ORACLE 9i y 10g.
64 de 79
Nuevas funcionalidades para desarrolladores de
ORACLE 9i y 10g.
65 de 79
Nuevas funcionalidades para desarrolladores de
ORACLE 9i y 10g.
66 de 79
Nuevas funcionalidades para desarrolladores de
ORACLE 9i y 10g.
6i (Modelo de Diseño):
67 de 79
Nuevas funcionalidades para desarrolladores de
ORACLE 9i y 10g.
6i (Pantalla de Parámetros):
68 de 79
Nuevas funcionalidades para desarrolladores de
ORACLE 9i y 10g.
c. Orígenes de datos:
El origen de datos es una función PL/SQL. Esta función devuelve una referencia
a un cursor. Es útil cuando se han de hacer cálculos según ciertas condiciones de la
consulta. Se separa un poco la lógica de negocio de la presentación. El siguiente
ejemplo está sacado de la ayuda del Developer. Este ejemplo se puede usar con
Developer 6i.
Se crea un paquete con el tipo del registro que devuelve la referencia a cursor, el REF
CURSOR, y una función que genera el REF CURSOR según unas reglas.
PACKAGE cv IS
type comp_rec is RECORD (
deptno number,
ename varchar(10),
compensation number
);
type comp_cv is REF CURSOR return comp_rec;
function emprefc(deptno1 number) return comp_cv;
END;
PACKAGE BODY cv IS
function emprefc(deptno1 number) return comp_cv
is
temp_cv cv.comp_cv;
begin
if deptno1 > 20 then
open temp_cv for
select deptno, ename,1.25*(sal+nvl(comm,0)) compensation
from emp where deptno = deptno1;
else
open temp_cv for
select deptno, ename, 1.15*(sal+nvl(comm,0)) compensation
from emp where deptno = deptno1;
end if;
return temp_cv;
end;
END;
Esta función se crea al insertar un origen de datos PL/SQL. Lo que hace es usar la
función y REF_CURSOR definidos en los paquetes.
69 de 79
Nuevas funcionalidades para desarrolladores de
ORACLE 9i y 10g.
El origen de datos es un fichero XML. No está muy lograda esta utilidad, ya que
falla si el árbol de objetos es profundo. Hay que afinar mucho en los DTD. Les faltan
muchas cosas.
La opción Validar Origen de Datos, si se activa indica que valide usando DOM, sino
valida usando SAX
70 de 79
Nuevas funcionalidades para desarrolladores de
ORACLE 9i y 10g.
El origen de datos JDBC está pensado para conectarse con otros tipos de BDD
como SQLServer, Informix, DB2, etc. Los orígenes JDBC están especificados en un
fichero llamado ORACLE_HOME/reports/conf/jdbcpds.conf
71 de 79
Nuevas funcionalidades para desarrolladores de
ORACLE 9i y 10g.
</con>
</services>
</OLAP>
10i (Propiedades):
72 de 79
Nuevas funcionalidades para desarrolladores de
ORACLE 9i y 10g.
e. Plantillas.
Una plantilla es un objeto que define unas características comunes a un conjunto de
informes. Se guardan con la extensión .tdf. Son fáciles de crear y usar.
Las características que podemos modificar son:
En el Modelo de Datos:
o Parámetros del sistema. Modificar
o Parámetros del usuario. Crear
En la Disposición de Papel:
o Cuerpo:
Valores por defecto: (Color, ubicación, justificación, etc.)
Marcos.
Etiquetas/Cabeceras del Campo.
Campos.
Etiquetas de Resumen.
Resúmenes.
Sustituir Según el modelo de informe que elijamos, se usará una
plantilla u otra (tabular, agrupar a la izquierda, carta, etc.)
o Margen Imágenes, rótulos, etc. de los márgenes.
73 de 79
Nuevas funcionalidades para desarrolladores de
ORACLE 9i y 10g.
Para poder editar la plantilla de forma visual, se usa el Editor de Plantillas, al cual se
accede a través de Herramientas Editor de Plantillas o doble clic sobre
Disposición de Papel
Es bastante simple de usar.
74 de 79
Nuevas funcionalidades para desarrolladores de
ORACLE 9i y 10g.
75 de 79
Nuevas funcionalidades para desarrolladores de
ORACLE 9i y 10g.
i. Conceptos Básicos.
JSP
La tecnología JSP, o de Java Server Pages, es una tecnología Java que permite a los
programadores generar dinámicamente HTML, XML o algún otro tipo de página Web.
Esta tecnología permite al código Java y a algunas acciones predefinidas ser
embebidas en el contenido estático. En las jsp, se escribe el texto que va a ser
devuelto en la salida (normalmente código HTML) incluyendo código java dentro de él
para poder modificar o generar contenido dinámicamente. El código java se incluye
dentro de las marcas de etiqueta <% y %>.
En una posterior especificación, se incluyeron taglib; esto es, la posibilidad de definir
etiquetas nuevas que ejecuten código de clases java.
La principal ventaja de JSP frente a otros lenguajes es que permite integrarse con
clases Java (.class) lo que permite separar en niveles las aplicaciones Web,
almacenando en clases java las partes que consumen más recursos así como las que
requieren más seguridad, y dejando la parte encargada de formatear el documento
html en el archivo jsp. (wikipedia)
Ejecución de un JSP
La primera vez que se realiza una petición de una página JSP, el contenedor Web
convierte el fichero JSP en un servlet que pueda responder a la petición HTTP. En
primer lugar traduce la página JSP en un fichero fuente Java que contiene la definición
de una clase servlet. En segundo lugar el contenedor Web compila el código fuente del
servlet en una clase Java (.class). El bytecode de esta clase Java se carga en la JVM
del contenedor Web utilizando un cargador de clases. En el tercer paso, el contenedor
Web crea una instancia de la clase servlet y lleva a cabo la fase de inicialización del
ciclo de vida invocando al método especial jspInit. Finalmente, el contenedor Web
puede invocar el método _jspService de la página JSP convertida, de modo que pueda
servir las peticiones HTTP del cliente.
Marcas de etiqueta
Dentro de las marcas <% y %>, nos podemos encontrar con:
<%-- comentario --%> Comentarios JSP.
<%@ directiva %> Directivas JSP.
<%! declaración %> Declaración de variables o funciones.
<% código %> Scriptlet. Java que deseamos ejecutar.
<%= expresión %> Valor de expresión JAVA que queremos incluir en la página
Web.
76 de 79
Nuevas funcionalidades para desarrolladores de
ORACLE 9i y 10g.
Directivas JSP
La directiva page nos permite definir uno o más de los siguientes atributos:
import="package.class" o
import="package.class1,...,package.classN". Esto nos permite
especificar los paquetes que deberían ser importados. Por ejemplo:
<%@ page import="java.util.*" %>
El atributo import es el único que puede aparecer múltiples veces.
contentType="MIME-Type" o contentType="MIME-Type;
charset=Character-Set" Esto especifica el tipo MIME de la salida. El valor
por defecto es text/html. Por ejemplo, la directiva:
<%@ page contentType="text/plain" %>
tiene el mismo valor que el scriptlet
<% response.setContentType("text/plain");%>
session="true|false". Un valor de true (por defecto) indica que la variable
predefinida session (del tipo HttpSession) debería unirse a la sesión existente
si existe una, si no existe se debería crear una nueva sesión para unirla. Un
valor de false indica que no se usarán sesiones, y los intentos de acceder a la
variable session resultarán en errores en el momento en que la página JSP sea
traducida a un servlet
buffer="sizekb|none". Esto especifica el tamaño del buffer para el
JspWriter out. El valor por defecto es específico del servidor, debería ser de al
menos 8kb.
autoflush="true|false". Un valor de true (por defecto) indica que el
buffer debería descargase cuando esté lleno. Un valor de false, raramente
utilizado, indica que se debe lanzar una excepción cuando el buffer se
sobrecargue. Un valor de false es ilegal cuando usamos buffer="none".
extends="package.class". Esto indica la superclase del servlet que se va
a generar. Debemos usarla con extrema precaución, ya el servidor podría
utilizar una superclase personalizada.
info="message". Define un string que puede usarse para ser recuperado
mediante el método getServletInfo
errorPage="url". Especifica una página JSP que se debería procesar si se
lanzará cualquier Throwable pero no fuera capturado en la página actual.
isErrorPage="true|false". Indica si la página actual actúa o no como
página de error de otra página JSP. El valor por defecto es false.
La directiva include nos permite incluir ficheros en el momento en que la página JSP
es traducida a un servlet. Los ficheros pueden ser documentos estáticos como páginas
HTML, o documentos dinámicos como páginas JSP. Facilita la reutilización de un
documento en diversas páginas. Ejemplo:
<%@ include file="url relativa" %>
77 de 79
Nuevas funcionalidades para desarrolladores de
ORACLE 9i y 10g.
Taglib
Los taglib, son bibliotecas de etiquetas, cada etiqueta es un conjunto de scripts de
JAVA y HTML. Su utilidad radica en la reutilización de trozos comunes de JSP, como
por ejemplo accesos a bases de datos. Existe algo parecido como son los JavaBeans,
o los Entreprise Java Beans, que en general son códigos de JAVA compilados que se
utilizan dentro de un JSP. La diferencia entre los Beans y los Taglibs, es que estos
últimos pueden acceder a los objetos Request y Response, además de que los Beans
se utilizan para separar la capa de negocio de la presentación, es decir, que en un
Beans no debe de aparecer HTML, o código para representar información.
Los Taglibs se guardan con la extensión .tld.
Para poder utilizar las etiquetas definidas en un taglib, se usa la directiva siguiente:
<%@ taglib uri="/WEB-INF/lib/reports_tld.jar" prefix="rw" %>
Donde el prefix se usa para indicar que la etiqueta es del taglib indicado, como
veremos a continuación. Esto es algo parecido a los espacios de nombres del XML
Dentro de la página JSP, para poder usar las etiquetas del taglib:
<rw:style >
texto que encierre la etiqueta, o más etiquetas
</rw:style>
ii. reports_tld.jar
Report Builder nos proporciona el taglib reports_tld.jar.
Las etiquetas que podemos usar son:
dataArea Indica el lugar donde el asistente de informes incluye los datos del
report. Se puede usar en conjunción con style.
<rw:dataArea id="identificador" >
[tag body]
</rw:dataArea>
field Inserta un valor de un elemento del modelo de datos.
<rw:field id="identificador" src="nombre del objeto"
[breakLevel="Nivel de ruptura (Matrices)"]
[breakValue="valor de rotura (Matrices)"]
[nullValue="valor a mostrar en caso de nulo"]
[containsHtml="yes|true si contiene el valor código HTML"]
[formatMask="formato de mascara"]
[formatTrigger="función de formato(ver srw)"]
[urlEncode=" yes|true si convierte html a entidades (<)"] >
[tag body]
</rw:field>
foreach Realiza el bucle en el cual se mostrará los datos de un grupo
<rw:foreach id="identificador" src="nombre del grupo"
[startRow="fila de inicio"] [endRow="fila última"]
[increment="salto"]>
[tag body]
</rw:foreach>
getValue Crea un valor JAVA para manejarlo con scripst de JSP
<rw:getValue id=" identificador " src=" nombre del grupo "
[formatMask="formato de mascara"]>
[tag body]
</rw:getValue>
78 de 79
Nuevas funcionalidades para desarrolladores de
ORACLE 9i y 10g.
79 de 79