我正在嘗試使用 Dapper 呼叫一些我需要運行的 Oracle SQL 陳述句,但出現此錯誤
ORA-06502: PL/SQL: numeric or value error: DML Returning: Error writing to host variable
ORA-06512: at line 11
我目前有下面的代碼,我只是在獲取生成的NewNameAddRKey 的新密鑰時遇到問題我在引數中將其作為輸出傳遞,但出現上述錯誤,R_KEY 列是VARCHAR2(5 BYTE)列,所以出于某種原因,它無法將其轉換為字串?,我真的可以在這方面提供一些幫助,因為它的運行速度非常慢。
var parameters = new DynamicParameters(rowToAdd);
parameters.Add(name: "NewNameAddRKey", dbType: DbType.String, direction: ParameterDirection.Output);
parameters.Add(name: "firstCharacterOfName", value: rowToAdd.FirstCharacterOfName, dbType: DbType.String, direction: ParameterDirection.Input);
await context.Connection.ExecuteAsync(
@"
DECLARE
initialChar VARCHAR2(1) := :firstCharacterOfName;
startsWith VARCHAR2(1) := 'L';
newKey VARCHAR2(5);
status NUMBER;
message VARCHAR2(200);
BEGIN
CUSTOMER_PKG.name_add_key(initialChar, startsWith, newKey, status, message);
INSERT INTO NAME_ADD(R_KEY, ADDRESS_1, ADDRESS_2,ADDRESS_3, ADDRESS_4, POST_CODE, CONTACT, FAX_NO, NAME, PHONE_NO, TELEX_NO)
VALUES(newKey, :AddressLine1, :AddressLine2, :AddressLine3, :AddressLine4, :PostCode, :OfficeContact, :Fax, :Name, :HomePhone, :Telex)
RETURNING R_KEY INTO :NewNameAddRKey;
END;",
parameters,
context.Transaction);
uj5u.com熱心網友回復:
在您發布的代碼中,定義的字串變數沒有大小,而在 Oracle 中,這種型別的每個變數都必須具有預定義的長度。
Dapper 可能定義了一些默認長度,這在您的情況下是不夠的。
正如我們在評論中所討論的,這是解決方案:
parameters.Add(name: "NewNameAddRKey",
dbType: DbType.String,
/* --> */ size: 5, /* <--- */
direction: ParameterDirection.Output);
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/376656.html
上一篇:基于內連接從表中洗掉記錄
