首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >请-00323:子程序或游标

请-00323:子程序或游标
EN

Stack Overflow用户
提问于 2018-09-14 11:20:27
回答 2查看 4K关注 0票数 0

我知道这方面最常见的问题是不同的名称或参数。除非我的眼睛真的很差,否则这里不是这样的:

代码语言:javascript
运行
复制
CREATE OR REPLACE PACKAGE my_api IS
  PROCEDURE sync_batch(x_return_status      OUT VARCHAR2);
END my_api;
/

CREATE OR REPLACE PACKAGE BODY my_api IS
  PROCEDURE sync_batch(x_return_status      OUT VARCHAR2) IS
  BEGIN
    x_return_status := 'test';
  END sync_batch;
END my_api;
/

这导致:

包体MY_API: PLS-00323:子程序或游标'SYNC_BATCH‘的错误在包规范中声明,必须在包体中定义。

当我在测试环境中使用sqlplus 11.2.0.1.064位连接到12.1.0.2.064位数据库时,就会发生这种情况。当我使用sqlplus 11.2.0.1.0连接到我们客户的11.2.0.1.064位数据库时,不会发生这种情况。我可以添加更多的过程,但是这个sync_batch过程总是会出现错误。重命名这个过程也不能解决这个问题,所以我不认为它是一个保留的名称或什么的。

有人知道还会发生什么吗?

更新2018-09-17: -这太奇怪了.我删除了整个代码,并再次输入它,现在错误消失了。

当我在我的完整代码中做同样的事情时,该过程的错误消失了--但是在下一个过程中重新出现,不是直接下一个过程,而是后面的那个过程。

我在VisualStudio2017中输入了一个.sql文件,在此之前和重新键入它时都是如此,并从那里复制了代码,以便在SQLPlus中执行。会不会是编码问题?VS表示有签名的UTF-8,代码页65001,行尾=当前设置。我的Oracle数据库使用NLS_CHARACTERSET = WE8MSWIN1252

EN

回答 2

Stack Overflow用户

发布于 2018-09-14 11:44:54

只是尝试用您给出的确切脚本创建包和包主体。通过IDE和SQLPlus成功地创建和编译了(但是,我使用了12*版本的SQLPlus)。

您是否按照正确的顺序创建包对象--首先是标头,然后是正文?当您创建包含编译错误的包,然后尝试重新编译它时,会发生什么?这不管用吗?

我知道SQLPlus在脚本中的空行有问题,所以在通过SQLPlus执行脚本时一定不要使用它们。

票数 0
EN

Stack Overflow用户

发布于 2018-09-14 11:54:51

与您所拥有的版本相同:

  • 客户端11.2.0.1.0
  • 数据库12.1.0.2.0 64位

工作正常。所以..。不知道。一个愚蠢的建议,当然,但是-你能弹出数据库吗?

代码语言:javascript
运行
复制
M:\>sqlplus scott@orcl

SQL*Plus: Release 11.2.0.1.0 Production on Pet Ruj 14 13:50:04 2018

Copyright (c) 1982, 2010, Oracle.  All rights reserved.

Enter password:

Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
Advanced Analytics and Real Application Testing options

SQL> set linesize 200
SQL> SELECT * FROM v$version;

BANNER                                                                               CON_ID
-------------------------------------------------------------------------------- ----------
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production              0
PL/SQL Release 12.1.0.2.0 - Production                                                    0
CORE    12.1.0.2.0      Production                                                        0
TNS for Linux: Version 12.1.0.2.0 - Production                                            0
NLSRTL Version 12.1.0.2.0 - Production                                                    0

SQL> CREATE OR REPLACE PACKAGE my_api
  2  IS
  3     PROCEDURE sync_batch (x_return_status OUT VARCHAR2);
  4  END my_api;
  5  /

Package created.

SQL> CREATE OR REPLACE PACKAGE BODY my_api
  2  IS
  3     PROCEDURE sync_batch (x_return_status OUT VARCHAR2)
  4     IS
  5     BEGIN
  6        x_return_status := 'test';
  7     END sync_batch;
  8  END my_api;
  9  /

Package body created.

SQL>
SQL> DROP PACKAGE my_api;

Package dropped.

SQL>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52330921

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档