AYUDA EN LÍNEA
 WINDEVWEBDEV Y WINDEV MOBILE

Este contenido se ha traducido automáticamente.  Haga clic aquí  para ver la versión en inglés.
Ayuda / Conectores Nativos/Accesos Nativos / Conector Nativo Oracle
  • 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. Ejecutar la consulta y recuperar el resultado
  • Funciones y procedimientos que devuelven un cursor
  • Principio
  • Ejemplo: Función que devuelve un cursor
  • Ejemplo: Procedure con un parámetro de cursor
WINDEV
WindowsLinuxUniversal Windows 10 AppJavaReportes y ConsultasCódigo de Usuario (UMC)
WEBDEV
WindowsLinuxPHPWEBDEV - Código Navegador
WINDEV Mobile
AndroidWidget Android iPhone/iPadIOS WidgetApple WatchMac CatalystUniversal Windows 10 App
Otros
Procedimientos almacenados
Conector Nativo Oracle: Recuperar el valor de salida de un Procedure almacenado
Conectores NativosDisponible solo con este tipo de conexión
Presentación
El Conector Nativo Oracle (también llamado Native Oracle 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.
Observaciones:
  • También tiene la posibilidad de utilizar variables en cualquier tipo de consulta.
  • También se pueden ejecutar las funciones y los procedimientos que devuelven un cursor.
Si la consulta debe ejecutarse varias veces, prepare la consulta a ejecutar (con HPrepareSQLQuery) así como los diferentes parámetros a modificar. A continuación, ejecute la consulta tantas veces como sea necesario con HExecuteSQLQuery. Esta es una solución rápida y reduce el tiempo que se tarda en recorrer el resultado de una consulta (consulta SELECT).
¿Cómo proceder?

Etapas

Para especificar y recuperar valores al ejecutar una consulta, debe hacerlo:
  1. Declarar una fuente de datos. Esta fuente de datos contendrá el resultado de la consulta SQL.
  2. Declarar las diferentes variables de consulta (variables de entrada y salida).
    Las variables se recuperan en el tipo especificado en WLanguage. Las variables son variables de texto de Default.
    Por lo tanto, pueden ocurrir conversiones entre el tipo nativo de la base de datos y el tipo WLanguage, causando errores inesperados de redondeo o formato (la fecha se transforma en cadena, por ejemplo)..
    Por lo tanto, le aconsejamos que especifique los tipos de WLanguage de las variables con mucho cuidado antes de ejecutar la consulta. 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)
  3. Ejecute la consulta 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. Por lo tanto, para Oracle, los parámetros se especifican con la sintaxis :ParamName.. 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.
  • Para ejecutar una consulta sin activar la opción bind, utilice la constante hNoBind en HExecuteSQLQuery.
Ejemplo
La Procedure almacenada 'sp_cut(n,str)' trunca la cadena 'str' después de los primeros 'n' caracteres y devuelve la longitud anterior de la cadena.
  • n es una entrada Variable.
  • str es una entrada/salida Variable.

1. Declaración de la fuente de datos

La fuente de datos se utiliza para manipular las variables del Procedure que deben ser ejecutadas.
MyProc is Data Source

2. Declarando las variables utilizadas por la Procedure

Las variables que maneja el Procedure se declaran desde la fuente de datos.
MyProc.n = 3 // Automatically declares an integer initialized to 3
MyProc.str = "Example"
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. Ejecutar la consulta y recuperar el resultado

Para ejecutar la consulta, utilice HExecuteSQLQuery:
HExecuteSQLQuery(MyProc, Connection, hQueryWithoutCorrection, "begin:Res:=sp_cut(:n,:str);end;")
Info(MyProc.Res)
Después de la ejecución de la consulta, el MyProc.str Variable contiene "exa" y el MyProc.res Variable contiene 7.
Funciones y procedimientos que devuelven un cursor

Principio

Si la consulta no devuelve 'resultset' pero si uno de sus parámetros es un cursor (el valor de retorno se procesa como un parámetro OUT), el cursor se navega como si fuera el resultado de la consulta.
Observaciones:
  • HPrepareSQLQuery no puede utilizarse para inicializar la navegación del cursor. Debe llamar directamente a HExecuteSQLQuery.
  • El nombre del parámetro de cursor o el nombre del valor de retorno del cursor debe ser fijado por "%CURSOR" para que el Conector Nativo pueda realizar un enlace de un parámetro de cursor..

Ejemplo: Función que devuelve un cursor

  • Creación de la fuente tabla de datos:
    CREATE TABLE frm_user(user_name      VARCHAR2(20));
    INSERT INTO frm_user VALUES ('toto');
    INSERT INTO frm_user VALUES ('titi');
    INSERT INTO frm_user VALUES ('tutu');
    COMMIT;
  • Función que devuelve un cursor:
    CREATE OR REPLACE FUNCTION display_user
    RETURN SYS_REFCURSOR AS
    vRefCursor SYS_REFCURSOR;
    begin
    OPEN vRefCursor FOR
    SELECT user_name, upper(user_name) FROM frm_user;
    RETURN vRefCursor;
    end;
  • Código WLanguage para ejecutar la función y leer el resultado:
    myProcedure is Data Source
    IF NOT HExecuteSQLQuery(myProcedure, connectionOracle, hQueryWithoutCorrection, ...
    "begin:return_value%CURSOR:= display_user(); end;") THEN
    Error("Error on HExecuteSQLQuery", "", HErrorInfo(hErrFullDetails))
    RETURN
    ELSE
    FOR EACH myProcedure
    Trace(HRecordToString(myProcedure))
    END
    END

    El rastro contiene:
    toto
    titi
    tutu

Ejemplo: Procedure con un parámetro de cursor

  • Creación de la fuente tabla de datos:
    CREATE TABLE frm_user(user_name VARCHAR2(20));
    INSERT INTO frm_user VALUES ('toto');
    INSERT INTO frm_user VALUES ('titi');
    INSERT INTO frm_user VALUES ('tutu');
    COMMIT;
  • Procedure con un parámetro de cursor:
    CREATE OR REPLACE PROCEDURE Proc_display_user(O_RESULT_SET OUT SYS_REFCURSOR)
     AS
     BEGIN
       OPEN O_RESULT_SET FOR
       SELECT user_name, upper(user_name) FROM frm_user;
     END;
  • Código WLanguage para ejecutar el Procedure y leer el resultado:
    myProcedure is Data Source
    IF NOT HExecuteSQLQuery(myProcedure, connectionOracle, hQueryWithoutCorrection, ...
    "begin Proc_display_user(:return_value%CURSOR); end;") THEN
    Error("Error on HExecuteSQLQuery", "", HErrorInfo(hErrFullDetails))
    RETURN
    ELSE
    FOR EACH myProcedure
    Trace(HRecordToString(myProcedure))
    END
    END

    El rastro contiene:
    toto
    titi
    tutu
Versión mínima requerida
  • Versión 9
Esta página también está disponible para…
Comentarios
Haga clic en [Agregar] para publicar un comentario

Última modificación: 30/10/2022

Señalar un error o enviar una sugerencia | Ayuda local