Oracle 存储过程 - 也许 10g 和 11g 之间的区别?

Posted

技术标签:

【中文标题】Oracle 存储过程 - 也许 10g 和 11g 之间的区别?【英文标题】:Oracle stored procedure - difference between 10g and 11g perhaps? 【发布时间】:2013-09-04 14:59:47 【问题描述】:

以下存储过程代码适用于我们的 DEV 和 TEST 环境,这些环境与 Oracle 11G 一起运行,但不适用于我们的 10G PROD 环境:

首先,我在 Oracle 中创建了自己的数据结构来保存任何 VARCHAR2 数组:

create or replace
type MAT_MULTIPLES_ARRAY as table of VARCHAR2(100);

这是程序代码:

    create or replace PROCEDURE MAT_SUBMIT_JOB (v_multiples_columns_to_add IN our_schema.MAT_MULTIPLES_ARRAY)

    v_jobno number;
    v_job_name VARCHAR2(100);
    v_error_message VARCHAR2(32000);

    begin

    v_job_name := 'doesnt matter right now';

    dbms_scheduler.create_job(v_job_name,program_name=>'MAT_JOB_PROGRAM');
    dbms_scheduler.set_job_anydata_value(v_job_name,1,sys.anydata.convertCollection(v_multiples_columns_to_add));

    dbms_scheduler.enable(v_job_name);

    end;

同样,同样的代码在我们的 DEV 和 TEST 环境中在 11G 中工作,它在我们的 10G 环境中编译,但在运行时,在第二个 dbms_scheduler 行(粗体)上似乎出错了。

dbms_scheduler 是否在 10G 中工作?或者“sys.anydata.convertCollection(v_multiples_columns_to_add)”可能有问题

这是错误信息:

ORA-22370:我的过程中源自第 19 行的方法使用不正确。

第 19 行是调用 convertCollection() 的行。

请帮忙!

【问题讨论】:

它不会编译,或者它不会运行?你得到什么错误信息? ('barf' 不是错误消息,但也许应该是)。 这就是整个错误堆栈?你没有得到更具体的说明DBMS_ISCHED 绊倒了什么? 这不可能是完整的错误信息。错误的错误代码是什么。您只是在显示调用堆栈。 查看此链接 - forums.oracle.com/thread/482151 错误 4531589 在 10.2.0.4 和 11.1.0.6 中被报告为已修复(Oracle 支持文档 ID 4531589.8)。您在 10g 实例中运行的补丁级别是什么?您的开发/测试环境在不同的版本上运行似乎有点奇怪,至少没有修补过。 【参考方案1】:

我在文档中找到了这个:

http://docs.oracle.com/cd/B19306_01/appdev.102/b14258/d_sched.htm#i1000820

SET_JOB_ANYDATA_VALUE 要求您是该作业的所有者或对该作业具有 ALTER 权限。如果您有 CREATE ANY JOB 权限,您还可以设置作业参数值。

这也可能是相关的: ANYDATA with Collections based on rowtype

【讨论】:

以上是关于Oracle 存储过程 - 也许 10g 和 11g 之间的区别?的主要内容,如果未能解决你的问题,请参考以下文章

存在唯一索引时,Oracle 10g 和 11g 之间 REF CURSOR 的行为不同?

oralce11g导出dmp然后导入Oracle10g

oracle10g的存储过程大概怎么调试

如何通过 JDBC 将 Java 存储过程加载到 Oracle 10g 中?

Oracle 10g实现存储过程异步调用

Oracle数据库中,使用存储过程将BLOB字段批量导成JPG格式