2017-06-13 65 views
0

我正在使用供應商的數據庫,並且需要增加一個值並將其返回。我有正確的命令,它更新表,但oracle開發人員的輸出只是說「PL/SQL過程已成功完成」。我如何返回NewReceiptNumber?Oracle更新並在單個查詢中選擇

DECLARE 
    NewReceiptNumber int; 
BEGIN 
    UPDATE SYSCODES 
    SET (VAR_VALUE) = VAR_VALUE+1 
    WHERE VAR_NAME='LAST_RCPT' 
    RETURNING VAR_VALUE INTO NewReceiptNumber; 
END; 
+0

開始一個交易,做你的更新,做一個選擇,然後提交你的改變。由於這是Oracle,因此可能不需要進行初始轉義。 –

+0

@PatrickSchomburg - 你的供應商是否已經提供API來做這種事情? – APC

回答

2

你只是描繪匿名塊存在,以查看該代碼,你將不得不使用的NewReceiptNumber值:

dbms_output.put_line(NewReceiptNumber)

爲:

DECLARE 
    NewReceiptNumber int; 
BEGIN 
    UPDATE SYSCODES 
    SET (VAR_VALUE) = VAR_VALUE+1 
    WHERE VAR_NAME='LAST_RCPT' 
    RETURNING VAR_VALUE INTO NewReceiptNumber; 

    dbms_output.put_line(NewReceiptNumber); 
END; 

但如果你的目的是要真正該值恢復到另一個程序或從前端的呼叫時,你必須聲明一個存儲過程和聲明中表示你的輸出參數,是這樣的:

CREATE OR REPLACE PROCEDURE my_proc(newreceiptnumber out INT) AS 
BEGIN 
    UPDATE syscodes 
    SET (var_value) = var_value+1 
    WHERE var_name='LAST_RCPT' 
    RETURNING var_value INTO newreceiptnumber; 
END my_proc; 

當然,這將是,如果你把你的更新值作爲參數,以及更強大的解決方案,這只是最小的方法。

+0

如果我沒有創建存儲過程的權限,是否有任何選項? –

+0

是的,但請更具體地說明您想要完成的任務,以便我們提供更具體的答案。 –

+0

對不起,我需要照你說的去做,返回前端的新收據號碼,以便在網頁上提供給用戶。 –