Oracle數據處理
DML語言 &:地址符;(PrepareStament) 批處理:插入--------一次將10號部門的員工插入新的表中; 其不必書寫values語句;子查詢中的值列表應與insert中子句中的列名對應; delete與truncate的區別:1;delete逐條刪除,而truncate先摧毀表,然後在新建表; 2:主要區別是兩種不同的語言; 3;delete不會釋放空間,而truncate可以; 4:delete刪除時會產生碎片,而truncate不會產生; 5:delete可以閃回,而truncate不可以閃回; set feedback off 命令:不顯示執行語言; 執行硬盤上的sql腳本命令:如:@c:\sql.sql; 測試得出:delete操作速度快;
DCL語言 Oracle的事物是自動開啟,手動提交(顯示:commit;隱式:正常退出,ddl語句) 回滾(顯示:rollback;隱式:非正常退出,斷電,宕機); 通過保存點savepoint能夠更好控制事物;創建保存點的命令:savepoint 保存點名; Oracle支持的事物級別:READ COMMITED(default),SERIALIZABLE,READ ONLY;
DDL語言 對象有12個 表:創建表時需要權限,空間;我們可以通過子查詢快速建表,可以通過add,modfiy,drop,rename實現對表字段的修改; Oracle的回收站:show recyclebin 查看回收站;purge recyclebin 清空回收站;並不是每個用戶都有回收站,管理員沒有回收站,普通用戶才會有回收站; 如何將回收站的表取回?---閃回課程 表的約束:not null,unique,primary key,foreign key,check;一般創建表和創建約束分開,便於閱讀; 約束的例子:
create table student
(
pid number constraint student_PK primary key,
sname varchar2(20) constraint student_name_notnull not null,
gender varchar2(2) constraint student_gender check (gender in('男','女')),
email varchar2(20) constraint student_email_unique unique
constraint student_email_notnull not null,
deptno number constraint student_FK references dept(deptno) on delete cascade
)
視圖:從表中抽出的邏輯上相關的數據集合;目的:簡化查尋; 不建議:通過視圖對表的修改;
序列:sequences主要作用是給表的主鍵提供值,其有兩個屬性nextval,currval; 其特點:其是個數組,存在於內存當中; 數據不連續:回滾,系統異常--停電,多張表使用一個序列;
索引:提高查詢速度; 如:create index myindex on emp(deptno,job); 同義詞:別名
Oracle的plsql
操作Oracle最快的語言是plsql; 變量的類型:基礎類型,引用性變量(%type),記錄性變量(%rowtype); 其賦值方式有兩種:“:=”和into關鍵字; set serveroutput on 命令:打開控制台打印輸出; accept num prompt '請輸入'命令是:接受鍵盤上輸入的內容; plsql的if語句必須以 if end結束;
光標:cursor用於儲存一個查詢返回的多行數據;其屬性:%isopen是否打開;%rowcount記錄數;%notfound 沒有記錄; 使用cursor首先open和最後close;Oracle最多支持300個光標;show paremeters 查看參數設置; 案例:使用光標查詢員工的姓名和薪水,並打印;給員工漲工資,總裁1000,經理800,其它400;其也需要手動提交事物; 帶參數的光標:其定義,打開光標時帶參數,其它用法和不帶光標的用法相同; 案例:查詢某個部門的員工姓名
例外:系統自帶的例外,自定義的例外;在Java中異常是向上處理機制,而plsql不能向上拋, 在java中try。。catch。。finally 而plsql中只有try。。catch其寫法是exception when 。。then。。。 在declare中自定義例外:例外名 exception; 使用raise跑出異常,異常會幫你自動關閉光標;
實例一:統計每年入職的人數; 實例二:為員工漲工資,從最低工資調起沒人漲10%,但工資總額不能超過5萬元;請計算漲工資的人數和漲工資後的工資總額,並輸出漲工資人數和工資總額;
===================================================== 存儲過程(沒有返回值),存儲函數(有返回值),觸發器 Java不能直接調用plsql,而是寫成存儲過程,存儲函數,讓後用Java來調用; 創建存儲過稱:create[ or replace] procedure 過程名(參數列表) as plsql子程序體;參數類型及輸入輸出要標明;不要在存儲函數,存儲過程中不要提交事物; 調用存儲過程的方法:exec 過程名();在另一個plsql中調用:begin 過程名();end;這兩種方法; 創建存儲函數:create[ or replace] procedure 過程名(參數列表) return 返回值類型 as plsql子程序體; 輸出參數適用out,存儲過程,存儲函數都可以返回一個或者多個參數,其二者基本上沒有區別; 實例一:查詢某個部門中,所有員工的所有信息 需要包頭和包體: 當返回的結果是集合,可以使用光標來實現;