C# PLS-00302:告诉我我的存储过程不是';t声明
以下是堆栈中发生错误的位置:C# PLS-00302:告诉我我的存储过程不是';t声明,c#,asp.net,oracle,plsql,ora-06550,C#,Asp.net,Oracle,Plsql,Ora 06550,以下是堆栈中发生错误的位置: public static IKSList<DataParameter> Search(int categoryID, int departmentID, string title) { Database db = new Database(DatabaseConfig.CommonConnString, DatabaseConfig.CommonSchemaOwner, "pkg_data_params_new"
public static IKSList<DataParameter> Search(int categoryID, int departmentID, string title)
{
Database db = new Database(DatabaseConfig.CommonConnString, DatabaseConfig.CommonSchemaOwner, "pkg_data_params_new", "spdata_params_search");
db.AddParameter("category_id", categoryID);
db.AddParameter("department_id", departmentID);
db.AddParameter("title", title, title.Length);
DataView temp = db.Execute_DataView();
IKSList<DataParameter> dps = new IKSList<DataParameter>();
foreach (DataRow dr in temp.Table.Rows)
{
DataParameter dp = new DataParameter();
dp.Load(dr);
dps.Add(dp);
}
return dps;
}
描述:在执行过程中发生未处理的异常
当前的web请求。请查看堆栈跟踪以了解更多信息
有关错误的信息及其在代码中的来源
异常详细信息:System.Data.OracleClient.OracleException:
ORA-06550:第1行第38列:PLS-00302:组件
“SPDATA_PARAMS_SEARCH”必须声明为ORA-06550:第1行第7列:
PL/SQL:忽略语句
源错误:
Line 161: db.AddParameter("title", title, title.Length);
Line 162:
Line 163: DataView temp = db.Execute_DataView();
Line 164:
Line 165: IKSList<DataParameter> dps = new IKSList<DataParameter>();
第161行:db.AddParameter(“title”,title,title.Length);
第162行:
第163行:DataView temp=db.Execute_DataView();
第164行:
第165行:IKSList dps=新的IKSList();
我的web.config指向了正确的位置和所有内容,因此我不知道这是从哪里来的。首先确保调用该过程的用户对该过程具有执行权限,其次,确保调用过程的用户可以直接使用schemaname.procedurename或同义词name.procedure name查看过程。同义词可以是public或private
希望有帮助janbo的答案很准确,给他一个投票权。下面是一个脚本,用于将其放入DB部署中,以确保不再发生这种情况: sqlplus@CreateSynonyms.sql
你确定你的应用程序是以有权访问该程序的用户身份连接的吗?我猜“spdata_params_search”应该是大写的。
Line 161: db.AddParameter("title", title, title.Length);
Line 162:
Line 163: DataView temp = db.Execute_DataView();
Line 164:
Line 165: IKSList<DataParameter> dps = new IKSList<DataParameter>();
-- CreateSynonyms.sql : Creates synonyms on XYZ_USER for all packages that don't already have synonyms
spool CreateSynonyms.log
DECLARE
owner VARCHAR2(20) := 'XYZ';
currentUser VARCHAR2(20);
executeLine VARCHAR2(200);
BEGIN
-- Get the user we're currently executing as
SELECT sys_context('USERENV', 'SESSION_USER') INTO currentUser FROM dual;
FOR x IN (SELECT p.table_name FROM user_tab_privs p
WHERE p.owner = owner
AND p.privilege = 'EXECUTE'
AND p.table_name NOT IN (
SELECT table_name FROM user_synonyms
WHERE table_owner = owner
)
) LOOP
executeLine := 'CREATE OR REPLACE SYNONYM ' || x.table_name || ' FOR ' || owner || '.' || x.table_name;
DBMS_OUTPUT.PUT_LINE(executeLine);
EXECUTE IMMEDIATE executeLine;
END LOOP;
END;
/
spool off