Oracle 无法识别存储过程的记录类型参数

Oracle 无法识别存储过程的记录类型参数,oracle,plsql,Oracle,Plsql,我正在尝试在Oracle中测试一个新创建的存储过程 我将存储过程添加到包中并成功编译了它。输入参数是记录类型 以下是脚本: SET serveroutput on; DECLARE p_trlr_rec trailer%ROWTYPE; BEGIN /* Call procedure within package, identifying schema if necessary */ TMS_SL_SQL_TRAILER.PR_UPDATE_DUE_INFO(p_trlr_r

我正在尝试在Oracle中测试一个新创建的存储过程

我将存储过程添加到包中并成功编译了它。输入参数是记录类型

以下是脚本:

SET serveroutput on;
DECLARE
  p_trlr_rec trailer%ROWTYPE;
BEGIN
    /* Call procedure within package, identifying schema if necessary */
    TMS_SL_SQL_TRAILER.PR_UPDATE_DUE_INFO(p_trlr_rec);
END;
我得到一个错误:

PLS-00306:调用“PR\u更新\u到期信息”时参数的数量或类型错误

在包文件中,参数的定义如下:

PROCEDURE PR_UPDATE_DUE_INFO
(p_rec         IN OUT rectype_trailer);

PROCEDURE PR_UPDATE_DUE_INFO
    (p_rec         IN OUT rectype_trailer);
我还尝试添加类型定义:

PROCEDURE PR_UPDATE_DUE_INFO
    (p_rec         IN OUT rectype_trailer);
但我也犯了同样的错误


为什么脚本无法识别记录定义?

那么脚本正在识别您的记录定义,它们都是。调用例程正在传递类型为“traile%ROWTYPE”的参数,但您的过程期望的是“rectype_traile”类型,即使在其他地方定义了“rectype_traile”,它们也不相同;因此,错误是错误的参数类型

您需要更改其中一个以匹配另一个。假设行类型定义正确,则需要将过程定义更改为

PROCEDURE PR_UPDATE_DUE_INFO
(p_rec         IN OUT trailer%ROWTYPE); 

简而言之,调用参数定义必须与被调用的过程定义完全匹配。

脚本正在识别您的记录定义,两者都是。调用例程正在传递类型为“traile%ROWTYPE”的参数,但您的过程期望的是“rectype_traile”类型,即使在其他地方定义了“rectype_traile”,它们也不相同;因此,错误是错误的参数类型

您需要更改其中一个以匹配另一个。假设行类型定义正确,则需要将过程定义更改为

PROCEDURE PR_UPDATE_DUE_INFO
(p_rec         IN OUT trailer%ROWTYPE); 
简而言之,调用参数定义必须与被调用过程定义完全匹配

程序请购单更新到期信息
(p_rec IN OUT rectype_trail)

因此,要编译此文件,您必须在某个地方声明该记录类型,希望是在包
TMS_SL_SQL_trail
的规范中。因此,您只需在调用代码中引用该声明:

DECLARE
  p_trlr_rec TMS_SL_SQL_TRAILER.rectype_trailer;
BEGIN
    /* Call procedure within package, identifying schema if necessary */
    TMS_SL_SQL_TRAILER.PR_UPDATE_DUE_INFO(p_trlr_rec);
END;
Oracle PL/SQL严格执行数据类型。具有相同结构的两种不同类型是两种不同的类型,编译器认为它们不兼容。因此,即使
TMS\u SL\u SQL\u TRAILER.rectype\u TRAILER
声明为
traile%ROWTYPE
,编译器在尝试解析调用代码时也会抛出

程序请购单更新到期信息
(p_rec IN OUT rectype_trail)

因此,要编译此文件,您必须在某个地方声明该记录类型,希望是在包
TMS_SL_SQL_trail
的规范中。因此,您只需在调用代码中引用该声明:

DECLARE
  p_trlr_rec TMS_SL_SQL_TRAILER.rectype_trailer;
BEGIN
    /* Call procedure within package, identifying schema if necessary */
    TMS_SL_SQL_TRAILER.PR_UPDATE_DUE_INFO(p_trlr_rec);
END;
Oracle PL/SQL严格执行数据类型。具有相同结构的两种不同类型是两种不同的类型,编译器认为它们不兼容。因此,即使
TMS\u SL\u SQL\u TRAILER.rectype\u TRAILER
声明为
traile%ROWTYPE
,编译器在尝试解析调用代码时也会抛出