Oracle 如何从批处理文件生成sql脚本运行日志
我已删除以下运行良好的_import.bat文件,该文件包含以下内容:Oracle 如何从批处理文件生成sql脚本运行日志,oracle,batch-file,sql-delete,logfile,Oracle,Batch File,Sql Delete,Logfile,我已删除以下运行良好的_import.bat文件,该文件包含以下内容: sqlplus @C:\Exp_Imp_Util\delete_tmc.sql deletetmc.sql文件包含我要删除的所有数据库对象。但现在每当我运行批处理文件时,它都应该创建所有delete语句的日志,并且如果在删除sql语句时发生任何oracle错误,它也应该写入日志文件 CONNECT TMC/TMC; spool off declare stringa varchar2(100); cursor cur i
sqlplus @C:\Exp_Imp_Util\delete_tmc.sql
deletetmc.sql文件包含我要删除的所有数据库对象。但现在每当我运行批处理文件时,它都应该创建所有delete语句的日志,并且如果在删除sql语句时发生任何oracle错误,它也应该写入日志文件
CONNECT TMC/TMC;
spool off
declare
stringa varchar2(100);
cursor cur is
select *
from user_objects;
begin
for c in cur loop
begin
stringa := '';
if c.object_type = 'VIEW' then
stringa := 'drop view ' || c.object_name;
EXECUTE immediate stringa;
elsif c.object_type = 'TABLE' then
stringa := 'drop table ' || c.object_name || ' cascade constraints';
EXECUTE immediate stringa;
elsif c.object_type = 'SEQUENCE' then
stringa := 'drop sequence ' || c.object_name;
EXECUTE immediate stringa;
elsif c.object_type = 'PACKAGE' then
stringa := 'drop package ' || c.object_name;
EXECUTE immediate stringa;
elsif c.object_type = 'TRIGGER' then
stringa := 'drop trigger ' || c.object_name;
EXECUTE immediate stringa;
elsif c.object_type = 'PROCEDURE' then
stringa := 'drop procedure ' || c.object_name;
EXECUTE immediate stringa;
elsif c.object_type = 'FUNCTION' then
stringa := 'drop function ' || c.object_name;
EXECUTE immediate stringa;
elsif c.object_type = 'SYNONYM' then
stringa := 'drop synonym ' || c.object_name;
EXECUTE immediate stringa;
elsif c.object_type = 'INDEX' then
stringa := 'drop index ' || c.object_name;
EXECUTE immediate stringa;
elsif c.object_type = 'PACKAGE BODY' then
stringa := 'drop PACKAGE BODY ' || c.object_name;
EXECUTE immediate stringa;
end if;
exception
when others then
null;
end;
end loop;
-- PURGE recyclebin
end;
/
EXIT;
您可以设置
SPOOL
写入文件,然后使用DBMS\u输出
:
script.sql:
spool spool.txt
set serveroutput on
declare
vSQL varchar2(1000);
begin
vSQL := 'create table tab1 ( a number)';
begin
execute immediate vSQL;
dbms_output.put_line('OK - ' || vSQL);
exception
when others then
dbms_output.put_line('KO - ' || vSQL || ' - ' || sqlerrm);
end;
vSQL := 'drop table tab1';
begin
execute immediate vSQL;
dbms_output.put_line('OK - ' || vSQL);
exception
when others then
dbms_output.put_line('KO - ' || vSQL || ' - ' || sqlerrm);
end;
vSQL := 'drop table tab1';
begin
execute immediate vSQL;
dbms_output.put_line('OK - ' || vSQL);
exception
when others then
dbms_output.put_line('KO - ' || vSQL || ' - ' || sqlerrm);
end;
end;
/
spool off
运行脚本后,文件spool.txt将为:
OK - create table tab1 ( a number)
OK - drop table tab1
KO - drop table tab1 - ORA-00942: table or view does not exist
PL/SQL procedure successfully completed.
您可以设置
SPOOL
写入文件,然后使用DBMS\u输出
:
script.sql:
spool spool.txt
set serveroutput on
declare
vSQL varchar2(1000);
begin
vSQL := 'create table tab1 ( a number)';
begin
execute immediate vSQL;
dbms_output.put_line('OK - ' || vSQL);
exception
when others then
dbms_output.put_line('KO - ' || vSQL || ' - ' || sqlerrm);
end;
vSQL := 'drop table tab1';
begin
execute immediate vSQL;
dbms_output.put_line('OK - ' || vSQL);
exception
when others then
dbms_output.put_line('KO - ' || vSQL || ' - ' || sqlerrm);
end;
vSQL := 'drop table tab1';
begin
execute immediate vSQL;
dbms_output.put_line('OK - ' || vSQL);
exception
when others then
dbms_output.put_line('KO - ' || vSQL || ' - ' || sqlerrm);
end;
end;
/
spool off
运行脚本后,文件spool.txt将为:
OK - create table tab1 ( a number)
OK - drop table tab1
KO - drop table tab1 - ORA-00942: table or view does not exist
PL/SQL procedure successfully completed.
我试过了,但在日志文件中显示为已连接。为了进行测试,我创建了一个表,并试图从这个批处理文件中删除它。该表已删除,但在日志文件中其写入已连接。没有关于哪张桌子掉了的信息。也许你把控制柜放错地方了;尝试在任何其他语句之前移动它。我尝试过,但在日志文件中,它显示为已连接。为了进行测试,我创建了一个表,并试图从这个批处理文件中删除它。该表已删除,但在日志文件中其写入已连接。没有关于哪张桌子掉了的信息。也许你把控制柜放错地方了;尝试将其移到任何其他语句之前