7

estoy trabajando en una base de datos oracle que maneja muchos procedimientos PL/SQL y APEX. No soy muy nato para la programación, pero estoy tratando de entender.

Fragmento de código

PROCEDURE create_request (out_OraErr out varchar2, out_request_no out 
                          number, out_request_id out varchar2) 

Alguien me puede explicar ¿cómo funciona un procedimiento con parametros OUT? Ya lo leí en diferentes fuentes, pero prefiero que alguien me explique.

3 respuestas 3

7

Tanto en los procedimientos almacenados como en las funciones, los parámetros pueden ser de entrada, salida o de entrada/salida:

IN (entrada): Son los parámetros que recibe la función al ser ejecutada para ser insertados en la base de datos o determinar una lógica de negocio. Son siempre parámetros de sólo lectura:

PROCEDURE PR_TEST(pVariable IN VARCHAR2)
BEGIN

    INSERT INTO TABLE1(value1) VALUES (pVariable);

END PR_TEST;

OUT (salida): Parámetros que normalmente se cargan dentro del procedimiento almacenado para luego devolver un valor. Es un parámetro de sólo escritura y no tendrá valor hasta que se le asigne uno dentro del procedimiento:

PROCEDURE PR_TEST(pVariable OUT VARCHAR2)
BEGIN

    SELECT VALUE INTO pVariable
    FROM TABLA1
    WHERE CONDICION = 1;

END PR_TEST;

IN/OUT (Entrada/Salida): La combinación de los dos anteriores. Se recibe un valor para luego modificarlo (o no) y devolverlo. Es un parámetro de lectura y escritura:

PROCEDURE PR_TEST(pVariable IN OUT VARCHAR2)
BEGIN

    IF (pVariable = 'S') THEN
        pVariable := 'N';
    END IF;

END PR_TEST;
3
  • 1
    Gracias por la respuesta @zeross
    – Human
    el 22 jul. 2019 a las 19:05
  • ¿Qué quiere decir parámetros de solo escritura o de solo lectura? el 13 nov. 2023 a las 19:57
  • Un parámetro "solo lectura" solamente permite leer el contenido del parámetro, no permite modificarlo. "Solo escritura" son aquellos que se reciben sin valor y solamente se permite modificarlo para darle un valor de salida.
    – zeross
    el 15 nov. 2023 a las 10:27
3

Los procedimientos almacenados almacenan por ejemplo una sentencia SQL, que puede ser dinámica es decir trabajar por medio de valores que ingrese el usuario y con base en esos valores procesarlos y devolver un resultado:

Caso IN

Necesitamos un SP que haga un SELECT con base en el id que ingrese un usuario; entonces lo lograríamos de este modo:

CREATE PROCEDURE usuarios(IN idInt INT)
BEGIN
   SELECT * FROM users WHERE id =  idInt
END

Caso out

Nos ayuda a extraer de un SP el cálculo generado a través de una variable; de este modo:

CREATE PRODECURE total(OUT  total INT)
BEGIN
    SELECT COUNT(*) INTO total
    FROM users
END
2
PROCEDURE create_request (
  OUT OraErr, 
  OUT varchar2, 
  OUT request_no, 
  OUT number, 
  OUT request_id, 
  OUT varchar2
)
...

Los parámetros OUT son los de salida. En el ejemplo, si llamás al procedimiento

SELECT create_request();

no necesitás parámetros de entrada IN, luego el procedimiento hace algo y devuelve: OraErr, varchar2, request_no, etc.

Aclaración: la sintaxis del ejemplo no es correcta. Es sólo a fines ilustrativos para explicar los parámetros OUT.

Tu Respuesta

By clicking “Publica tu respuesta”, you agree to our terms of service and acknowledge you have read our privacy policy.

¿No es la respuesta que buscas? Examina otras preguntas con la etiqueta o formula tu propia pregunta.