You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

咨询PL/SQL包中添加变量类型及自定义ROT_TMLN_ARRAY类似类型的方法

PL/SQL包类型定义与自定义数组类型创建指南

一、在PL/SQL包中添加变量类型

PL/SQL包分**规范(PACKAGE)和体(PACKAGE BODY)**两部分,类型定义要放在对应位置:

  • 若类型需要被外部程序调用,就定义在包规范的开头;
  • 若只是包内部使用的私有类型,放在包体的DECLARE块里即可。

结合你的参考代码,正确的包结构示例如下:

-- 包规范:定义对外可见的类型和存储过程声明
CREATE OR REPLACE PACKAGE PKG_TMLN AS
    -- 先定义基础记录类型(ROT_TMLN_ARRAY基于该记录创建)
    TYPE ROT_TMLN_REC IS RECORD (
        emp_id VARCHAR2(20),
        rot_date DATE,
        dept VARCHAR2(50)
        -- 按实际业务需求添加字段
    );
    -- 定义目标数组类型ROT_TMLN_ARRAY
    TYPE ROT_TMLN_ARRAY IS TABLE OF ROT_TMLN_REC INDEX BY PLS_INTEGER;
    
    -- 声明存储过程
    PROCEDURE SP_TMLN_SVC (
        rotnPrngNb IN VARCHAR2,
        empiRotnDetails OUT ROT_TMLN_ARRAY
    );
END PKG_TMLN;
/

-- 包体:实现存储过程的具体逻辑
CREATE OR REPLACE PACKAGE BODY PKG_TMLN AS
    PROCEDURE SP_TMLN_SVC (
        rotnPrngNb IN VARCHAR2,
        empiRotnDetails OUT ROT_TMLN_ARRAY
    ) IS
    BEGIN
        -- 示例:给输出数组赋值
        empiRotnDetails(1).emp_id := 'E001';
        empiRotnDetails(1).rot_date := SYSDATE;
        empiRotnDetails(1).dept := '技术部';
    END SP_TMLN_SVC;
END PKG_TMLN;
/

二、在SQL Developer中使用ROT_TMLN_ARRAY类型

  1. 先确保包规范编译通过,SQL Developer会自动识别包内定义的类型;
  2. 测试存储过程可通过匿名块调用,示例代码:
DECLARE
    v_result PKG_TMLN.ROT_TMLN_ARRAY;
BEGIN
    PKG_TMLN.SP_TMLN_SVC('PRNG001', v_result);
    -- 遍历数组输出结果,需提前打开SQL Developer的DBMS输出窗口
    FOR i IN 1..v_result.COUNT LOOP
        DBMS_OUTPUT.PUT_LINE('员工ID: ' || v_result(i).emp_id || ' 轮岗日期: ' || v_result(i).rot_date);
    END LOOP;
END;
/

执行后在DBMS Output面板即可查看输出内容。

三、基于ROT_TMLN_ARRAY创建类似的自定义类型

有两种常用方式,按需选择:

1. 包内新增同结构自定义类型

如果仅在当前包内使用,直接在包规范中添加即可:

CREATE OR REPLACE PACKAGE PKG_TMLN AS
    TYPE ROT_TMLN_REC IS RECORD (
        emp_id VARCHAR2(20),
        rot_date DATE,
        dept VARCHAR2(50)
    );
    TYPE ROT_TMLN_ARRAY IS TABLE OF ROT_TMLN_REC INDEX BY PLS_INTEGER;
    
    -- 新增部门轮岗数组类型,结构与ROT_TMLN_ARRAY类似
    TYPE DEPT_ROT_REC IS RECORD (
        dept_id VARCHAR2(10),
        rot_start DATE,
        rot_end DATE
    );
    TYPE DEPT_ROT_ARRAY IS TABLE OF DEPT_ROT_REC INDEX BY PLS_INTEGER;
    
    PROCEDURE SP_TMLN_SVC (
        rotnPrngNb IN VARCHAR2,
        empiRotnDetails OUT ROT_TMLN_ARRAY
    );
END PKG_TMLN;
/

2. 创建全局自定义类型(跨包可用)

如果需要多个包或SQL语句共享该类型,可创建SQL级别的全局类型:

-- 先创建全局记录类型
CREATE OR REPLACE TYPE ROT_TMLN_REC_TYPE AS OBJECT (
    emp_id VARCHAR2(20),
    rot_date DATE,
    dept VARCHAR2(50)
);
/
-- 再创建全局数组类型
CREATE OR REPLACE TYPE ROT_TMLN_ARRAY_TYPE AS TABLE OF ROT_TMLN_REC_TYPE;
/

之后在任意包或匿名块中都可直接引用该全局类型:

CREATE OR REPLACE PACKAGE PKG_TMLN AS
    PROCEDURE SP_TMLN_SVC (
        rotnPrngNb IN VARCHAR2,
        empiRotnDetails OUT ROT_TMLN_ARRAY_TYPE
    );
END PKG_TMLN;
/

内容的提问来源于stack exchange,提问作者bazinga01

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 20:33:22