|
|
|
|
- Presentación
- ¿Cómo proceder?
- Etapas
- Ejecutando el Procedure almacenado con HExecuteSQLQuery
- Observaciones
- Ejemplo 1: Almacenado Procedure con el parámetro de retorno
- 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
- Ejemplo 2: Función de almacenamiento con valor de retorno
- 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 SQL Server: Recuperar el valor de salida de un Procedure almacenado
Disponible solo con este tipo de conexión
La Conector Nativo SQL Server está acostumbrada 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.
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 ello:- inicializar el valor de la Variable (tipos simples: entero, string, float)
- especificar el tipo esperado con el escribir a máquina Property (no soportado en esta versión)
El nombre de estas variables debe corresponder al nombre de los parámetros de Procedure en SQL Server. 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.
Ejecutando el Procedure almacenado con HExecuteSQLQuery - el nombre de la conexión,
- la constante hQueryWithoutCorrection
- el nombre de la Procedure, seguido de los parámetros (incluyendo el carácter @). Para especificar los parámetros de salida, debe especificar 'out' o 'output'. Los parámetros deben estar separados por comas.
Modo compatible: Si la consulta contiene sólo el nombre de Procedure, la Conector Nativo añade automáticamente los parámetros de la Procedure almacenada. Atención: Si algunos parámetros tienen un valor por defecto y si no están referenciados por el código WLanguage, se producirá un error de no referencia en la Variable. En este caso, debe modificar el código para llamar la consulta definiendo los parámetros obligatorios, o declarar explícitamente el Variable opcional. Ejemplo: Código para crear el Procedure: CREATE PROCEDURE MyProc(@p1 int, @p2 int, @res int output) AS set @res=@p1+@p2 Código para el funcionamiento de la Procedure: p1 es un parámetro obligatorio y p2 es un parámetro opcional. El siguiente código desencadena un error porque el acceso Conector Nativo esperaba p2 en la consulta: MyProcedure is Data Source MyProcedure.p1 = 10 IF HExecuteSQLQuery(MyProcedure, "MyConnection", hQueryWithoutCorrection, "MyProc") THEN Trace("p1=" + MyProcedure.p1) ELSE Error(HErrorInfo()) END
Se debe utilizar el siguiente código: MyProcedure is Data Source MyProcedure.p1 = 10 IF HExecuteSQLQuery(MyProcedure, "MyConnection", hQueryWithoutCorrection, ... "MyProc @p1, @p2 out") THEN Trace("p1=" + MyProcedure.p1) ELSE Error(HErrorInfo()) END
Observaciones - 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. Por lo tanto, para SQL Server, 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. - No se puede recuperar un Procedure almacenado que devuelve registros (SELECCIONE ... FROM ...), columns.
- Valor de retorno (funciones): Para recuperar el valor de retorno, debe declarar un Variable y asignar el resultado de la función a este Variable.
- Para ejecutar una consulta sin activar la opción bind, utilice la constante hNoBind en HExecuteSQLQuery.
- Uso de RAISERROR: Los errores cuya gravedad es superior a 10 son errores fatales. Por lo tanto, no se genera ningún error por RAISERROR para un error cuya gravedad es menor o igual a 10.
Ejemplo 1: Almacenado Procedure con el parámetro de retorno El Procedure almacenado llamado MyProc devuelve la suma de @p1 y @p2 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. MyProcedure is Data Source
2. Declarando las variables utilizadas por la Procedure Las variables que maneja el Procedure se declaran desde la fuente de datos. MyProcedure.p1 = 10 MyProcedure.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(MyProcedure, "MyConnection", hQueryWithoutCorrection, ... "MyProc @p1,@p2,@res out") THEN Trace("res=" + MyProcedure.res) Trace("p1=" + MyProcedure.p1) Trace("p2=" + MyProcedure.p2) ELSE Error(HErrorInfo()) END
Ejemplo 2: Función de almacenamiento con valor de retorno La función almacenada llamada MyProc devuelve la suma de @p1 y @p2in @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. MyProcedure is Data Source
2. Declarando las variables utilizadas por la Procedure Las variables que maneja el Procedure se declaran desde la fuente de datos. MyProcedure.p1 = 10 MyProcedure.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(MyProcedure, "MyConnection", ... hQueryWithoutCorrection, "set @res=user.MyProc(@p1,@p2)") THEN Trace("res=" + MyProcedure.res) Trace("p1=" + MyProcedure.p1) Trace("p2=" + MyProcedure.p2) ELSE Error(HErrorInfo()) END
Esta página también está disponible para…
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|