ORACLE中如何使用Programs

72次阅读
没有评论

共计 3919 个字符,预计需要花费 10 分钟才能阅读完成。

丸趣 TV 小编给大家分享一下 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”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注丸趣 TV 行业资讯频道!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-24发表,共计3919字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)