Oracle 无法识别存储过程的记录类型参数
我正在尝试在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
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
,编译器在尝试解析调用代码时也会抛出