MTBASE / SYBASE DE COLOMBIA
 
Búsqueda avanzada...
Versión para imprimir Versión para imprimir Enviar vínculo por e-mail Enviar por e-mail Ver atributos del documento Atributos del documento
 

Funciones y Procedimientos Almacenados SQLJ en Adaptive Server Enterprise

Introducción

El soporte a Java en la base de datos de Adaptive Server Enterprise (ASE) extiende las capacidades del servidor de datos, permitiendo:

  • Instalar y ejecutar métodos Java desde un cliente o desde el servidor.
  • Ejecutar métodos Java como funciones de usuario en el servidor de datos.
  • Usar clases Java como Tipos Abstractos de Datos (ADTs), de tal manera que usted pueda almacenar objetos Java en la base de datos y definir columnas usando ADTs.

La versión 12.5 de ASE introdujo formas adicionales de ejecutar métodos Java. Con la versión 12.5 usted puede "encapsular" métodos estáticos Java dentro de código SQL y usarlos tal y como si fueran procedimientos almacenados o funciones SQL. Esta nueva funcionalidad:

  • Permite que los métodos Java retornen al cliente valores de estado, parámetros de salida y conjuntos de resultados.
  • Cumple con la Parte 1 de la especificación SQLJ.
  • Permite que usted use métodos existentes Java como procedimientos y funciones SQLJ en el servidor, el cliente y en cualquier base de datos que se cumpla con la especificación SQLJ.

Al asociar un método Java a un nombre SQL, usted también puede sacar provecho de la sintaxis SQL tradicional y de las capacidades de seguridad y de los metadatos de ASE.

Código de Ejemplo

Los ejemplo usados en éste documento asumen la existencia de una tabla SQL llamada sales_emps con la siguiente definición:

create table sales_emps
    (name varchar(50),
    id char(5),
    state char(20),
    sales decimal(6,2),
    jobcode integer null)

Así mismo, se utilizará la clase Java Routines1 la cual contiene los métodos region y correctStates:

import java.lang.*;
import java.sql.*;

public class Routines1 {

    static String _url = "jdbc:default:connection";

    public static int region(String s)
        throws SQLException {
        s = s.trim();
        if (s.equals("MN") || s.equals("VT") ||
            s.equals("NH")) return 1;
        if (s.equals("FL") || s.equals("GA") ||
            s.equals("AL")) return 2;
        if (s.equals("CA") || s.equals("AZ") ||
            s.equals("NV")) return 3;
        else throw new SQLException
            ("Invalid state code", "X2001");
    }

    public static void correctStates
        (String oldSpelling, String newSpelling)
        throws SQLException {

        Connection conn = null;
        PreparedStatement pstmt = null;
        try {
            Class.forName
                ("sybase.asejdbc.ASEDriver");
            conn = DriverManager.getConnection(_url);
        }
        catch (Exception e) {
            System.err.println(e.getMessage() +
                ":error in connection");
        }
        try {
            pstmt = conn.prepareStatement
                ("update sales_emp set state = ?
                where state = ?");
            pstmt.setString(1, newSpelling);
            pstmt.setString(2, oldSpelling);
            pstmt.executeUpdate();

          }
        catch (SQLException e) {
            System.err.println("SQLException: " +
                e.getErrorCode() + e.getMessage());
        }
 
      return;
    }
}

Funciones SQLJ Definidas por Usuario


Importante:
Antes de poder crear una función SQLJ definida por usuario o un procedimiento almacenado SQLJ, usted debe instalar la clase Java en ASE. Para mayor información sobre cómo instalar una clase Java en ASE, vea la Nota Técnica No. 10055, Instalación y Uso de Java en ASE.


El comando create function especifica el nombre y firma de una función SQLJ para un método Java. Usted puede usar funciones SQLJ para consultar y modificar SQL y para retornar un valor descrito en el método referenciado.

La sintaxis para create function es:

create function [owner.]sql_function_name
        ( [ sql_parameter_name sql_datatype 
            [( length)| (precision[, scale ]) ]
        [ [, sql_parameter_name sql_datatype 
            [( length )| ( precision[, scale ]) ]]... ] ] )
    returns sql_datatype 
        [ ( length)| (precision[, scale ]) ]
    [modifies sql data
    [returns null on null input
        called on null input]
    [deterministic | not deterministic]
    [exportable]
    language java 
    parameter style java
    external name 'java_method_name 
        [ ( [java_datatype[, java_datatype ...] ] ) ] '

Pasos para Crear una Función SQLJ Definida por Usuario

  1. Instalar la clase Java, de acuerdo a la Nota Técnica No. 10055, Instalación y Uso de Java en ASE.

En éste ejemplo, usaremos el método region de la clase Java Routines1  (ver la sección 'Código de Ejemplo', arriba), el cual asocia un código de estado a un número de región y retorna ese número al usuario.

  1. Crear la función SQLJ:

Usando el comando create function asocie a la función uno de los métodos estáticos de la clase Java. Por ejemplo,

create function region_of(state char(20))
    returns integer
language java parameter style java
external name 'Routines1.region'

La sentencia create function especifica un parámetro de entrada (state char(20)) y un valor de retorno entero. La "firma" de la función SQL es "state char(20)". Ya que no hay una firma explícita de un método Java, el sistema infiere una firma para el método Java a partir de la firma de la función SQL.

Las rutinas SQL se basan en correspondencia de tipos de datos entre los parámetros de la rutina SQLJ y el método Java referenciado. Cuando la firma del método Java no está presente, el sistema infiere una de acuerdo a reglas de correspondencia preestablecidas. 

  1. Llamar la función SQLJ:

Usted puede llamar la función SQLJ como si fuera un función del sistema. Por ejemplo:

select name, dbo.region_of(state) as region
from sales_emps
where dbo.region_of(state) = 3

Cuando usted llama una función SQLJ, usted debe incluir el dueño de la función así como el nombre de la función. Ya que sólo el dueño de la base de datos puede crear funciones, cada invocación tiene la forma "dbo.nombre_fundion".

Para borrar una función SQLJ use el comando drop function. Por ejemplo:

drop function region_of

Procedimientos Almacenados SQLJ


Importante:
Antes de poder crear una función SQLJ definida por usuario o un procedimiento almacenado SQLJ, usted debe instalar la clase Java en ASE. Para mayor información sobre cómo instalar una clase Java en ASE, vea la Nota Técnica No. 10055, Instalación y Uso de Java en ASE.


ASE 12.5 le permite invocar métodos estáticos Java a manera de procedimientos almacenados SQLJ. Los procedimientos almacenados SQLJ:

  • Pueden retornar conjuntos resultados y/o parámetros de salida al cliente.
  • Se compartan exactamente igual a los procedimientos SQL al ser ejecutados.
  • Pueden se invocados desde clientes usando ODBC, Client-Library o JDBC.
  • Pueden ser invocados desde el otros procedimientos almacenados del servidor.

El usuario final no necesita saber si el procedimiento que está siendo invocado es un procedimiento almacenado SQLJ o un procedimiento almacenado Transact-SQL. Se invocan de la misma manera.

La sintacis para create procedure es:

create procedure [owner.]sql_procedure_name
    ([ [ in | out | inout ] sql_parameter_name 
        sql_datatype [( length) | 
        (precision[, scale]) ]
    [, [ in | out | inout ] sql_parameter_name
        sql_datatype [( length) | 
        (precision[, scale ]) ] ] ...])
    [modifies sql data
    [dynamic result sets integer
    [deterministic | not deterministic
    language java 
    parameter style java
    external name 'java_method_name 
        [ ( [java_datatype[, java_datatype...]] ) ]'

Pasos para Crear un Procedimiento Almacenado Java

  1. Instalar la clase Java, de acuerdo a la Nota Técnica No. 10055, Instalación y Uso de Java en ASE.

En éste ejemplo usaremos el método correctState de la clase Routines1 (ver la sección 'Código de Ejemplo', arriba), que ejecuta una sentencia SQL update para corregir la ortografía de los códigos de estado. Los parámetros de entrada especifican la vieja y nueva ortografía. correctState es un método void; no retorna ningún valor.

  1. Crear el procedimiento almacenado SQLJ:

Después de escribir e instalar el método, usted puede crear el procedimiento almacenado SQLJ. Para mayor información sobre cómo instalar una clase Java en ASE, vea la Nota Técnica No. 10055, Instalación y Uso de Java en ASE. Por ejemplo,

create procedure correct_states(old char(20), 
    not_old char(20))
modifies sql data
language java parameter style java
external name 'Routines1.correctStates'

El procedimiento correct_states tiene una "firma" SQL de "old char(20), not_old char(20)". Ya que no hay especificada una firma para el método Java, el sistema infiere una "firma" para el método. 

  1. Llamar el procedimiento almacenado SQLJ:

Usted puede ejecutar un procedimiento SQLJ tal y como lo haría con un procedimiento Transact-SQL. En este ejemplo el procedimiento se ejecuta desde isql:

execute correct_states 'GEO', 'GA'

Para borrar un procedimiento SQL use el comando drop procedure. Por ejemplo:

drop procedure correct_states

Más información

Si usted desea conocer más sobre el soporte de Java en ASE, por favor consulte la documentación del producto. Esta se encuentra disponible en línea en http://sybooks.sybase.com/as.html.

Atributos del Documento
Resumen: Este documento brinda una breve descripción y algunos ejemplos sobre el soporte a la especificación SQLJ en Adaptive Server Enterprise. Esta especificación permite la creación de funciones y procedimientos almacenados SQLJ, basándose en métodos estáticos Java.
Código: 10096 Última Modificación: Oct 29, 2001
Temas: Administración Tipo de Documento: Documento Técnico
Productos: Adaptive Server Enterprise Versión: 12.5 en Adelante
Plataformas: Todas las Plataformas Sistema Operativo: Todos los Sistemas Operativos
 
 Inicio   Sobre MTBASE   Sobre Sybase   Empleos en MTBASE   Mapa del Sitio   Mail Corp.   Aspectos Legales y Políticas de Privacidad