SQL*Plus系統環境變量有哪些?如何修改?
實現方法:
show和set命令是兩條用于維護SQL*Plus系統變量的命令
SQL> show all --查看所有68個系統變量值
SQL> show user --顯示當前連接用戶
SQL> show error --顯示錯誤
SQL> set heading off --禁止輸出列標題,默認值為ON
SQL> set feedback off --禁止顯示最后一行的計數反饋信息,默認值為"對6個或更多的記錄,回送ON"
SQL> set timing on --默認為OFF,設置查詢耗時,可用來估計SQL語句的執行時間,測試性能
SQL> set sqlprompt "SQL> " --設置默認提示符,默認值就是"SQL> "
SQL> set linesize 1000 --設置屏幕顯示行寬,默認100
SQL> set autocommit ON --設置是否自動提交,默認為OFF
SQL> set pause on --默認為OFF,設置暫停,會使屏幕顯示停止,等待按下ENTER鍵,再顯示下一頁
SQL> set arraysize 1 --默認為15
SQL> set long 1000 --默認為80
說明:
long值默認為80,設置1000是為了顯示更多的內容,因為很多數據字典視圖中用到了long數據類型,如:
SQL> desc user_views
列名 可空值否 類型
------------------------------- -------- ----
VIEW_NAME NOT NULL VARCHAR2(30)
TEXT_LENGTH NUMBER
TEXT LONG
SQL> define a = '''20000101 12:01:01''' --定義局部變量,如果想用一個類似在各種顯示中所包括的回車那樣的常量,
--可以用define命令來設置
SQL> select &a from dual;
原值 1: select &a from dual
新值 1: select '20000101 12:01:01' from dual
'2000010112:01:01
-----------------
20000101 12:01:01
---------------------------------------------------------
Oracle中如何實現某一字段自動增加1?
實現方法:
建立一個最小為1,最大為999999999的一個序列號會自動循環的序列
create sequence 序列名
increment by 1
start with 1
maxvalue 999999999
cycle;
當向表中插入數據時,SQL語句寫法如下:
SQL> insert into 表名 values(序列名.nextval,列1值,列2值);
----------------------------------------------------------------
如何用SQL生成SQL批處理文件?
問題提出:
1.用戶需要對數據庫用戶下的每一張表都執行一個相同的SQL操作,這時,一遍、一遍的鍵入SQL語句是很麻煩的
實現方法:
SQL> set heading off --禁止輸出列標題
SQL> set feedback off --禁止顯示最后一行的計數反饋信息
列出當前用戶下所有同義詞的定義,可用來測試同義詞的真實存在性
select 'desc '||tname from tab where tabtype='SYNONYM';
查詢當前用戶下所有表的記錄數
select 'select '''||tname||''',count(*) from '||tname||';' from tab where tabtype='TABLE';
把所有符合條件的表的select權限授予為public
select 'grant select on '||table_name||' to public;' from user_tables where 《條件》;
刪除用戶下各種對象
select 'drop '||tabtype||' '||tname from tab;
刪除符合條件用戶
select 'drop user '||username||' cascade;' from all_users where user_id>25;
快速編譯所有視圖
----當在把數據庫倒入到新的服務器上后(數據庫重建),需要將視圖重新編譯一遍,
----因為該表空間視圖到其它表空間的表的連接會出現問題,可以利用PL/SQL的語言特性,快速編譯。
SQL> SPOOL ON.SQL
SQL> SELECT'ALTER VIEW '||TNAME||' COMPILE;' FROM TAB;
SQL> SPOOL OFF
然后執行ON.SQL即可。
SQL> @ON.SQL
當然,授權和創建同義詞也可以快速進行,如:
SQL> SELECT 'GRANT SELECT ON '||TNAME||' TO 用戶名;' FROM TAB;
SQL> SELECT 'CREATE SYNONYM '||TNAME||' FOR 用戶名.'||TNAME||';' FROM TAB;
---------------------------------------------------------------------
如何刪除表中的列?
實現方法:
SQL> create table t2 as select <specific columns> from t1; --以第一個表中的某列建立第二個新表
SQL> drop table t1; --刪除表1
SQL> rename t2 to t1; --把表2改名為表1
Oracle 8i及以上版本中,可以使用以下語句
SQL> alter table 表1 drop column 列1;
-------------------------------------------------
如何自動生成一個含有20000101至20500101共50年日期的表?
SQL語句:
drop table da_yyyymmdd; --如果有,先刪除此表
create table da_yyyymmdd(rq char(8) PRIMARY KEY); --建立表,rq(日期)為主關鍵字
declare
i number; --循環用
j char(8); --記錄日期值
begin
j:='20000101'; --設初始值
for i in 1..18250 loop --365*50=600天
insert into da_yyyymmdd values(j); --insert記錄
j:=to_char(to_date(j,'yyyymmdd')+1,'yyyymmdd'); --日期加1天
end loop; --循環結束
end;
/
commit; --提交,PL/SQL塊不自動提交
posted on 2006-03-16 16:33
kelven 閱讀(285)
評論(0) 編輯 收藏 所屬分類:
DataBase