Cómo retornar valores en el servidor de base de datos Oracle
Soy nuevo en esto y me preguntaba cómo devolver variables en Oracle SQL sin usar print y dbms.output.putline. Quiero que esta consulta devuelva un valor para poder usarlo en NodeJS como una consulta select devuelve un valor, pero para un procedimiento almacenado.
Aquí está la consulta del procedimiento almacenado que estoy intentando ejecutar:
export const infoHR3 = async () => {
try {
const sql =
`
Declare
ln_order_qty NUMBER;
ln_in_proc_qty_hr NUMBER;
ln_procd_hr_mass NUMBER;
ln_in_proc_qty NUMBER;
ln_wip NUMBER;
ln_qa NUMBER;
ln_packing NUMBER;
ln_dispatchable_qty NUMBER;
ln_despatched_qty NUMBER ;
ln_finished_qty NUMBER;
ln_balance_qty NUMBER;
ln_bal_disp_qty NUMBER;
BEGIN
CRMDBA.C1DVX007('9514593782','1',1,ln_order_qty,ln_in_proc_qty_hr,ln_procd_hr_mass,
ln_in_proc_qty,ln_wip,ln_qa,ln_packing,ln_dispatchable_qty,ln_despatched_qty,ln_finished_qty,ln_balance_qty,ln_bal_disp_qty);
END; `;
return await query(sql);
} catch (error) {
console.log(error);
throw new Error.InternalServerError("¡Error!");
}
}
Ahora la salida está en blanco, ¿cómo devuelvo las variables out?
¿Alguien puede darme un ejemplo de cómo devolver variables out desde un procedimiento?
davy.ai
Para devolver variables de salida desde un procedimiento almacenado de Oracle, puedes declarar una variable de tipo REF CURSOR y utilizar la instrucción FETCH para recuperar los valores. Aquí tienes un ejemplo de cómo puedes modificar tu código:
En este ejemplo, declaramos una variable de tipo REF CURSOR llamada
c_out_params
, que contendrá los valores de salida del procedimiento almacenado. Luego, utilizamos la instrucción OPEN para crear un cursor con la instrucción SELECT que recupera las variables de salida. A continuación, vinculamos el cursor de salida:out_params
a la variableout_params
en el objetobinds
. Finalmente, llamamos al métodogetRow
en la variableoutCursor
dentro de un bucle para recuperar cada fila de valores de salida, y luego cerramos el cursor después de usarlo con el métodoclose
.Nota que este ejemplo asume que estás utilizando el módulo
oracle
ooracledb
en node.js para conectarte a una base de datos de Oracle.