【发布时间】:2010-10-06 11:47:23
【问题描述】:
我正在尝试从存储在包中的 proc 将 sequence.nextval 返回到我的程序。当谈到 PL/SQL 时,我是相当绿色的,我对正在发生的事情有点茫然。实际返回的错误是
PLS-00306:对 PROCGET_BOOKMARKID 第 1 行、第 7 列语句的调用中的参数数量或类型错误。
这是我的包创建代码...
创建或替换 包 BOOKMARKS AUTHID DEFINER 是 类型 t_Bookmark 是参考光标; 过程 procGet_Bookmarked_Information(bookmarkId in NUMBER, 书签出 t_Bookmark); 过程 procInsert_Bookmark(NUMBER 中的 bookmarkId,VARCHAR2 中的 currExtent,VARCHAR2 中的 selectedLayers); 过程 procGet_Bookmark_Id(bookmarkId out NUMBER); 结束书签;get_bookmark_id 的 proc 看起来像这样(其他 proc 工作正常,所以我不打算发布它们)...
procedure procGet_Bookmark_Id(bookmarkId out NUMBER)
IS
BEGIN
SELECT seq_bookmarks.nextval INTO bookmarkId
FROM dual;
END procGet_Bookmark_Id;
现在,我确定这不是我的顺序。如果我只是通过这样做直接从我的代码中查询数据库,我可以获得 nextval...
string sql = string.Format(@"select {0}.seq_bookmarks.nextval from dual", ApplicationSchema);
在这种情况下,应用程序架构就是我要连接的数据库。
所以,在我看来,问题完全出在我的 PL/SQL 中,这是有道理的,因为我几乎没有使用过它。有什么想法吗?
编辑 好的,这是实际进行调用的代码。
DataOperationResult result = DataAccess.GetBookmarkId();
DataRow currResult = result.DataTableResult.Rows[0];
DataAccess 是一个查询类,下面是这个特定查询的代码。
string sql = string.Format("{0}.bookmarks.procGet_Bookmark_Id", ApplicationSchema);
DataOperation operation = new DataOperation(DataOperationType.ExecuteScalar, ConnectionString, System.Data.CommandType.StoredProcedure, sql);
return operation.PerformOperation();
Application Schema 就是我们要查询的数据库。 ExecuteScalar 有点啰嗦,我没有编写的代码应该被认为可以工作(假设关键字)。希望这足以让您了解正在发生的事情。
【问题讨论】:
-
请问我们可以看到调用 procGet_Bookmark_Id 的代码吗?
-
快速检查...您的错误显示“PROCGET_BOOKMARKID”,而您的代码显示“procGet_Bookmark_Id”(带有额外的下划线)这只是 SOF 剥离下划线吗?
-
正在编辑。我认为它一定只是去掉了下划线,因为在我的代码中没有一个地方叫做 procget_bookmarkid。
标签: c# oracle stored-procedures plsql