当前位置:  开发笔记 > 编程语言 > 正文

PL/SQL问题返回序列标量值

如何解决《PL/SQL问题返回序列标量值》经验,为你挑选了1个好方法。

我试图从存储在包中的proc返回sequence.nextval到我的程序.在谈到PL/SQL时,我非常环保,而且我对发生的事情感到很茫然.实际返回的错误是

PLS-00306:调用PROCGET_BOOKMARKID第1行时,参数的数量或类型错误,第7列语句被忽略.

这是我的包创建代码......

create or replace
package BOOKMARKS AUTHID DEFINER is
  type t_Bookmark is ref cursor;

  procedure procGet_Bookmarked_Information(bookmarkId in NUMBER, bookmark out t_Bookmark);
  procedure procInsert_Bookmark(bookmarkId in NUMBER, currExtent in VARCHAR2, selectedLayers in VARCHAR2);
  procedure procGet_Bookmark_Id(bookmarkId out NUMBER);

end BOOKMARKS; 

并且get_bookmark_id的proc看起来像这样(其他的procs工作正常,所以我不打算发布它们)...

  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是一种啰嗦的代码,我编写的代码应该被认为是可行的(假定关键字).希望这足以让我知道发生了什么.



1> Quassnoi..:

我刚刚编译了你的包,PL/SQL Developer它工作正常.

问题似乎与C#代码中的数据类型有关.

从我在描述中看到的,你不绑定任何参数.您应该在代码中的某处绑定参数,例如

OracleParameter bid = new OracleParameter("bookmarkID", OracleDbType.Number);
bid.Direction = ParameterDirection.Output;
command.Parameters.Add(bid);

如果您需要处理大量抽象,您可以将程序重新定义为函数:

FUNCTION procGet_Bookmark_Id RETURN INTEGER
IS
  res INTEGER;
BEGIN
  SELECT seq_bookmarks.nextval
  INTO res
  FROM dual;
  RETURN res;
END procGet_Bookmark_Id;

并在SELECT查询中调用它:

SELECT bookmarks.procGet_Bookmark_id FROM dual;

,你似乎能够做到.

推荐阅读
爱唱歌的郭少文_
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有