问题描述
嗨,
所以我最近创建了一个存储过程,其中两个参数采用自定义类型的数组,这是这样的:
创建或替换类型QUERY_LST
作为VARCHAR2(30 CHAR) 的VARRAY(10);
当我直接执行时,存储过程按预期工作。我想为运行此存储过程设置一个自定义作业。但是,当我尝试创建作业时,它会在我去设置存储过程的参数值的确切位置引发错误 (PLS-00306):
DBMS_SCHEDULER.SET_JOB_ANYDATA_VALUE (
作业名称 => '[作业]',
参数 _ 位置 => 5,
argument_value => QUERY_LST ('query1','query2','query3'));
我不确定我在这里做错了什么。我将感谢你的帮助。
所以我最近创建了一个存储过程,其中两个参数采用自定义类型的数组,这是这样的:
创建或替换类型QUERY_LST
作为VARCHAR2(30 CHAR) 的VARRAY(10);
当我直接执行时,存储过程按预期工作。我想为运行此存储过程设置一个自定义作业。但是,当我尝试创建作业时,它会在我去设置存储过程的参数值的确切位置引发错误 (PLS-00306):
DBMS_SCHEDULER.SET_JOB_ANYDATA_VALUE (
作业名称 => '[作业]',
参数 _ 位置 => 5,
argument_value => QUERY_LST ('query1','query2','query3'));
我不确定我在这里做错了什么。我将感谢你的帮助。
专家解答
顾名思义,您必须传递类型为ANYDATA的参数。所以快速转换,你就可以走了
SQL> create or replace type my_varray as varray(5) of number; 2 / Type created. SQL> SQL> drop table t purge; Table dropped. SQL> SQL> create table t ( x int ); Table created. SQL> SQL> create or replace 2 procedure load_t(v my_varray) is 3 begin 4 for i in 1 .. v.count loop 5 insert into t values (v(i)); 6 end loop; 7 commit; 8 end; 9 / Procedure created. SQL> SQL> begin 2 dbms_scheduler.create_program ( 3 program_name => 'pgm_load_t', 4 program_type => 'stored_procedure', 5 program_action => 'load_t', 6 number_of_arguments => 1, 7 enabled => false, 8 comments => 'program to run a stored procedure.'); 9 10 dbms_scheduler.define_program_argument ( 11 program_name => 'pgm_load_t', 12 argument_name => 'v', 13 argument_position => 1, 14 argument_type => 'my_varray'); 15 16 dbms_scheduler.enable (name => 'pgm_load_t'); 17 END; 18 / PL/SQL procedure successfully completed. SQL> declare 2 v my_varray := my_varray(1,2,3,4); 3 a sys.anydata := SYS.ANYDATA.ConvertCollection(v); 4 begin 5 dbms_scheduler.create_job ( 6 job_name => 'job_load_t', 7 program_name => 'pgm_load_t', 8 start_date => SYSTIMESTAMP, 9 enabled => false, 10 comments => 'Job to run pgm'); 11 12 dbms_scheduler.set_job_anydata_value ( 13 job_name => 'job_load_t', 14 argument_position => 1, 15 argument_value => a 16 ); 17 18 dbms_scheduler.enable ('job_load_t'); 19 20 end; 21 / PL/SQL procedure successfully completed. SQL> SQL> select * from t; X ---------- 1 2 3 4复制
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
【纯干货】Oracle 19C RU 19.27 发布,如何快速升级和安装?
Lucifer三思而后行
627次阅读
2025-04-18 14:18:38
Oracle RAC 一键安装翻车?手把手教你如何排错!
Lucifer三思而后行
613次阅读
2025-04-15 17:24:06
XTTS跨版本迁移升级方案(11g to 19c RAC for Linux)
zwtian
510次阅读
2025-04-08 09:12:48
Oracle数据库一键巡检并生成HTML结果,免费脚本速来下载!
陈举超
500次阅读
2025-04-20 10:07:02
【ORACLE】记录一些ORACLE的merge into语句的BUG
DarkAthena
473次阅读
2025-04-22 00:20:37
Oracle 19c RAC更换IP实战,运维必看!
szrsu
450次阅读
2025-04-08 23:57:08
【ORACLE】你以为的真的是你以为的么?--ORA-38104: Columns referenced in the ON Clause cannot be updated
DarkAthena
444次阅读
2025-04-22 00:13:51
一页概览:Oracle GoldenGate
甲骨文云技术
442次阅读
2025-04-30 12:17:56
【活动】分享你的压箱底干货文档,三篇解锁进阶奖励!
墨天轮编辑部
440次阅读
2025-04-17 17:02:24
火焰图--分析复杂SQL执行计划的利器
听见风的声音
392次阅读
2025-04-17 09:30:30