Bo's Oracle Station

查看: 2078|回复: 0

课程第47次(2017-10-24星期二)

[复制链接]

1005

主题

1469

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
12012
发表于 2017-10-24 19:45:01 | 显示全部楼层 |阅读模式
关于参数的预备知识:

  1. create or replace procedure proc_test( p_1  number , p_2  out   number)
  2. is
  3. begin
  4.   update employees set salary=salary+1 where employee_id=p_1;
  5.   commit;
  6.   select  salary into p_2 from  employees  where employee_id=p_1;
  7.   dbms_output.put_line('The new salary is '||p_2||'.');
  8. end;

  9. select  * from user_errors;

  10. select salary from employees where employee_id=100;

  11. create or replace procedure  proc_test_io( p_1  in out number )  
  12. is
  13. begin
  14.   p_1 := p_1*2;
  15. end;

  16. select  * from user_errors;

  17. declare
  18.    v_1 number;
  19. begin
  20.    v_1 := 1;
  21.    proc_test_io( v_1);
  22.    dbms_output.put_line(v_1);
  23. end;


  24. declare
  25.   v_2 number ;
  26. begin
  27. proc_test(100, v_2);
  28. end;
复制代码

带meta_data参数的program:

  1. [oracle@station26 ~]$ sqlplus /nolog

  2. SQL*Plus: Release 12.1.0.2.0 Production on Tue Oct 24 19:16:45 2017

  3. Copyright (c) 1982, 2014, Oracle.  All rights reserved.

  4. SQL> conn hr/oracle_4U
  5. Connected.
  6. SQL> DROP TABLE scheduler_test;

  7. Table dropped.

  8. SQL> DROP SEQUENCE scheduler_test_seq;

  9. Sequence dropped.

  10. SQL> CREATE TABLE scheduler_test (
  11.   id            NUMBER(10)    NOT NULL,
  12.   created_date  DATE          NOT NULL,  2    3  
  13.   4  event_name varchar2(40),
  14.   5  CONSTRAINT scheduler_test_pk PRIMARY KEY (id));

  15. Table created.

  16. SQL> desc scheduler_test
  17. Name                                           Null?    Type
  18. ----------------------------------------- -------- ----------------------------
  19. ID                                           NOT NULL NUMBER(10)
  20. CREATED_DATE                                   NOT NULL DATE
  21. EVENT_NAME                                            VARCHAR2(40)

  22. SQL> CREATE SEQUENCE scheduler_test_seq;

  23. Sequence created.

  24. SQL> select  * from scheduler_test;

  25. no rows selected


  26.   1  create or replace procedure procnew( p_1          sys.t_event_queue_payload    )
  27.   2  is
  28.   3  BEGIN
  29.   4          INSERT INTO scheduler_test
  30.   5              VALUES (scheduler_test_seq.NEXTVAL, SYSDATE,  p_1.event_name   );
  31.   6              COMMIT;
  32.   7* END;
  33. SQL> /

  34. Procedure created.

  35. SQL> begin
  36.   dbms_scheduler.create_program (
  37.    program_name => 'programnew',
  38.     program_action=> 'procnew',
  39.     program_type => 'STORED_PROCEDURE',
  40.     number_of_arguments => 1,
  41.     enabled => false) ;
  42. end;  2    3    4    5    6    7    8  
  43.   9  /

  44. PL/SQL procedure successfully completed.

  45. SQL>
复制代码
Screenshot.png


Screenshot-1.png

Screenshot-2.png

  1. SQL> begin
  2. dbms_scheduler.enable ('programnew');
  3. end;  2    3  
  4.   4  /

  5. PL/SQL procedure successfully completed.

  6. SQL>
  7.      BEGIN   
  8. sys.dbms_scheduler.create_job(
  9. job_name => '"HR"."JOB9"',
  10. program_name => '"HR"."PROGRAMNEW"',
  11. schedule_name => '"HR"."SCHEDULE4"',
  12. job_class => '"DEFAULT_JOB_CLASS"',
  13. comments => 'JOB9',
  14. auto_drop => FALSE,
  15. enabled => TRUE);
  16. END;  2    3    4    5    6    7    8    9   10  
  17. 11  /

  18. PL/SQL procedure successfully completed.

  19. SQL>

复制代码

SELECT * FROM scheduler_test order by id;

---
DECLARE
  l_enqueue_options     DBMS_AQ.enqueue_options_t;
  l_message_properties  DBMS_AQ.message_properties_t;
  l_message_handle      RAW(16);
  l_queue_msg           sys.t_event_queue_payload;
BEGIN
  l_queue_msg := sys.t_event_queue_payload('give_me_a_prod');

  DBMS_AQ.enqueue(queue_name          => 'sys.event_queue',
                  enqueue_options     => l_enqueue_options,
                  message_properties  => l_message_properties,
                  payload             => l_queue_msg,
                  msgid               => l_message_handle);
  COMMIT;
END;

----
SELECT * FROM scheduler_test order by id;

---
Filewatcher 在64位Linux上,要做:
[root@station26 lib64]# ls -l libpam*
lrwxrwxrwx. 1 root root    17 1月  31 2017 libpamc.so.0 -> libpamc.so.0.82.1
-rwxr-xr-x. 1 root root 14528 3月  29 2016 libpamc.so.0.82.1
lrwxrwxrwx. 1 root root    21 1月  31 2017 libpam_misc.so.0 -> libpam_misc.so.0.82.0
-rwxr-xr-x. 1 root root 17248 3月  29 2016 libpam_misc.so.0.82.0
lrwxrwxrwx. 1 root root    16 1月  31 2017 libpam.so.0 -> libpam.so.0.82.2
-rwxr-xr-x. 1 root root 58480 3月  29 2016 libpam.so.0.82.2
[root@station26 lib64]# ln -s libpam.so.0.82.2 libpam.so


观察界面原先jobs和schedule的file_watcher关闭:
Screenshot-4.png

Screenshot.png

Screenshot-1.png

Screenshot-2.png

  1. select  * from dba_scheduler_file_watchers;

  2. select  * from dba_scheduler_credentials;

  3. begin
  4.    dbms_scheduler.create_file_watcher(
  5.        file_watcher_name => 'filewatcher1',
  6.        directory_path => '/home/oracle/myfile',
  7.        file_name => 'botang*.txt',
  8.        credential_name => 'cred1');
  9. end;

  10. select  * from dba_scheduler_file_watchers;
复制代码

-----------------启动了--------------------------
Screenshot.png

  1. grant execute on filewatcher1 to hr;
  2. grant execute on SYS.SCHEDULER_FILEWATCHER_RESULT to hr;
  3. grant create external job to hr;
  4. grant create job to hr;
  5. --------

  6. create table hr.tfilewatcher1 ( a  varchar2(200)  ) ;  

  7. create or replace procedure hr.procfilewatcher ( p_1   SYS.SCHEDULER_FILEWATCHER_RESULT)
  8. is
  9. begin
  10.   insert into hr.tfilewatcher1  values ( to_char( p_1.file_timestamp,'YYYY-MM-DD:HH24:MI:SS') ||'      '
  11.                                                       ||p_1.directory_path||'        '
  12.                                                       ||p_1.actual_file_name||'       '
  13.                                                       ||p_1.file_size  ) ;
  14.   commit;
  15. end;

  16. -------
  17. begin
  18.     dbms_scheduler.create_program(
  19.      program_name => 'HR.program10',
  20.      program_type => 'STORED_PROCEDURE',
  21.      program_action => 'HR.procfilewatcher',
  22.      number_of_arguments => 1,
  23.      enabled => false);
  24. end;

  25. ----------

  26. begin
  27.    dbms_scheduler.define_metadata_argument(
  28.    program_name => 'HR.program10',
  29.    metadata_attribute => 'event_message',argument_position => 1 ) ;
  30. end;
  31. -------
  32. begin
  33.   dbms_scheduler.enable('HR.program10');
  34. end;
  35. ------

复制代码
组装Filewatcher作业:

Screenshot-1.png

当你再看这个作业时,定义变成:
Screenshot-2.png

  1. begin
  2.    dbms_scheduler.set_attribute('hr.job10','parallel_instances',true);
  3. end;

  4. select  * from  hr.tfilewatcher1;
复制代码


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Bo's Oracle Station   

GMT+8, 2024-5-3 01:00 , Processed in 0.099321 second(s), 27 queries .

快速回复 返回顶部 返回列表