簡體   English   中英

PLS-00201:必須聲明標識符“ schema.cursorname”

[英]PLS-00201: identifier 'schema.cursorname' must be declared

我知道這里還有兩個完全相同的問題,但是我100%肯定我沒有任何類型的權限問題。 該過程可以從查詢編輯器中很好地執行,但是由於某種原因,我無法從一個非常簡單的ASP.net頁面執行此proc。 我應該注意,這是我第一次創建Oracle Proc。

這是我的代碼,調用proc(只是嘗試調用它並將結果強制放入標簽中)

    string oradb = "connection string here";

    OracleConnection conn = new OracleConnection(oradb);

    OracleCommand cmd = new OracleCommand();
    cmd.Connection = conn;
    cmd.CommandText = "x.GETCURSORS";
    cmd.CommandType = CommandType.StoredProcedure;

    OracleParameter ACTNUM = new OracleParameter();
    ACTNUM.OracleDbType = OracleDbType.Decimal;
    ACTNUM.Direction = ParameterDirection.Input;
    ACTNUM.Value ="12345";
    cmd.Parameters.Add(ACTNUM);

    OracleParameter REJECTS_C = new OracleParameter();
    REJECTS_C.OracleDbType = OracleDbType.RefCursor;
    REJECTS_C.Direction = ParameterDirection.Output;
    cmd.Parameters.Add(REJECTS_C);


    try
    {
        conn.Open();
        OracleDataReader objReader = cmd.ExecuteReader();
        Label3.Text = objReader.ToString();
    }
    catch (Exception ex)
    {
        Label3.Text = string.Format("Exception: {0}", ex.ToString());

    }

包裝規格:

PACKAGE "x"."REJECTS_DATA" IS

PROCEDURE "GETCURSORS" (
"ACTNUM" IN NUMBER, 
"REJECTS_C" OUT SYS_REFCURSOR);

 END "REJECTS_DATA";

包裝體:

PACKAGE BODY "x"."REJECTS_DATA" IS

PROCEDURE "GETCURSORS" (
"ACTNUM" IN NUMBER, 
"REJECTS_C" OUT SYS_REFCURSOR) IS

BEGIN

OPEN REJECTS_C FOR SELECT * FROM x.a
WHERE  x.a.ACCOUNT = ACTNUM;

END "GETCURSORS";

END "REJECTS_DATA";

假設架構名稱為X ,程序包名稱為REJECTS_DATA ,過程名稱為GETCURSORS ,則至少需要使用以下命令:

cmd.CommandText = "x.REJECTS_DATA.GETCURSORS";

如果您實際上在PL / SQL中使用區分大小寫的標識符(強烈建議避免使用),則還需要在過程名稱中使用區分大小寫的標識符。

我們在代碼中遇到了相同的問題,因此不得不將SCHEMA_NAME排除在C#的proc調用之外,即PACKAGE_NAME.PROC_NAME。 我們通過在數據庫中使用SCHEMA_NAME創建同義詞來解決了這一問題

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM