3

我有一个带有文本框的页面,该文本框通过 Oracle 中的存储过程传递了一个值。过程发生了变化,现在有 2 个参数,一个用于输入值,另一个用于返回整数值。

以下是 Oracle 程序:

procedure UnoxDataFix(p_shpmt_nbr in pkms.asn_hdr.shpmt_nbr%type, retval out integer) is
  begin
  retval:=0;
    for r in (
        -- simple select statement
        )
    loop    
     if(r.stat_code = 10 and r.whse_xfer_flag = 'Y')
     then     
        update pkms.asn_dtl ad 
          -- simple set statement
        update pkms.asn_hdr ah
          -- simple set statement
          where ah.shpmt_nbr = p_shpmt_nbr
           RETURNING 1 into retval;
        commit;   
      end if;    
    end loop;
  end;

这是我拥有的核心 C# 代码:

this.oraServer.ExecuteNonQuery(this.connectionString, CommandType.Text, "begin INTEGRATION.UnoxDataFix('" + input + "'); end;");

连接字符串有效。这只是给出错误的实际程序。“输入”值是发送到过程的实际值。但是为了将“retval”返回到站点,我不知道该怎么做。我已经尝试过谷歌搜索,但它没有帮助。我有点慢,所以欢迎所有评论。:)

4

1 回答 1

2

因为该过程现在需要 2 个参数,所以您需要提供 2 个参数而不仅仅是输入参数。另外,我更喜欢使用绑定变量来防止 sql 注入。(是的,您也可以为 OUT 参数使用绑定变量)。

begin INTEGRATION.UnoxDataFix(:input, :retval); end;

我不熟悉 C# 的细节,所以我无法帮助您使用插入和检索值的确切方法。

顺便说一句,这是一种什么样的命名约定?你的目标是不可读吗?:)

pkms.asn_hdr.shpmt_nbr

于 2012-06-22T14:25:16.317 回答