DML/DDL/DCL、增刪改查、建表、約束、序列sequence、索引index、游標(biāo)cursor、plsql塊、存儲(chǔ)過(guò)程、function
DDL: CREATE,ALTER,DROP,TRUNCATE
DML: INSERT,DELETE,UPDATE,SELECT
DCL: rollback,commit,grant,revoke,savepoint
表操作:
建表:create table 表名(列1? 數(shù)據(jù)類型,列2? 數(shù)據(jù)類型。。。。。。。)
添加列:alter table 表名 add 列名 數(shù)據(jù)類型
刪除列:alter table 表名 drop column 列名
列重命 名: alter table 表名? rename column 列名 to 新列名
刪除表: drop table 表名
偽列:ROWID和ROWNUM
查詢關(guān)鍵詞:from, where, order by desc/asc,group by [having...],sysdate,like,in,not,exists,null,union [all],join......
函數(shù):
count(*),sum,avg,max,min,trunc,mod
decode(value,if1 then1,if 2,then2,缺省值…..),substr (char, m, n),Concat (expr1,xpr2),Length(char),NVL(value,值)
replace(char, searchstring,[replacement_string]),lower,upper,trim
ADD_MONTHS(day,n),MONTHS_BETWEEN(day1,day2 ),LAST_DAY(day),sysdate,systimestamp
to_char,to_date,to_number
約束:constraint?約束名?primary key/foregin key/unique/check
alter table table_name modify column_name constraint?約束名 not null | null;
alter table table_name?add constraint?約束名?primary key/unique(column_name [, column_name]);
alter table table_name?add constraint?約束名 foregin key(column_name) references ref_table_name (ref_column_name);
alter table table_name?add constraint?約束名?check (expression);
建/刪索引:
create index 索引名 on 表名 (列 ASC );
drop index 索引名;
建/刪序列:currVal,nextVal from dual;
CREATE SEQUENCE 序列名 MINVALUE 10 MAXVALUE 2000?START WITH 10?INCREMENT BY 1 CACHE 10;
drop sequence序列名;
存儲(chǔ)過(guò)程prodcure?:exec存儲(chǔ)過(guò)程名(....);
create or replaceprodcure存儲(chǔ)過(guò)程名[(參數(shù)名1 [in/out/in out] 參數(shù)類型,參數(shù)名2 [in/out/in out] 參數(shù)類型...... )]
is/as
變量定義
begin
程序段;
exception
when 異常[NO_DATA_FOUND] ?then
程序段;
end 存儲(chǔ)過(guò)程名;
/
pl/sql塊:直接執(zhí)行
declare
變量定義
begin
程序段
exception
when 異常[NO_DATA_FOUND] ?then
程序段;
end;
函數(shù):function存儲(chǔ)過(guò)程、pl/sql塊,sql可調(diào)用 需要返回值
create or replacefunction函數(shù)名[(參數(shù)名1 [in] 參數(shù)類型,參數(shù)名2 [in] 參數(shù)類型...... )]
return 數(shù)據(jù)類型[數(shù)據(jù)庫(kù)類型] is/as
變量定義
begin
程序段;
exception
when 異常[NO_DATA_FOUND] ?then
程序段;
end 存儲(chǔ)過(guò)程名;
/
語(yǔ)法:變量定義支持 %TYPE 和 %ROWTYPE 屬性類型
1、條件控制:
a.if條件then程序段;elsif條件then程序段;else程序段;end if;
b.case
whenv_g='指定值1'then程序段;
whenv_g='指定值2'then程序段;.....
else程序段;
end case;
2、循壞控制
a.loop程序段end loop;
b.while條件loop程序段end loop;
c.foriin1..100loop程序段end loop;
3、執(zhí)行動(dòng)態(tài)sql:
EXECUTE IMMEDIATEdynamic_sql_string?[INTO? define_variable_list]?[USING bind_argument_list];
4、異常處理:預(yù)定義異常/自定義異常
預(yù)定義:
異常說(shuō)明
ACCESS_INTO_NULL在未初始化對(duì)象時(shí)出現(xiàn)
CASE_NOT_FOUND在case語(yǔ)句中的選項(xiàng)與用戶輸入的數(shù)據(jù)不匹配時(shí)出現(xiàn)
COLLECTION_IS_NULL在給尚未初始化的表或數(shù)據(jù)賦值時(shí)出現(xiàn)
CURSOR_ALREADY_OPEN在用戶試圖打開已經(jīng)打開的游標(biāo)時(shí)出現(xiàn)。
INVALID_CURSOR執(zhí)行非法游標(biāo)運(yùn)算時(shí)出現(xiàn)
TOO_MANY_ROWS在執(zhí)行select into語(yǔ)句后返回多行時(shí)出現(xiàn)。
ZERO_DIVIDE以零作除數(shù)時(shí)出現(xiàn)
VALUE_ERROR產(chǎn)生大小限制錯(cuò)誤時(shí)出現(xiàn)。如:變量中的列值超出變量的大小
NO_DATA_FOUND在表中不存在請(qǐng)求的行時(shí)出現(xiàn)。
自定義:聲明異常: myexcption exception; ?拋異常: rasie myexcption;
游標(biāo):隱式、顯式、REF
隱式:自動(dòng)聲明,打開,關(guān)閉
隱式游標(biāo)的屬性有:
%FOUND – SQL 語(yǔ)句影響了一行或多行時(shí)為 TRUE
%NOTFOUND – SQL 語(yǔ)句沒(méi)有影響任何行時(shí)為TRUE
%ROWCOUNT – SQL 語(yǔ)句影響的行數(shù)
%ISOPEN? - 游標(biāo)是否打開,始終為FALSE
顯式:
定義:CURSOR IS?SELECT statement FOR UPDATE;
打開: open cursor_name;
使用:
loop
fetch cursor_name into 變量名
EXITWHEN?cursor_name%NOTFOUND;
程序段;
--更新數(shù)據(jù)
UPDATE ?SET ?WHERE CURRENT OF ;
--刪除數(shù)據(jù)
DELETE FROM ?WHERE CURRENT OF ;
end loop;
for 循壞:
for dataAll in cursor_name
loop
程序段;
end loop;
關(guān)閉:close cursor_name;
REF:
聲明:
a. 定義ref:TYPE IS REF CURSOR?[RETURN ];
b. 定義ref變量: ref_var ref_cursor_name;
使用游標(biāo):
open ref_var ?for 'SELECT statement';
loop
fetch cursor_name into 變量名
EXITWHEN?cursor_name%NOTFOUND;
程序段;
end loop;
關(guān)閉游標(biāo):close?ref_var ?;