[英]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.