我是 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 的包中创建一个过程,我收到此错误消息 谁能看到我做错了啥?的主要内容,如果未能解决你的问题,请参考以下文章