我是 oracle 新手,但我在 oracle 的包中创建一个过程,我收到此错误消息 谁能看到我做错了啥?

Posted

技术标签:

【中文标题】我是 oracle 新手,但我在 oracle 的包中创建一个过程,我收到此错误消息 谁能看到我做错了啥?【英文标题】:I am new to oracle but I am creating a procedure in a package in oracle and I get this Error Message Can anyone see what i am doing wrong?我是 oracle 新手,但我在 oracle 的包中创建一个过程,我收到此错误消息 谁能看到我做错了什么? 【发布时间】:2013-10-02 19:38:17 【问题描述】:

“错误(33,13):PLS-00323:子程序或游标'USP_CHECK_USER_ADMIN'在包规范中声明,必须在包主体中定义”

create or replace 
PACKAGE         PKG_CUST_XREF1 AS

PROCEDURE USP_ADD_CUSTOMER
(
   p_CUST_ID IN MDW.CUSTOMER_STRUCTURE_XREF.CUST_ID%TYPE
   , p_ADDR_SUF IN MDW.CUSTOMER_STRUCTURE_XREF.ADDR_SUF%TYPE
   , p_PLAN_SYS_ID_SOURCE_CD IN MDW.CUSTOMER_STRUCTURE_XREF.PLAN_SYS_ID_SOURCE_CD%TYPE
   , p_REGION_ID IN MDW.CUSTOMER_STRUCTURE_XREF.REGION_ID%TYPE
   , p_COMPANY_ID IN MDW.CUSTOMER_STRUCTURE_XREF.COMPANY_ID%TYPE
   , p_REP_ID IN MDW.CUSTOMER_STRUCTURE_XREF.REP_ID%TYPE
   , p_TYPE_ID IN MDW.CUSTOMER_STRUCTURE_XREF.TYPE_ID%TYPE
   , p_EXTERNAL_ACCT_NO IN MDW.CUSTOMER_STRUCTURE_XREF.EXTERNAL_ACCT_NO%TYPE
   , p_REGION_NAME IN MDW.CUSTOMER_STRUCTURE_XREF.REGION_NAME%TYPE
   , p_COMPANY_NAME IN MDW.CUSTOMER_STRUCTURE_XREF.COMPANY_NAME%TYPE
   , p_SUF_NAME IN MDW.CUSTOMER_STRUCTURE_XREF.SUF_NAME%TYPE
   , p_CUST_NAME IN MDW.CUSTOMER_STRUCTURE_XREF.CUST_NAME%TYPE
   , p_INDUSTRY_TYPE_DESC IN MDW.CUSTOMER_STRUCTURE_XREF.INDUSTRY_TYPE_DESC%TYPE
   , p_CHANNEL_TYPE_DESC IN MDW.CUSTOMER_STRUCTURE_XREF.CHANNEL_TYPE_DESC%TYPE
   , p_INDUSTRY_SPECIALIST_ID IN MDW.CUSTOMER_STRUCTURE_XREF.INDUSTRY_SPECIALIST_ID%TYPE
   , p_CUSTOMER_CLASS IN MDW.CUSTOMER_STRUCTURE_XREF.CUSTOMER_CLASS%TYPE
   , p_ORA_CUST_ID IN MDW.CUSTOMER_STRUCTURE_XREF.ORA_CUST_ID%TYPE
   , p_STATUS IN MDW.CUSTOMER_STRUCTURE_XREF.STATUS%TYPE
);
END PKG_CUST_XREF1;

/* BODY!!*/

create or replace 
PACKAGE BODY         PKG_CUST_XREF1
IS
PROCEDURE USP_ADD_CUSTOMER(
   p_CUST_ID IN MDW.CUSTOMER_STRUCTURE_XREF.CUST_ID%TYPE
   , p_ADDR_SUF IN MDW.CUSTOMER_STRUCTURE_XREF.ADDR_SUF%TYPE
   , p_PLAN_SYS_ID_SOURCE_CD IN MDW.CUSTOMER_STRUCTURE_XREF.PLAN_SYS_ID_SOURCE_CD%TYPE
   , p_REGION_ID IN MDW.CUSTOMER_STRUCTURE_XREF.REGION_ID%TYPE
   , p_COMPANY_ID IN MDW.CUSTOMER_STRUCTURE_XREF.COMPANY_ID%TYPE
   , p_REP_ID IN MDW.CUSTOMER_STRUCTURE_XREF.REP_ID%TYPE
   , p_TYPE_ID IN MDW.CUSTOMER_STRUCTURE_XREF.TYPE_ID%TYPE
   , p_EXTERNAL_ACCT_NO IN MDW.CUSTOMER_STRUCTURE_XREF.EXTERNAL_ACCT_NO%TYPE
   , p_REGION_NAME IN MDW.CUSTOMER_STRUCTURE_XREF.REGION_NAME%TYPE
   , p_COMPANY_NAME IN MDW.CUSTOMER_STRUCTURE_XREF.COMPANY_NAME%TYPE
   , p_SUF_NAME IN MDW.CUSTOMER_STRUCTURE_XREF.SUF_NAME%TYPE
   , p_CUST_NAME IN MDW.CUSTOMER_STRUCTURE_XREF.CUST_NAME%TYPE
   , p_INDUSTRY_TYPE_DESC IN MDW.CUSTOMER_STRUCTURE_XREF.INDUSTRY_TYPE_DESC%TYPE
   , p_CHANNEL_TYPE_DESC IN MDW.CUSTOMER_STRUCTURE_XREF.CHANNEL_TYPE_DESC%TYPE
   , p_INDUSTRY_SPECIALIST_ID IN MDW.CUSTOMER_STRUCTURE_XREF.INDUSTRY_SPECIALIST_ID%TYPE
   , p_CUSTOMER_CLASS IN MDW.CUSTOMER_STRUCTURE_XREF.CUSTOMER_CLASS%TYPE
   , p_ORA_CUST_ID IN MDW.CUSTOMER_STRUCTURE_XREF.ORA_CUST_ID%TYPE
   , p_STATUS IN MDW.CUSTOMER_STRUCTURE_XREF.STATUS%TYPE)
 IS

 BEGIN
   INSERT INTO MDW.CUSTOMER_STRUCTURE_XREF
   (
   CUST_ID
   , ADDR_SUF
   , PLAN_SYS_ID_SOURCE_CD
   , REGION_ID
   , COMPANY_ID
   , REP_ID
   , TYPE_ID
   , EXTERNAL_ACCT_NO
   , REGION_NAME
   , COMPANY_NAME
   , SUF_NAME
   , CUST_NAME
   , INDUSTRY_TYPE_DESC
   , CHANNEL_TYPE_DESC
   , INDUSTRY_SPECIALIST_ID
   , CUSTOMER_CLASS
   , ORA_CUST_ID
   , STATUS
    ) 
   VALUES (
   p_CUST_ID
   , p_ADDR_SUF
   , p_PLAN_SYS_ID_SOURCE_CD
   , p_REGION_ID
   , p_COMPANY_ID
   , p_REP_ID
   , p_TYPE_ID
   , p_EXTERNAL_ACCT_NO
   , p_REGION_NAME
   , p_COMPANY_NAME
   , p_SUF_NAME
   , p_CUST_NAME
   , p_INDUSTRY_TYPE_DESC
   , p_CHANNEL_TYPE_DESC
   , p_INDUSTRY_SPECIALIST_ID
   , p_CUSTOMER_CLASS
   , p_ORA_CUST_ID
   , p_STATUS);

  COMMIT;

END USP_ADD_CUSTOMER;

END PKG_CUST_XREF1;

【问题讨论】:

我在示例源代码中找不到单词 USP_CHECK_USER_ADMIN。但它是相关的。 将 USP_CHECK_USER_ADMIN 的实现添加到正文中(或从规范中删除) 规范或正文中都没有USP_CHECK_USER_ADMIN,因此无法回答实际的错误消息。通常,请确保签名(参数名称、参数计数、参数类型)全部匹配。此外,如果这是一个单独的脚本,您需要在包规范之后使用斜杠 (/) - 比如说在毫无意义的 /* BODY!! */ 评论之前。 包中存在COMMIT 通常是错误的形式。方法的调用者应该决定何时提交。 也许当前版本的数据库编译的包规范中还有 USP_CHECK_USER_ADMIN 过程;如果不需要,请在编译新包体之前重新编译包规范。 【参考方案1】:

是的,我们可以看到您做错了什么 - PL/SQL 编译器会告诉您确切的原因:

PLS-00323: subprogram or cursor 'USP_CHECK_USER_ADMIN' is declared in a package
specification and must be defined in the package body

如果您在理解错误消息时遇到问题,请参阅PL/SQL Packages 的包正文一章。

您可能也应该阅读整个Oracle Database PL/SQL Language Reference。

【讨论】:

以上是关于我是 oracle 新手,但我在 oracle 的包中创建一个过程,我收到此错误消息 谁能看到我做错了啥?的主要内容,如果未能解决你的问题,请参考以下文章

我是springboot新手,需要在oracle表中插入json数据,避免重复插入

基本的 oracle 更新语句

需要oracle查询[重复]

TOAD for Oracle - 自动完成

如何在jdbc中执行oracle程序

在 Docker 中连接 Apache Kafka 和 Oracle DB 的最简单方法