這個(gè)叫做復(fù)制表
成都創(chuàng)新互聯(lián)一直在為企業(yè)提供服務(wù),多年的磨煉,使我們?cè)趧?chuàng)意設(shè)計(jì),成都全網(wǎng)營銷到技術(shù)研發(fā)擁有了開發(fā)經(jīng)驗(yàn)。我們擅長傾聽企業(yè)需求,挖掘用戶對(duì)產(chǎn)品需求服務(wù)價(jià)值,為企業(yè)制作有用的創(chuàng)意設(shè)計(jì)體驗(yàn)。核心團(tuán)隊(duì)擁有超過十載以上行業(yè)經(jīng)驗(yàn),涵蓋創(chuàng)意,策化,開發(fā)等專業(yè)領(lǐng)域,公司涉及領(lǐng)域有基礎(chǔ)互聯(lián)網(wǎng)服務(wù)南充服務(wù)器托管、成都app軟件開發(fā)、手機(jī)移動(dòng)建站、網(wǎng)頁設(shè)計(jì)、網(wǎng)絡(luò)整合營銷。
pl-sql語句
create table 新表名 as select * from 被復(fù)制的表名 where 1=2 ;
上面的語句就是創(chuàng)建一個(gè)新標(biāo)按你查出來的表的格式創(chuàng)建并復(fù)制內(nèi)容
只要where 后面的條件返回是false 查出來的記錄就為空,
所以這樣就達(dá)到了復(fù)制表結(jié)構(gòu)而不復(fù)制內(nèi)容
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;
然后點(diǎn)output,顯示的就是空表
select * from all_all_tables
這是查詢Oracle中的所有的表,包括SYS用戶下的,你可以根據(jù)表空間和所屬用戶來限制查詢結(jié)果
where owenr='' and tablespacename=''
想要查出沒數(shù)據(jù)的話,all_all_tables中有個(gè)num_rows字段,記錄該表數(shù)據(jù)是多少行的,rows=‘0’的肯定是沒數(shù)據(jù)的,
select * from all_all_tables
where num_rows='0'
and owenr='所屬用戶' and tablespacename='所屬表空間'
即可。
先分析表
select 'analyze table '||table_name||' compute statistics;' from user_tables;
把查詢結(jié)果依次執(zhí)行
把所有表分析一遍
然后user_tables中就會(huì)刷新表的信息
select * from user_tables where num_rows=0;
查出行數(shù)為0的表信息.
1、Oracle11g默認(rèn)對(duì)空表不分配segment,故使用exp導(dǎo)出Oracle11g數(shù)據(jù)庫時(shí),空表不會(huì)導(dǎo)出。
2、設(shè)置deferred_segment_creation 參數(shù)為FALSE后,無論是空表還是非空表,都分配segment。
在sqlplus中,執(zhí)行如下命令:
SQLalter system set deferred_segment_creation=false;
查看:
SQLshow parameter deferred_segment_creation;
該值設(shè)置后只對(duì)后面新增的表產(chǎn)生作用,對(duì)之前建立的空表不起作用。
3、可以使用手工為空表分配Extent的方式,來解決導(dǎo)出之前建立的空表的問題。說明如下:
3.1 使用ALLOCATE EXTENT的說明
使用ALLOCATE EXTENT可以為數(shù)據(jù)庫對(duì)象分配Extent。其語法如下:
-----------
ALLOCATE EXTENT { SIZE integer [K | M] | DATAFILE 'filename' | INSTANCE integer }
-----------
可以針對(duì)數(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)
針對(duì)數(shù)據(jù)表操作的完整語法如下:
-----------
ALTER TABLE [schema.]table_name ALLOCATE EXTENT [({ SIZE integer [K | M] | DATAFILE 'filename' | INSTANCE integer})]
-----------
故,需要構(gòu)建如下樣子簡(jiǎn)單的SQL命令:
-----------
alter table aTabelName allocate extent
-----------
3.2 構(gòu)建對(duì)空表分配空間的SQL命令,
查詢當(dāng)前用戶下的所有空表(一個(gè)用戶最好對(duì)應(yīng)一個(gè)默認(rèn)表空間)。命令如下:
-----------
SQLselect table_name from user_tables where NUM_ROWS=0;
-----------
根據(jù)上述查詢,可以構(gòu)建針對(duì)空表分配空間的命令語句,如下:
-----------
SQLSelect 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0
-----------
批量輸出上述生成的SQL語句,建立C:\createsql.sql,其內(nèi)容如下:
-----------
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文件。
打開該文件會(huì)看到,已經(jīng)得到對(duì)所有空表分配空間的命令SQL語句。
3.4 執(zhí)行SQL命令,對(duì)空表分配空間:
執(zhí)行C:\allocate.sql,命令如下:
-----------
SQL@ C:\allocate.sql;
-----------
執(zhí)行完畢,表已更改。
3.4 此時(shí)執(zhí)行exp命令,即可把包括空表在內(nèi)的所有表,正常導(dǎo)出。
另外:Oracle11g中,對(duì)密碼是大小寫敏感的,即密碼中的字母是區(qū)分大小寫的。
在Oracle10g中及以前,密碼中的字母大小寫無所謂。
這是我在sybase數(shù)據(jù)庫下的操作,供參考
1.選建一個(gè)表。
create TABLE D
(NO INT NULL,
NAME CHAR(20) NULL)
2.將庫中所有表中的內(nèi)容和表名做一個(gè)插入腳本。
select '
INSERT D
select count(*), "' +name+'" from '+name from sysobjects
where type ='U'
order by name
3. 將查詢結(jié)果新建一頁執(zhí)行
4.無記錄的表
SELECT * FROM D
WHERE NO=0
order by NAME
--OVER!