简体   繁体   English

“ASP.NET / C#中必须声明”pls-00201标识符

[英]“pls-00201 identifier must be declared” in ASP.NET/C#

I have the following stored procedure which I'd like to use in C#/.NET: 我有以下存储过程,我想在C#/ .NET中使用:

CREATE OR REPLACE
procedure contact_return(
    v_urn IN VARCHAR2,
    p_cursor OUT SYS_REFCURSOR )
AS
  sql_statement VARCHAR2(4000) := '        

  SELECT URN,
    FIRSTNAME,
    LASTNAME,
    TITLE,
    MOBILE,
    WORK,
    EMAIL
  FROM CONTACT
  WHERE urn = NVL(:1,v_contact_urn)';
BEGIN
  OPEN p_cursor FOR sql_statement USING v_urn;

Using this code, I get en error: PLS-00201: identifier 'CONTACT_RETURN' must be declared 使用此代码,我得到错误: PLS-00201:必须声明标识符'CONTACT_RETURN'

        OracleCommand cmd = new OracleCommand();
        cmd.Connection = conn;
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.CommandText = "contact_return";
        cmd.Parameters.Add("v_urn", OracleDbType.Int64).Value = null;
        cmd.Parameters.Add("p_cursor", OracleDbType.RefCursor).Direction = ParameterDirection.Output;

As far as I can see, I have declared the stored procedure ('contact_return') correctly, so cannot figure out why I'm getting this error. 据我所见,我已正确声明存储过程('contact_return'),因此无法弄清楚为什么我收到此错误。

Any help would be much appreciated, thank you :) 任何帮助将不胜感激,谢谢:)

shouldn;t this 不应该这样

CREATE OR REPLACE
procedure contact_return(
    v_urn IN VARCHAR2,
    p_cursor OUT SYS_REFCURSOR )
AS
  sql_statement VARCHAR2(4000) := '        

  SELECT URN,
    FIRSTNAME,
    LASTNAME,
    TITLE,
    MOBILE,
    WORK,
    EMAIL
  FROM CONTACT
  WHERE urn = NVL(:1,v_contact_urn)';
BEGIN
  OPEN p_cursor FOR sql_statement USING v_urn;

be

CREATE OR REPLACE
procedure contact_return(
    v_urn IN VARCHAR2,
    p_cursor OUT SYS_REFCURSOR )
AS
BEGIN
  DECLARE sql_statement VARCHAR2(4000) := '';        

  SELECT URN,
    FIRSTNAME,
    LASTNAME,
    TITLE,
    MOBILE,
    WORK,
    EMAIL
  FROM CONTACT
  WHERE urn = NVL(:1,v_contact_urn)';

  OPEN p_cursor FOR sql_statement USING v_urn;

END;

To call an Oracle store procedure containing OUT parameter of type SYS_REFCURSOR you need to use ODP.NET . 要调用包含SYS_REFCURSOR类型的OUT参数的Oracle存储过程,您需要使用ODP.NET
The template solution will be like this: 模板解决方案将如下所示:

using Oracle.DataAccess;
using Oracle.DataAccess.Client;

public DataTable Call_contact_return(string v_urn_value)
            {
                using (OracleConnection cn = new OracleConnection(DatabaseHelper.GetConnectionString()))
                {
                    OracleDataAdapter da = new OracleDataAdapter();
                    OracleCommand cmd = new OracleCommand();
                    cmd.Connection = cn;
                    cmd.InitialLONGFetchSize = 1000;
                    cmd.CommandText = DatabaseHelper.GetDBOwner() + "contact_return";
                    cmd.CommandType = CommandType.StoredProcedure;
                    cmd.Parameters.Add("v_urn", OracleDbType.Char).Value = v_urn_value;                    
                    cmd.Parameters.Add("p_cursor", OracleDbType.RefCursor).Direction = ParameterDirection.Output;

                    da.SelectCommand = cmd;
                    DataTable dt = new DataTable();
                    da.Fill(dt);
                    return dt;
                }
            }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM