千家信息网

ORACLE中如何使用Programs

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,小编给大家分享一下ORACLE中如何使用Programs,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!2.1 创建Prog
千家信息网最后更新 2026年10月31日ORACLE中如何使用Programs

小编给大家分享一下ORACLE中如何使用Programs,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

2.1 创建Programs

  Scheduler 中的Program对象并不是常规意义上的"程序"或"应用",而就是一个"对象",由DBA定义的,具有执行某项功能的特殊对象。Program中实际执行的操作可以分为下列三种类型:

  • PL/SQL BLOCK :标准的pl/sql代码块;

  • STORED PROCEDURE :编译好的PL/SQL存储过程,或者Java存储过程,以及外部的c子程序;

  • EXECUTEABLE :ORACLE数据库之外的应用,比如操作系统命令等等。

  创建Programs使用DBMS_SCHEDULER.CREATE_PROGRAM过程,该过程支持的参数如下:

    JSSWEB> desc dbms_scheduler.create_program;

    Parameter Type Mode Default?

    ------------------- -------------- ---- --------

    PROGRAM_NAME VARCHAR2 IN

    PROGRAM_TYPE VARCHAR2 IN

    PROGRAM_ACTION VARCHAR2 IN

    NUMBER_OF_ARGUMENTS BINARY_INTEGER IN Y

    ENABLED BOOLEAN IN Y

  • OMMENTS VARCHAR2 IN Y

  如上所示,前三项为必选参数,各参数实际代表的意义如下:

  • PROGRAM_NAME :指定一个program名称;

  • PROGRAM_TYPE :Program的类型,如前文中所述,Program支持三种类型;

  • PROGRAM_ACTION :实际执行的操作,应与前面PROGRAM_TYPE参数关联使用。比如说前面指定了PROGRAM_TYPE为"PLSQL_BLOCK",那么此处要执行的action就应当是一段标准的pl/sql代码。如果前面指定PROGRAM_TYPE为"STORED_PROCEDURE",那么此处要执行的action就应当是ORACLE中定义好的存储过程(含Java存储过程),如果前面指定PROGRAM_TYPE为"EXECUTABLE",那么此处就应该指定外部命令的命令行信息(含路径信息);

  • NUMBER_OF_ARGUMENTS :指定支持的参数个数,默认值为0即没有参数。每个program最多能够支持255个参数,注意如果PROGRAM_TYPE设置为PLSQL_BLOCK,那么本参数自动忽略;

  • ENABLED :指定是否将创建的program置为有效状态,默认情况下为false。

  • COMMENTS :这个不用再说了吧,注释信息。

  下面实际操作一下看看,PL/SQL或PROCEDURE没有挑战(ORACLE中直接即可调用),咱们创建一下program,直接调用操作系统中的ls命令,操作如下:

    SQL> BEGIN

    2 DBMS_SCHEDULER.CREATE_PROGRAM (

    3 program_name => 'my_program1',

    4 program_action => '/bin/date',

    5 program_type => 'EXECUTABLE',

    6 enabled => TRUE);

    7 END;

    8 /

  • PL/SQL procedure successfully completed.

2.2 管理Programs

  定义的program如何执行,这里先卖个关子,前面介绍CREATE_PROGRAM过程的参数时提到,每个program最多支持255个参数,要为program添加参数,可以通过DEFINE_PROGRAM_ARGUMENT过程。不过在为其添加参数前,要注意program的NUMBER_OF_ARGUMENTS指定的数量,如果该值为0,那么为其添加参数时就会报错。

  查询创建的program的信息,可以通过USER_SCHEDULER_PROGRAMS视图,例如:

    SQL> select program_name,program_type,program_action,number_of_arguments,enabled from user_scheduler_programs;

    PROGRAM_NAME PROGRAM_TYPE PROGRAM_ACTION NUMBER_OF_ARGUMENTS ENABL

    -------------------- ---------------- -------------------- ------------------- -----

  • MY_PROGRAM1 EXECUTABLE /bin/ls 1 FALSE

  由于前面创建program時並未指定NUMBER_OF_ARGUMENTS的值,因此我们这里需要首先修改该值为一个非0值,操作如下:

    SQL> exec dbms_scheduler.set_attribute('my_program1','NUMBER_OF_ARGUMENTS',1);

  • PL/SQL procedure successfully completed.

  没错,操作还是使用DBMS_SCHEDULER.SET_ATTRIBUTE过程。另外需要注意,program的NUMBER_OF_ARGUMENTS参数可是说想改就能改的,正常情况下该处理必须是在program处于enabled之前确认完毕,否则会触发ORA-27465错误,因此要修改program的参数之前,必须首先确保要修改program的enabled状态为false。

  那么对于已经处于enabled状态的program,如何修改其状态属性呢?其实很简单,前面操作jobs时使用的DBMS_SCHEDULER.DISABLE过程还记的吗?没错,该过程对于program同样好使,并且调用方式也完全一样,例如:

    SQL> exec dbms_scheduler.disable('my_program1');

  • PL/SQL procedure successfully completed.

  另外,如果希望将program置为enabled状态,执行DBMS_SCHEDULER.ENABLE过程即可,这里不再例举。

  接下来,就可以为刚刚创建的my_program1添加路径参数,操作如下:

    SQL> BEGIN

    2 DBMS_SCHEDULER.DEFINE_PROGRAM_ARGUMENT (

    3 program_name => 'my_program1',

    4 argument_position => 1,

    5 argument_name => 'dirpath',

    6 argument_type => 'VARCHAR2',

    7 default_value => '/home/oracle');

    8 END;

    9 /

  • PL/SQL procedure successfully completed.

  查询为program定义的参数,可以通过USER_SCHEDULER_PROGRAM_ARGS视图,例如:

    SQL> select program_name,argument_name,argument_position,argument_type, default_value from user_scheduler_program_args;

    PROGRAM_NAME ARGUMENT_NAME ARGUMENT_POSITION DEFAULT_VALUE

    -------------------- -------------------- ----------------- --------------------

  • MY_PROGRAM1 DIRPATH 1 VARCHAR2

  删除program的argument操作也很简单,使用DROP_PROGRAM_ARGUMENT过程即可,例如:

    SQL> exec dbms_scheduler.drop_program_argument('my_program1','dirpath');

  • PL/SQL procedure successfully completed.

  该过程第一个参数指定program名称,第二个参数指定定义的argument名称,当然此处也可以指定argument的位置,即前例视图返回结果中的 ARGUMENT_POSITION 列值。

  要删除program的话就更简单了,使用DROP_PROGRAM过程即可,例如:

    SQL> exec dbms_scheduler.drop_program('my_program1');

  • PL/SQL procedure successfully completed.

  当然啦,删除program的同时,也会删除该program对应的所有arguments。

  实际上SCHEDULER中创建job时,也可以指定执行外部的程序。SCHEDULER中的Job更像是之前版本继承过来的JOBS,只不过10g中SCHEDULER管理的JOBS功能更加强大。Programs与Jobs不同的是,Jobs是定义好的,定时执行的任务,而Programs则是定义好的,等待被执行的对象。

以上是"ORACLE中如何使用Programs"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

参数 过程 实际 状态 支持 信息 命令 对象 存储 可以通过 名称 篇文章 类型 视图 操作系统 代码 内容 功能 情况 意义 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网高科技 上海挚品互联网科技有限公司 云之行互联网科技 互联网佳科技有限公司 科技互联网产品 互联网科技作文 碳银互联网科技有限公司 广州紫鲸互联网科技 长亮科技 互联网金融 互联网科技股有哪些 阿里互联网科技公司 翼展科技 首家互联网医院 互联网科技如何创业 滨湖区互联网智能科技产品有哪些 伍佰万互联网科技怎么赚钱 云南省自由互联网科技有限公司 互联网安防科技感 广州梦谷互联网科技有限公司领导 互联网金融运营模式中的金融科技 安徽九吞吴互联网科技有限公司 互联网科技园 广东猪兼强互联网科技有限公司 互联网科技工作委员会主任 互联网科技巨头监管 关于新基建和互联网科技 礼当家互联网科技 深圳市运趣互联网科技有限公司 互联网企业和科技型企业 互联网科技教育视频 长沙易易互联网科技有限公司
0