Oracle SQL Developer:如何初始化存储过程的表类型参数?
Oracle SQL Developer调试时初始化关联数组类型参数的方法
你需要初始化的inventory_array是关联数组(Index-by Table),这类集合和游标返回的结果集类型不兼容,所以直接用游标赋值会报类型不匹配错误。以下是在Oracle SQL Developer调试器中正确初始化该参数的步骤:
调试器内直接初始化步骤
- 启动存储过程调试,进入参数配置界面(你提到的黄色高亮区域)
- 找到
P_INVENTORY_BIN_NUMBERS参数,点击参数值输入框右侧的数组编辑按钮(...) - 在弹出的数组编辑器中:
- 关联数组的索引为
BINARY_INTEGER类型,可输入1、2、3这类整数作为索引值 - 为每个索引对应填写
NUMBER(18)类型的数值(比如索引1填1001,索引2填1002)
- 关联数组的索引为
- 添加完成后点击确定,即可完成参数初始化
批量初始化的替代方法
如果需要批量赋值,可在调试器的「表达式」窗口中执行以下PL/SQL代码:
DECLARE l_inventory_arr PG_MV_INVENTORY_IUD.inventory_array; BEGIN l_inventory_arr(1) := 1001; l_inventory_arr(2) := 1002; l_inventory_arr(3) := 1003; -- 将初始化后的变量赋值给调试参数 :P_INVENTORY_BIN_NUMBERS := l_inventory_arr; END;
执行后,目标参数会被自动赋值。
你提供的包及包体声明
create or replace PACKAGE PG_MV_INVENTORY_IUD AS TYPE inventory_array IS TABLE of NUMBER(18) INDEX BY BINARY_INTEGER PROCEDURE ISSUE_INVENTORY (P_INVENTORY_BIN_NUMBERS IN inventory_array, P_INVENTORY_CODE IN VARCHAR2, P_COUNTY_CODE IN NUMBER, P_AGENCY_CODE IN NUMBER, P_PLATE_NUMBER IN VARCHAR2, P_AGENT_CUSTOMER_NUMBER IN VARCHAR2, P_DECAL_YEAR IN VARCHAR2, P_USED_DATE IN DATE, P_INVENTORY_CONFIG OUT VARCHAR2); END PG_MV_INVENTORY_IUD; create or replace PACKAGE BODY PG_MV_INVENTORY_IUD AS -------------------------------------------------------------------------------------------------- PROCEDURE ISSUE_INVENTORY_BIN_NUM (P_INVENTORY_BIN_NUMBERS IN inventory_array, P_INVENTORY_CODE IN VARCHAR2, P_COUNTY_CODE IN NUMBER, P_AGENCY_CODE IN NUMBER, P_PLATE_NUMBER IN VARCHAR2, P_DECAL_YEAR IN VARCHAR2, P_USED_DATE IN DATE, P_INVENTORY_CONFIG OUT VARCHAR2) AS Inv Inventory%rowtype; BEGIN
内容的提问来源于stack exchange,提问作者Kenya Roberts
相关产品推荐
相关产品推荐

