我在Oracle中有一个存储过程。我希望,如果它成功更新记录,它将返回一个返回值1
,否则返回0
。让我知道我该怎么做。我正在使用Angular,Asp.net,WebAPi和Oracle数据库。
先谢谢了。我的代码如下:
CREATE OR REPLACE Procedure NML.AddProductProcedure(V_CRD_COD In varchar2,
V_ITM_COD In varchar2,
V_SRL_NUM In varchar2,
V_UOM_ABR IN varchar2,
V_QTD_RTE IN varchar2,
V_QTY_PRC In varchar2,
V_QTN_NUM IN varchar2,
V_PMT_FLG IN varchar2,
V_TAX_FLG IN varchar2,
V_DLV_FLG IN varchar2)
IS
BEGIN
UPDATE NML.pgi_00_13
SET UOM_ABR = V_UOM_ABR,
QTD_RTE = V_QTD_RTE,
QTY_PRC = V_QTY_PRC,
QTN_NUM = V_QTN_NUM,
PMT_FLG = V_PMT_FLG,
TAX_FLG = V_TAX_FLG,
DLV_FLG = V_DLV_FLG
WHERE
CRD_COD = V_CRD_COD
AND ITM_COD = V_ITM_COD
AND SRL_NUM = V_SRL_NUM;
END;
答案 0 :(得分:0)
您可以在过程中定义一个OUT
变量,成功完成后将其设置为1,或者从EXCEPTION
设置为0。
CREATE OR REPLACE PROCEDURE nml.addproductprocedure (
p_crd_cod IN VARCHAR2,
p_itm_cod IN VARCHAR2,
p_srl_num IN VARCHAR2,
p_uom_abr IN VARCHAR2,
p_qtd_rte IN VARCHAR2,
p_qty_prc IN VARCHAR2,
p_qtn_num IN VARCHAR2,
p_pmt_flg IN VARCHAR2,
p_tax_flg IN VARCHAR2,
p_dlv_flg IN VARCHAR2,
p_status OUT NUMBER --use this variable
)
IS
BEGIN
UPDATE nml.pgi_00_13
SET uom_abr = p_uom_abr,
qtd_rte = p_qtd_rte,
qty_prc = p_qty_prc,
qtn_num = p_qtn_num,
pmt_flg = p_pmt_flg,
tax_flg = p_tax_flg,
dlv_flg = p_dlp_flg
WHERE crd_cod = p_crd_cod AND itm_cod = p_itm_cod AND srl_num = p_srl_num;
p_status := 1;
EXCEPTION
WHEN OTHERS THEN
p_status := 0;
END;
/
您的调用块必须定义OUT参数,如下所示:How to return oracle output parameters from a stored procedure in .NET
答案 1 :(得分:0)
您对“成功”的定义是什么?目前,如果您的过程引发异常,则失败,否则成功。那还不够吗?
您可以使用一个参数扩展该过程的签名,该参数可以告诉您更新了多少条记录...
port_speed_change
请注意,您可以改为传递标志或1或0,如@Kaushik solution所示,但这是反模式。因为:
CREATE OR REPLACE Procedure NML.AddProductProcedure(
V_CRD_COD In varchar2,
V_ITM_COD In varchar2,
V_SRL_NUM In varchar2,
V_UOM_ABR IN varchar2,
V_QTD_RTE IN varchar2,
V_QTY_PRC In varchar2,
V_QTN_NUM IN varchar2,
V_PMT_FLG IN varchar2,
V_TAX_FLG IN varchar2,
V_DLV_FLG IN varchar2,
p_updated_cnt out pls_integer
)IS
BEGIN
Update NML.pgi_00_13
set
UOM_ABR=V_UOM_ABR,
QTD_RTE=V_QTD_RTE,
QTY_PRC=V_QTY_PRC,
QTN_NUM=V_QTN_NUM,
PMT_FLG=V_PMT_FLG,
TAX_FLG=V_TAX_FLG,
DLV_FLG=V_DLV_FLG
Where CRD_COD=V_CRD_COD
AND ITM_COD=V_ITM_COD
AND SRL_NUM=V_SRL_NUM;
-- count of rows updated by preceding statement
p_updated_cnt := sql%rowcount;
END;
,这是技术上的成功,但从业务角度来看可能不是成功的完成。在更新记录成功后只想重新调谐1
好吧,你可以这样做:
success
如果有例外,这仍然会抛出错误-这是一件好事-但区分更新零条记录和一条记录(或更多条记录)。