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

Oracle自定义类型调用报错PLS-00302:DBMS_PICKLER组件未声明

解决方案:ORA-06550: component 'DBMS_PICKLER' must be declared

1. 授予DBMS_PICKLER包执行权限

JDBC驱动处理自定义集合类型时会隐式调用SYS用户下的DBMS_PICKLER包,当前数据库用户缺少该权限导致报错。执行以下SQL授权:

GRANT EXECUTE ON SYS.DBMS_PICKLER TO [你的数据库用户名];

2. 修正Spring SimpleJdbcCall的类型配置

确保在调用函数时正确映射自定义VARRAY类型,指定类型名称(Oracle默认大写)和对应的Oracle类型:

SimpleJdbcCall jdbcCall = new SimpleJdbcCall(jdbcTemplate)
    .withFunctionName("TEST")
    .declareParameters(
        new SqlParameter("P_NUMBER_LIST", OracleTypes.ARRAY, "NUM_ARRAY")
    );

3. 验证自定义数组类型实现类

确保OracleNumberArray类正确实现SQLData接口,正确处理数组的序列化/反序列化:

import java.sql.*;
import oracle.sql.*;

public class OracleNumberArray implements SQLData {
    private static final String TYPE_NAME = "NUM_ARRAY";
    private BigDecimal[] elements;

    public OracleNumberArray() {}

    public OracleNumberArray(BigDecimal[] elements) {
        this.elements = elements;
    }

    @Override
    public String getSQLTypeName() {
        return TYPE_NAME;
    }

    @Override
    public void readSQL(SQLInput stream, String typeName) throws SQLException {
        ARRAY array = (ARRAY) stream.readArray();
        elements = (BigDecimal[]) array.getArray();
    }

    @Override
    public void writeSQL(SQLOutput stream) throws SQLException {
        ArrayDescriptor descriptor = ArrayDescriptor.createDescriptor(TYPE_NAME, stream.getConnection());
        ARRAY array = new ARRAY(descriptor, stream.getConnection(), elements);
        stream.writeArray(array);
    }

    // Getter and Setter
    public BigDecimal[] getElements() {
        return elements;
    }

    public void setElements(BigDecimal[] elements) {
        this.elements = elements;
    }
}

4. 确保JDBC驱动版本兼容

检查pom.xml中ojdbc版本与Oracle数据库版本匹配,例如Oracle 19c使用ojdbc8:

<dependency>
    <groupId>com.oracle.database.jdbc</groupId>
    <artifactId>ojdbc8</artifactId>
    <version>19.3.0.0</version>
</dependency>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 04:30:01