2017-06-13 55 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

对不起,我需要照你说的去做,返回前端的新收据号码,以便在网页上提供给用户。 –