一、
sql脚本等中,利用自定义f_table_exist函数判断表是否存在,
sql脚本段和普通sql语句一起执行需要将普通语句包含在begin xxx end;中否则会报错。
示例:
----脚本开始
set serveroutput on;--输出的开关
spool 文件名--将执行信息日志输出的文件
-------------------------------------------------------
------------------------aa-----------------------------
-------------------------------------------------------
declare
errorexception exception;--变量要定义在function之前否则会报错
function f_table_exist(in_table_name varchar2)
return number as v_exist number;
begin
select count(*) into v_exist from user_tables where table_name = upper(in_table_name);
return v_exist;
end;
begin
if(f_table_exist('大写表名称') = 0) then--等于0证明数据库中不存在该表
execute immediate '创建、删除等语句';
end if;
exception
when errorexception then xxx;
when others then xxx;
end;
/
commit;
/
begin
其他执行语句,如insert等
end;
/
commit;
/
--脚本结束
二、递归查询写法
-- 递归
select id,
name,
parentid,
substr(sys_connect_by_path(name, '->'), 3) name_path
from table t
start with t.id = ''
connect by prior t.id = t.parentid;
三、查询表空间、及表占用空间语句
-- 表空间
SELECT SUM(bytes) / (1024 * 1024) AS free_space, tablespace_name
FROM dba_free_space
GROUP BY tablespace_name;
SELECT a.tablespace_name,
a.bytes total,
b.bytes used,
c.bytes free,
(b.bytes * 100) / a.bytes "% USED ",
(c.bytes * 100) / a.bytes "% FREE "
FROM sys.sm$ts_avail a, sys.sm$ts_used b, sys.sm$ts_free c
WHERE a.tablespace_name = b.tablespace_name
AND a.tablespace_name = c.tablespace_name;
-- 查询某张表占用的表空间的语句
SELECT segment_name AS TABLENAME,
BYTES B
FROM user_segments
where segment_name = upper('tablename');