我有存盤程序,其中有很多輸出變數。所以我像這樣呼叫存盤程序:
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
);
dbms_output.put_line(ln_order_qty);
END; `;
return await query(sql);
} catch (error) {
console.log(error);
throw new Error.InternalServerError("Error!");
}
};
這是模型:
function getinfoHR3Table() {
return infoHR3();
}
export const ProcessModel = {
getProcess,
getReason,
getinfoHR1Table,
getinfoHR2Table,
getinfoCR1Table,
getinfoCR2Table,
getinfoHR3Table
};
這是控制器:
export const getinfoHR3Table = async (req: Request, res: Response) => {
try {
const results: any = await ProcessModel.getinfoHR3Table();
return res.status(200).json(results);
} catch (error) {
return res.status(400).json(error);
}
};
問題是我在結果中得到了空白值。如何在呼叫存盤程序時提取變數并回傳它們?
這樣做的問題是DBMS_OUTPUT.PUT_LINE只在資料庫中列印行。該程序不回傳任何可在后端使用的值。但是,它為 outvariables 提供了值。
如何從程序中提取這些外部變數,以便我可以在后端使用它們?
uj5u.com熱心網友回復:
您可以創建帶有型別引數的存盤程序,IN OUT以便以多種方式使用引數,例如
CREATE OR REPLACE PROCEDURE CALL_C1DVX007(
id IN NUMBER,
in_prm1 IN NUMBER,
in_prm2 IN NUMBER,
ln_order_qty IN OUT NUMBER,
ln_in_proc_qty_hr IN OUT NUMBER,
ln_procd_hr_mass IN OUT NUMBER,
ln_in_proc_qty IN OUT NUMBER,
ln_wip IN OUT NUMBER,
ln_qa IN OUT NUMBER,
ln_packing IN OUT NUMBER,
ln_dispatchable_qty IN OUT NUMBER,
ln_despatched_qty IN OUT NUMBER,
ln_finished_qty IN OUT NUMBER,
ln_balance_qty IN OUT NUMBER,
ln_bal_disp_qty IN OUT NUMBER
)
BEGIN
CRMDBA.C1DVX007(id,
in_prm1,
in_prm2,
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_ba lance_qty,
ln_bal_disp_qty);
END;
/
并打電話
SQL> SET serveroutput ON
SQL> BEGIN
CALL_C1DVX007(9514593782,1,1,:ln_order_qty,:ln_in_proc_qty_hr....);
END;
/
SQL> DBMS_OUTPUT.PUT_LINE(:ln_order_qty); -- to display a result coming from a parameter
從命令列
uj5u.com熱心網友回復:
/如果 ln_order_qty 是程序的輸出變數,您可以將該變數的值捕獲到另一個變數中并從那里開始使用它。下面是一個例子:- /
ln_order_qty_output := ln_order_qty;
/* 上面的變數 ln_order_qty_output 現在將包含來自程序的輸出變數值,您可以將其用作后端 PLSQL 程序中的值 */
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);
ln_order_qty_output := ln_order_qty;
dbms_output.put_line(ln_order_qty);
dbms_output.put_line(ln_order_qty_output);
END;
/* dbms_output.put_line 上顯示的值應該是一樣的 你現在可以在后端使用變數 ln_order_qty_output 的值 */
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/385921.html
