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 的行为不同?