這是我在sybase數(shù)據(jù)庫下的操作,供參考
為九江等地區(qū)用戶提供了全套網頁設計制作服務,及九江網站建設行業(yè)解決方案。主營業(yè)務為成都做網站、成都網站建設、成都外貿網站建設、九江網站設計,以傳統(tǒng)方式定制建設網站,并提供域名空間備案等一條龍服務,秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!
1.選建一個表。
create TABLE D
(NO INT NULL,
NAME CHAR(20) NULL)
2.將庫中所有表中的內容和表名做一個插入腳本。
select '
INSERT D
select count(*), "' +name+'" from '+name from sysobjects
where type ='U'
order by name
3. 將查詢結果新建一頁執(zhí)行
4.無記錄的表
SELECT * FROM D
WHERE NO=0
order by NAME
--OVER!
1、Oracle11g默認對空表不分配segment,故使用exp導出Oracle11g數(shù)據(jù)庫時,空表不會導出。
2、設置deferred_segment_creation 參數(shù)為FALSE后,無論是空表還是非空表,都分配segment。
在sqlplus中,執(zhí)行如下命令:
SQLalter system set deferred_segment_creation=false;
查看:
SQLshow parameter deferred_segment_creation;
該值設置后只對后面新增的表產生作用,對之前建立的空表不起作用。
3、可以使用手工為空表分配Extent的方式,來解決導出之前建立的空表的問題。說明如下:
3.1 使用ALLOCATE EXTENT的說明
使用ALLOCATE EXTENT可以為數(shù)據(jù)庫對象分配Extent。其語法如下:
-----------
ALLOCATE EXTENT { SIZE integer [K | M] | DATAFILE 'filename' | INSTANCE integer }
-----------
可以針對數(shù)據(jù)表、索引、物化視圖等手工分配Extent。
ALLOCATE EXTENT使用樣例:
ALLOCATE EXTENT
ALLOCATE EXTENT(SIZE integer [K | M])
ALLOCATE EXTENT(DATAFILE 'filename')
ALLOCATE EXTENT(INSTANCE integer)
ALLOCATE EXTENT(SIZE integer [K | M] DATAFILE 'filename')
ALLOCATE EXTENT(SIZE integer [K | M] INSTANCE integer)
針對數(shù)據(jù)表操作的完整語法如下:
-----------
ALTER TABLE [schema.]table_name ALLOCATE EXTENT [({ SIZE integer [K | M] | DATAFILE 'filename' | INSTANCE integer})]
-----------
故,需要構建如下樣子簡單的SQL命令:
-----------
alter table aTabelName allocate extent
-----------
3.2 構建對空表分配空間的SQL命令,
查詢當前用戶下的所有空表(一個用戶最好對應一個默認表空間)。命令如下:
-----------
SQLselect table_name from user_tables where NUM_ROWS=0;
-----------
根據(jù)上述查詢,可以構建針對空表分配空間的命令語句,如下:
-----------
SQLSelect 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0
-----------
批量輸出上述生成的SQL語句,建立C:\createsql.sql,其內容如下:
-----------
set heading off;
set echo off;
set feedback off;
set termout on;
spool C:\allocate.sql;
Select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0;
spool off;
-----------
執(zhí)行C:\createsql.sql,命令如下:
-----------
SQL@ C:\createsql.sql;
-----------
執(zhí)行完畢后,得到C:\allocate.sql文件。
打開該文件會看到,已經得到對所有空表分配空間的命令SQL語句。
3.4 執(zhí)行SQL命令,對空表分配空間:
執(zhí)行C:\allocate.sql,命令如下:
-----------
SQL@ C:\allocate.sql;
-----------
執(zhí)行完畢,表已更改。
3.4 此時執(zhí)行exp命令,即可把包括空表在內的所有表,正常導出。
另外:Oracle11g中,對密碼是大小寫敏感的,即密碼中的字母是區(qū)分大小寫的。
在Oracle10g中及以前,密碼中的字母大小寫無所謂。
select * from all_all_tables
這是查詢Oracle中的所有的表,包括SYS用戶下的,你可以根據(jù)表空間和所屬用戶來限制查詢結果
where owenr='' and tablespacename=''
想要查出沒數(shù)據(jù)的話,all_all_tables中有個num_rows字段,記錄該表數(shù)據(jù)是多少行的,rows=‘0’的肯定是沒數(shù)據(jù)的,
select * from all_all_tables
where num_rows='0'
and owenr='所屬用戶' and tablespacename='所屬表空間'
即可。
MSSQL不知道
oracle在plsql里執(zhí)行如下代碼:
DECLARE
v_table tabs.table_name%TYPE;
v_sql VARCHAR2(888);
v_q NUMBER;
CURSOR c1 IS
SELECT table_name tn FROM tabs;
TYPE c IS REF CURSOR;
c2 c;
BEGIN
DBMS_OUTPUT.PUT_LINE('以下為空數(shù)據(jù)表的表名:');
FOR r1 IN c1 LOOP
v_table :=r1.tn;
v_sql :='SELECT COUNT(*) q FROM '||v_table;
OPEN c2 FOR v_sql;
LOOP
FETCH c2 INTO v_q;
EXIT WHEN c2%NOTFOUND;
IF v_q=0 THEN
DBMS_OUTPUT.PUT_LINE(v_table);
END IF;
END LOOP;
CLOSE c2;
END LOOP;
EXCEPTION
WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('Error occurred');
END;
然后點output,顯示的就是空表
select
--nvl(prplclaim.caseno, '0')是為空判斷,當prplclaim.caseno為空時賦值0
--decode語法nvl(prplclaim.caseno, '0')為要進行判斷的參數(shù),
為0時賦值未結案,否則賦值已結案
decode(nvl(prplclaim.caseno, '0'),
'0',
'未結案',
'已結案'),
decode(nvl(prplclaim.casetype, '11'),
'11',
'未結案',
'2',
'正常結案',
'3',
'零結案',
'0',
'注銷結案'),
from prplclaim prplclaim;