![](/img/trans.png)
[英]Calling stored procedure from C# code in web application returns PL/SQL: numeric or value error: character string buffer too small
[英]PL/SQL: numeric or value error: character string buffer too small - app remotely published
我有以下存儲過程:
create or replace PROCEDURE TEST_REQUEST(
outHTML OUT VARCHAR2,
varParameters IN XMLTYPE)
IS
tmpVar NUMBER;
BEGIN
outHTML :=
'<table><tr><td>Test!</td></tr></table>';
EXCEPTION
WHEN NO_DATA_FOUND
THEN
NULL;
WHEN OTHERS
THEN
-- Consider logging the error and then re-raise
RAISE;
END TEST_REQUEST;
輸入參數'varParameters'=
'<test>
<testid>3DA736A8A4562E053D6</testid>
<testaction>Reject</testaction>
</test>'
當我調用上面的存儲過程時:
using (OracleConnection connection = new OracleConnection())
{
connection.ConnectionString = this.ConnectionString;
connection.Open();
using (OracleCommand command = new OracleCommand())
{
command.Connection = connection;
command.CommandType = CommandType.StoredProcedure;
command.BindByName = true;
command.CommandText = "TEST_OWNER.TEST_REQUEST ";
OracleParameter outHtml = command.Parameters.Add("outHTML", OracleDbType.Varchar2);
outHtml.Direction = ParameterDirection.Output;
outHtml.Size = Int16.MaxValue;
command.Parameters.Add("varParameters", OracleDbType.XmlType).Value = doc;
command.ExecuteNonQuery();
....
}
connection.Close();
}
當我在本地主機上運行它時一切正常,但是一旦遠程發布應用程序,我收到以下錯誤:
ORA-06502: PL/SQL: 數字或值錯誤: 字符串緩沖區太小\\nORA-06512: 在 \\"TEST_REQUEST \\"
我不知道什么可能導致異常。 out 參數的大小設置得相當高,我檢查了 ODAC 驅動程序,一切正常。 有什么想法嗎?
您可以尋找這 3 個解決方案。
1) 在運行腳本之前嘗試設置緩沖區大小。
SQL > set serveroutput on buffer 2560000
2)否則檢查您正在處理的數據。 似乎有一些字符串數據沒有正確引用,因此它正在崩潰。
3)或者可能是尺寸問題。 見下面的代碼。
查詢>
DECLARE
2 v_test VARCHAR2(1);
3 BEGIN
4 v_test := 'bananas';
5 END;
6 /
DECLARE * ERROR 在第 1 行:ORA-06502:PL/SQL:數字或值錯誤:字符串緩沖區太小 ORA-06512:在第 4 行
SQL> CREATE TABLE bananas (name VARCHAR2(1));
Table created.
SQL> INSERT INTO bananas (name) VALUES ('One banana two banana');
INSERT INTO bananas (name) VALUES ('One banana two banana')
*
第 1 行的錯誤:ORA-01401:插入的值對於列來說太大
試試這個:
OracleParameter outHtml = command.Parameters.Add("outHTML", OracleDbType.Varchar2, 32767).Direction = ParameterDirection.Output;
希望這有幫助!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.