oracle - 无法识别存储过程的记录类型参数
问题描述
我正在尝试在 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_UPDATE_DUE_INFO”时参数的数量或类型错误
在包文件中,参数定义如下:
PROCEDURE PR_UPDATE_DUE_INFO
(p_rec IN OUT rectype_trailer);
PROCEDURE PR_UPDATE_DUE_INFO
(p_rec IN OUT rectype_trailer);
我还尝试添加 TYPE 定义:
PROCEDURE PR_UPDATE_DUE_INFO
(p_rec IN OUT rectype_trailer);
但我得到同样的错误。
为什么脚本不能识别记录定义?
解决方案
PROCEDURE PR_UPDATE_DUE_INFO (p_rec IN OUT rectype_trailer);
因此,要编译,您必须在某处声明该记录类型,希望在 package 的规范中TMS_SL_SQL_TRAILER
。因此,您只需在调用代码中引用该声明:
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_SL_SQL_TRAILER.rectype_trailer
被声明为 of ,编译器也会崩溃trailer%ROWTYPE
。
推荐阅读
- sql - Excel中的表差异
- wordpress - 我的 Wordpress 提要在哪里?
- php - 使用下拉菜单插入数据库
- c++ - 崩溃发生:std::local_Rb_tree_increment,std::local_Rb_tree_increment
- swift3 - 在设置标签的 textColor 时展开可选值时发现 nil
- asp.net-mvc - 如何在 Asp.Net-Mvc 中使用星级的 ajax 调用服务?
- php - 使用 Google Cloud Vision 服务时 PHP 出现未知错误
- android - android中的人脸识别认证
- powerbi - Power BI 嵌入代码从服务器引发 403 禁止错误
- c# - C#中二进制值之间的异或运算