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/iPadApple WatchUniversal 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.
If la consulta debe ejecutarse varias veces, puede preparar la consulta a ejecutar (HPrepareSQLQuery) así como los diferentes parámetros a modificar, luego ejecutar la consulta tantas veces como sea necesario con HExecuteSQLQuery. Esta solución optimiza el tiempo necesario para examinar el resultado de la consulta (para una 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 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)
  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 habilitar el enlace, use 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 la entrada Variable.
  • str es un Variable de entrada/salida.

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, simplemente usa 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 se puede utilizar 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 utilizado para ejecutar la función y navegar por 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;
  • El código de lenguaje WLanguage usado para ejecutar el Procedure y para navegar por 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