Oracle
使用流重定向從 dbms_scheduler 創建作業?
我想創建一個必須執行此 shell 命令的簡單作業:
echo some_text > some_file
屬性可以在兩次呼叫之間更改,
some_text
所以我需要使用procedure。some_file``run_job``set_job_argument_value
這是我的程式碼:
exec dbms_scheduler.create_job('write_file','executable','/bin/echo',1,auto_drop=>false); exec dbms_scheduler.set_job_argument_value('write_file',1,'text > /tmp/file'); exec dbms_scheduler.run_job('write_file');
我首先創建將執行
echo
命令的作業。這項工作將只需要參數:text > /tmp/file
。當我執行我的工作時,程序執行正常,但我的文件沒有創建。就像程序執行這個命令一樣:/bin/echo "text > /tmp/file"
.所以我嘗試了多個參數:
exec dbms_scheduler.create_job('write_file','executable','/bin/echo',3,auto_drop=>false); exec dbms_scheduler.set_job_argument_value('write_file',1,'text'); exec dbms_scheduler.set_job_argument_value('write_file',2,'>'); exec dbms_scheduler.set_job_argument_value('write_file',3,'/tmp/file'); exec dbms_scheduler.run_job('write_file');
相同的輸出,沒有創建文件。
那麼,是否可以指定標準輸入?或者使用這種job_action :
/bin/echo $1 > $2
?
我找到了解決這個問題的更新檔。這個想法是創建一個 bash 文件:
#!/bin/sh echo $1 > $2
現在,您可以創建並執行您的作業:
exec dbms_scheduler.create_job('write_file','executable','/usr/bin/oracle/transfer',2,auto_drop=>false); exec dbms_scheduler.set_job_argument_value('write_file',1,'some_text'); exec dbms_scheduler.set_job_argument_value('write_file',2,'/tmp/some_file'); exec dbms_scheduler.run_job('write_file');
你可以看到結果:
$ cat /tmp/some_file some_text