2

Oracleにいくつかのパラメーターを持つストアドプロシージャがあり、C#(httpハンドラー)から呼び出していますが、例外が発生することがあります。

PLS-00306:'PROC_ADD _...'の呼び出しで引数の数またはタイプが正しくありませ
んORA-06550:1行7列:
PL / SQL:文が無視されました

私は間違った数やタイプの意味を知っています。これは、プロシージャ呼び出しのすべてのパラメータに値を指定していないことを意味します。

私の質問はこれです私は次のstring.trim()ようにすべてのパラメータ値で関数を使用しました

だからそれはエラーを与えるはずですまたはobject referenceまたは私はどこかで間違っています。

var prm = new OracleParameter[8];
prm[0] = Command.Parameters.Add(new OracleParameter("IP_ACTION", OracleType.VarChar, 20));
prm[0].Value = pobjCustomerProps.Action.Trim();
prm[1] = Command.Parameters.Add(new OracleParameter("IOP_CUSTOMER_UID", OracleType.VarChar, 30));
prm[1].Direction = ParameterDirection.InputOutput;
prm[1].Value = pobjCustomerProps.CustomerID.Trim();

prm[2] = Command.Parameters.Add(new OracleParameter("IP_MOBILE_NO", OracleType.VarChar, 50));
prm[2].Value = objEncryption.Encrypt(pobjCustomerProps.MobileNo.Trim());
prm[3] = Command.Parameters.Add(new OracleParameter("IP_CUSTOMER_NAME", OracleType.VarChar, 200));
prm[3].Value = pobjCustomerProps.CustomerName==""? "": objEncryption.Encrypt(pobjCustomerProps.CustomerName.Trim());

 prm[4] = Command.Parameters.Add(new OracleParameter("IP_EMAILID", OracleType.VarChar, 500));
 prm[4].Value = pobjCustomerProps.EmailID == "" ? "" : objEncryption.Encrypt(pobjCustomerProps.EmailID.Trim());

 prm[5] = Command.Parameters.Add(new OracleParameter("IP_MODEL_CODE", OracleType.VarChar, 10));
 prm[5].Value = pobjCustomerProps.ModelCode.Trim();

 prm[6] = Command.Parameters.Add(new OracleParameter("IP_USER_UID", OracleType.VarChar, 10));
 prm[6].Value = pobjCustomerProps.UserUID.Trim();

var lobjparamErrorCode = new OracleParameter("OP_ERROR_CODE", OracleType.Number) { Direction = ParameterDirection.Output };
prm[7] = Command.Parameters.Add(lobjparamErrorCode);

これが私のspの定義です

 PROCEDURE PROC_ADD_DETAILS_V1
(
    IP_ACTION IN VARCHAR2,
    IOP_CUSTOMER_UID IN OUT DIGICALL.CUSTOMER_DTL.CUSTOMER_UID%TYPE,
    IP_MOBILE_NO IN DIGICALL.CUSTOMER_DTL.MOBILE_NO%TYPE,
    IP_CUSTOMER_NAME IN DIGICALL.CUSTOMER_DTL.CUSTOMER_NAME%TYPE,
    IP_EMAILID IN DIGICALL.CUSTOMER_DTL.EMAIL_ID%TYPE,
    IP_MODEL_CODE IN  DIGICALL.CUSTOMER_DTL.MODEL_CODE%TYPE,
    IP_USER_UID IN DIGICALL.CUSTOMER_DTL.USER_UID%TYPE,
    OP_ERROR_CODE OUT NUMBER        
)
4

3 に答える 3

3

うまくいかないことがいくつかあります:

  • パラメータの数が間違っている可能性があります。あなたの場合は大丈夫のようです。
  • 間違ったタイプのパラメーターを使用している可能性があります(データ型に関して、入力/出力に関して)。あなたの場合、入出力は問題ないようです。ストアドプロシージャ定義が他のオブジェクトを参照しているため、データ型を説明から派生させることはできません。
  • 引数を間違った順序で指定できます(したがって、タイプが間違っています)。デフォルトでは、各パラメーターに名前を付けていても、パラメーターは位置によってバインドされることに注意してください。これは、ODP.NETクラスとSystem.Data.OracleClientクラスのどちらを使用するかによって部分的に異なります。あなたの場合、それは問題ではないようです。
  • CommandTextがパラメータと一致していない可能性があります。それはあなたの質問に欠けているので、私たちは言うことができません。

String.trim()確かに問題ではありません。

于 2012-08-30T11:17:49.987 に答える
2

私はこのエラーを受け取りました、そしてそれは完全な赤いニシンでした。

ここに画像の説明を入力してください

Oracleクライアント11.2と9.2の両方がインストールされました。x86アプリケーションを備えたx64ビットサーバー。

この問題は、11.2をアンインストールし、 OraOLEDB.Oracle.1の代わりにmsdaora.1を使用するように接続文字列を変更することで解決されました。

Alex Keh-プロダクトマネージャー-オラクルは、これが機能する理由を説明しています:https ://community.oracle.com/thread/2491412

これが他の誰かの髪の毛の束と欲求不満の日を救うことを願っています。

于 2017-07-11T04:31:48.583 に答える
0

同様の問題が発生しましたが、接続文字列を変更して含める必要がありました

ProviderName = "Oracle.ManagedDataAccess.Client"

それ以外の

ProviderName = "Oracle.DataAccess.Client"

于 2019-01-16T23:34:05.483 に答える