|
|
|
|
- Presentación
- ¿Cómo proceder?
- Etapas
- Observaciones
- Ejemplo
- 1. Declaración de la fuente de datos
- 2. Declarando las variables utilizadas por la Procedure
- 3. Ejecutando el Procedure almacenado y recuperando el resultado
Conector Nativo Sybase: El valor de salida de un Procedure almacenado en el servidor
Disponible solo con este tipo de conexión
El Native Sybase Connector (también llamado Native Sybase Access) está acostumbrado a: - especificar los valores de entrada durante la llamada a un Procedure almacenado.
- recuperar los valores de salida después de una llamada a un Procedure almacenado.
Esta función está disponible en ASE 12.5. Etapas Para especificar y recuperar los valores cuando se ejecuta una consulta de "Procedure almacenado", debe: - Declarar una fuente de datos. Esta fuente de datos contendrá el resultado de los datos almacenados de SQL Procedure.
- Declarar las variables del Procedure almacenado (variables de entrada y variables de salida)
Las variables se recuperan en el tipo especificado en WLanguage. Las variables son variables de texto de Default. Por lo tanto, pueden producirse conversiones entre el tipo nativo de la base de datos y el tipo WLanguage. Estas conversiones pueden causar errores inesperados de redondeo o formato (por ejemplo, una fecha convertida en un string).. Por lo tanto, le aconsejamos que especifique los tipos de variables de WLanguage con mucho cuidado antes de ejecutar el Procedure almacenado. Para esto:- inicializar el valor de la Variable (tipos simples: entero, string, float)
- especificar el tipo esperado con escribir a máquina (no soportado en esta versión).
El nombre de estas variables debe corresponder al nombre de los parámetros de este Procedure en Sybase. Observación: En algunos casos, el servidor no acepta realizar una conversión implícita. Se visualiza un error de conversión. En este caso, debe inicializar el tipo definiendo cualquier valor ordinario en el tipo seleccionado.. Por ejemplo, para definir un tipo numérico, utilice MyQuery.Parameter=0. - Ejecuta el Procedure almacenado con HExecuteSQLQuery.
Observaciones - HExecuteSQLQuery debe utilizarse con:
- el nombre de la conexión,
- la constante hQueryWithoutCorrection.
- Las variables declaradas deben ser idénticas a las utilizadas. De lo contrario, se produce un error WLanguage.
- En la llamada a la Procedure almacenada, se debe utilizar la sintaxis específica de la base de datos utilizada, incluso para la sintaxis de los parámetros. Para Sybase, los parámetros se especifican con la siguiente sintaxis: @NombreParam. Atención: el carácter "@" debe ir seguido de al menos una letra (la sintaxis @1 no está permitida).
El mismo parámetro se puede utilizar varias veces. En este caso, la Variable correspondiente será reutilizada. - El valor de retorno del Procedure almacenado se devuelve en un Variable definido automáticamente por el Native Sybase Connector. Este Variable se llama RETURN_VALUE.
- Para ejecutar una consulta sin habilitar el enlace, use la constante hNoBind en HExecuteSQLQuery.
El Procedure almacenado llamado MyProc devuelve la suma de @p& y @p21 en @res. El valor de retorno es 2*@res. El código utilizado para crear esta Procedure en el servidor es el siguiente: CREATE PROCEDURE MyProc(@p1 int, @p2 int, @res int output) AS select @res=@p1+@p2 return 2*@res 1. Declaración de la fuente de datos La fuente de datos se utiliza para manipular las variables del Procedure que deben ser ejecutadas. 2. Declarando las variables utilizadas por la Procedure Las variables que maneja el Procedure se declaran desde la fuente de datos. MyProc.p1 = 10 // Automatically declares an integer initialized to 3 MyProc.p2 = 20
Observación: No es necesario declarar todas las variables utilizadas. En este ejemplo, la variable utilizada para recuperar el resultado de la Procedure no se declara. 3. Ejecutando el Procedure almacenado y recuperando el resultado IF HExecuteSQLQuery(MyProc, "MyConnection", hQueryWithoutCorrection, "MyProc @p1,@p2,@res") THEN Trace("res=" + MyProc.res) Trace("p1=" + MyProc.p1) Trace("p2=" + MyProc.p2) Trace("return_value=" + MyProc.return_value) ELSE Error(HErrorInfo()) END
Esta página también está disponible para…
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|