簡體   English   中英

我怎樣才能在oracle中將參數作為varchar2

[英]how can I out a parameter as varchar2 in oracle

我正在使用oracle 10g

這是我的包裝規格和內容

CREATE OR REPLACE PACKAGE P_1 AS
    TYPE T_CURSOR IS REF CURSOR;
    PROCEDURE USP_1(SP_NUM OUT VARCHAR2);
END P_1;

CREATE OR REPLACE PACKAGE BODY P_1 AS
    PROCEDURE USP_1(SP_NUM OUT VARCHAR2) IS
    BEGIN
        SELECT to_char(concat(to_char(sysdate, 'yyyymm'),
                              to_char("ActionId".nextval, '000')))
            INTO SP_NUM FROM dual;
    END USP_1;
END P_1;

我的后端代碼是

using (OracleConnection oracleConnection = new BaseRepository().Connection)
{
    oracleConnection.Open();

    OracleCommand command = new OracleCommand("P_1.USP_1", oracleConnection);

    command.CommandType = System.Data.CommandType.StoredProcedure;
    command.Parameters.Add("SP_NUM", OracleDbType.Varchar2, 50,
                           System.Data.ParameterDirection.Output);

    command.ExecuteNonQuery();  // exception arises at this line

    var Number = Convert.ToInt32(command.Parameters["SP_REQ_NUM"].Value.ToString());

這是我得到的例外。

ORA-06502: PL/SQL: numeric or value error

我不知道我在哪里做錯了。

OracleParameterCollection.Add方法的重載不少於10個。 看來您不小心打錯了電話。

我相信您想要的是Add(string, OracleDbType, int, object, ParameterDirection) ,在這種情況下,您只是缺少object參數的值。 此參數應包含您正在使用的Oracle參數的初始值。 但是,對於您而言,初始值無關緊要,因為它是out參數。 50之后添加null ,您的存儲過程調用應會成功。

您調用的是Add(string, OracleDbType, object, ParameterDirection) 大小50已解釋為該參數的初始值。 我不確定如何解釋Oracle返回的錯誤(“數字或值錯誤”)–對我而言,這意味着Oracle嘗試將字符串轉換為數字並失敗。 也許值50會覆蓋類型OracleDbType.Varchar2 ,因此Oracle需要數字而不是字符串?

我發現了另外兩個問題:

  • command.Parameters["SP_REQ_NUM"]應該是command.Parameters["SP_NUM"]嗎?
  • 您的存儲過程不返回數字; 在諸如201405 001類的字符串上調用Convert.ToInt32將失敗。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM