如何在 oracle 中 调用 外部的程序

如何在 oracle 中 调用 外部的程序,第1张

利用TCP实现数据库与外部程序通讯,让数据库服务器通知一个守护程序去执行程序。

set serveroutput on size 100000

DECLARE

c utl_tcp.connection -- TCP/IP connection to the Web server

i number

j number

BEGIN

c := utl_tcp.open_connection('10.18.1.11', 51000) -- open connection

begin

loop

i := utl_tcp.available(c)

exit when i<=0

dbms_output.put_line('READ='||To_Char(i))

-- while i>0 loop

dbms_output.put(utl_tcp.get_text(c,i)) -- read result

--i :=i-1

-- end loop

end loop

exception

when others then null

end

dbms_output.put_line('')

i := utl_tcp.write_line(c, 'HELLO WORLD')

dbms_output.put_line('WRITE='||To_Char(i))

begin

j := 0

loop

i := utl_tcp.available(c)

if (i=0) then

j := j+1

if (j>=50) then

exit

else

for i in 0..1000 loop

null

end loop

end if

else

dbms_output.put_line('READ='||To_Char(i))

dbms_output.put(utl_tcp.get_text(c,i)) -- read result

end if

end loop

exception

when others then null

end

dbms_output.put_line('')

utl_tcp.close_connection(c)

end

默认安装时,会安装一个PL/SQL外部程序(ExtProc)条目在listener.ora中,是oracle为调用外部程序默认配置的监听,它的名字通常是ExtProc或PLSExtProc,但一般不会使用它,可以直接从listener.ora中将这项移除,因为对ExtProc已经有多种攻击手段了,在不使用外部程序时,oracle也是建议删除的。PLSExtPro 是pl/sqlexternalprocdure的意思,就是在pl/sql中调用外部语句,如c,java写的过程。现在,Oracle已经全面支持JAVA了,这东西也就过时了,之所以继续保留是考虑到兼容以前老版本的数据库实例。有时可能会在多个数据库实例之间拷贝listener.ora,请检查拷贝来的文件中是否含有不需要的服务,确保只留下的确需要的服务项目,减少监听器受攻击的面。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11126208.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-13
下一篇 2023-05-13

发表评论

登录后才能评论

评论列表(0条)

保存