十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
1. 授于test用户文件读写和执行命令的权限
在巧家等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供网站设计制作、网站建设 网站设计制作按需规划网站,公司网站建设,企业网站建设,品牌网站制作,网络营销推广,外贸网站制作,巧家网站建设费用合理。
SQLexec dbms_java.grant_permission('TEST','SYS:java.io.FilePermission','ALL FILES','read,write,execute,delete');
SQLexec dbms_java.grant_permission('TEST','java.lang.RuntimePermission','*','writeFileDescriptor' );
2. 建立java source
CREATE OR REPLACE AND RESOLVE JAVA SOURCE NAMED "bb" as import java.io.*;
import java.lang.*;
import java.util.*;
import java.sql.*;
import oracle.sql.*;
public class bb
{
public static void invoke_exe() throws IOException
{
Process p=Runtime.getRuntime().exec("d:/exp_74.bat");--注意/符号
try
{
p.waitFor();
}catch(InterruptedException ie){System.out.println(ie);}
}
}
/
3. 建立调用java source的存储过程CALL_BB
create or replace procedure CALL_BB
as
language java
name 'bb.invoke_exe()';
/
4. 执行CALL_BB即可;
create table inputfile (
filename varchar2(30),
xmlcontent xmltype,
sqlcontent varchar2(3000)
);
create or replace directory TESTFILE as 'D:\work\oralce\';
create or replace procedure alter_table (pi_file_name in varchar2)
is
filehandle utl_file.file_type;
filebuffer varchar2(32767);
l_clob clob;
doc DBMS_XMLDOM.DOMDocument;
CDATA VARCHAR2(3000);
begin
filehandle := utl_file.fopen('TESTFILE',pi_file_name,'R');
IF utl_file.is_open(filehandle) THEN
dbms_output.put_line('file is open!');
END IF;
loop
begin
utl_file.get_line(filehandle,filebuffer);
dbms_output.put_line(filebuffer);
l_clob := l_clob||filebuffer;
EXCEPTION
WHEN no_data_found THEN
--dbms_output.put_line('EXCEPTION0:'||SUBSTR(SQLERRM, 1, 100));
exit;
WHEN OTHERS THEN
dbms_output.put_line('EXCEPTION1:'||SUBSTR(SQLERRM, 1, 100));
end;
end loop;
--doc := DBMS_XMLDOM.newDOMDocument(xmltype.extract(XMLType(l_clob),'/sqls/sql'));
cdata:=xmltype.extract(XMLType(l_clob),'/sqls/sql').getClobVal();
insert into inputfile(FILENAME, XMLCONTENT,sqlcontent )
values(pi_file_name, XMLType(l_clob),replace(replace(replace(CDATA,'sql![CDATA[--',''),']]/sql',''),'/',chr(10)||'/'||chr(10)));
utl_file.fclose(filehandle);
IF utl_file.is_open(filehandle) THEN
dbms_output.put_line('file is open!');
else
dbms_output.put_line('file is close!');
END IF;
EXCEPTION
WHEN OTHERS THEN
dbms_output.put_line('EXCEPTION2:'||SUBSTR(SQLERRM, 1, 100)) ;
end;
/
exec alter_table('myTable.xml');
sql语句会去inputfile.sqlcontent.
循环取出值,然后execute immediate(sql);
稍微做些微调即可。
Oracle执行外部文件:
c:sqlplus
user/pwd@db
sql@new.sql
执行多个sql文件:
1.把所有的文件都放在同一个目录下,然后在命令行里执行命令:
c:dir/b
d:/1.sql
会把所有的sql文件名都输出到一个sql文件中。
2.用UltraEdit打开生成的sql文件,alt+C切换到column
mode,给所有的行前都添加一个"@",保存。
3.在sqlplus中执行"@d:/1.sql"
如何避免''字符:
sql中可以传递参数,但有时需要插入'',例:
SQL
select
'hello'
v
from
dual;
输入
hello
的值:
hello
原值
1:
select
'hello'
v
from
dual
新值
1:
select
'hello'
v
from
dual
v
-----
hello
可以使用如下方法避免:
A:
SQL
select
chr(38)
||
'hello'
v
from
dual;
V
------
hello
B:
SQL
set
define
off
SQL
select
'hello'
v
from
dual;
V
------
hello