程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> Oracle基礎 各種語句的定義格式,oracle定義

Oracle基礎 各種語句的定義格式,oracle定義

編輯:Oracle教程

Oracle基礎 各種語句的定義格式,oracle定義


Oracle內建數據類型 
一、 字符數據 
1、 char(size) 
2、 varchar2(size) 最常用,最大長度4000字節 
3、 nvhar(size)、nvarchar(size) 
4、 varchar(size)
5、 long  建議使用LOB大型數據 
6、 raw 存儲二進制,建議使用LOB大型數據 

二、 數字 
1、 number(p,s) 

三、 日期 
1、 data 
2、 timestamp 
3、 timestamp with time zone 
4、 timestamp with local time zone 
5、 interval year to month 
6、 interval day to second 
四、 大型對象數據類型 
BLOB、CLOB、NCLOB、BFILE 最大長度4G 
五、 ANSI、DB2、SQL/DS 
六、 用戶自定義類型 
create type 
create type body 

SQL語句分類 
一、 數據查詢語句(DQL) 
SELECT 
二、 數據操縱語句(DML) 
INSERT、UPDATE、DELETE 
三、 數據定義語句(DDL) 
CREATE、ALTER、DROP 
四、 數據控制語句(DCL) 
GRANT、REVOKE、COMMIT、ROLLBACK、SAVEPOINT 

具體SQL語句 
一、 create table 
創建表 
create table<table_name> 

col_name<datatype>, 
col_name<datatype>, 
col_name<datatype> 

二、 alter table 
修改表 
alter table<table_name> 
[add<col_name datatype>] 
[modify<col_name datatype>] 
[drop column<column_name>] 
三、 rename 
重命名表 
rename old_table_name to new_table_name 
四、 truncate table 
刪除表中存在的信息,只保留表結構,刪除數據不可恢復 
truncate table <table_name> 
五、 drop table 
刪除表 
六、 drop table <table_name> 
七、 select 
選擇語句 
select <column_list> 
from <table_name> 
[where <codition>] 
[group by <group_by expression >] 
[having <group_condition>]                 ——組函數只能寫having之後 
[order by<col_name>] 

1. dual表 
2. sysdate系統時間 
3. where條件中用到的運算 
+-*/ 
||連接 
=、!=、^=、<>、>、>=、<、<=、any,some,all 
not、and、or 
in(相當與any)、not in(相當於!=all) 
between x and y 
not between x and y 
is null、is not null (可使用nvl()函數將null轉換成需要的值) 
exist 
like(_表示一個字符,%表示0個或多個字符) 
若字符串中包含“_”“%”,可使用escape ‘\’,如 
like ‘%s\_t%’ escape ‘\’用來匹配“s_t”字符串 
集合運算符 
4. 常用函數 
initcap首字母大寫、 
instr查找字符位置、l 
ength字符長度、 
lower轉化為小寫、 
upper轉化為大寫、 
lpad在左側填充特定長度、 
rpad在右側填充特定長度、 
rtrim剪切字符及其右側字符、 
lrtrim剪切字符及其左側字符、 
soundex、發音相似單詞 
substr、字符截取 
chr、ascii碼代表的字符 
ascii、字符的ascii碼 
translate、字符替換 
repleace、字符或字符串替換 
abs絕對值、 
ceil向上取整、 
floor向下取整、 
sqrt平方根、 
power乘方、 
sign數字正負、 
trunc截去小數、 
round四捨五入、 
exp常數e的次冪、 
mod余數、 
ln自然對數值、 
log以10為底的對數值、 
vsize存儲空間、 
greatest一組值中的最大、 
least一組值中的最大、 
add_months在一個日期上加上或減去指定月份、 
last_day返回指定月份的最後一天的日期、 
next_day返回下一個指定日期的第一天、 
months_between兩個日期相隔的月份數、 
trunc 
日期格式: 
SYEAR公元紀年、 
YY年、 
Q季、 
MM月, 
RM羅馬月, 
Month英文月份, 
WW當年第幾周, 
W當月第幾周, 
DDD當年第幾天, 
DD當月第幾天, 
D周內第幾天, 
DY星期, 
HH,HH12,12進制小時數 
HH2424小時小時數, 
MI分鐘數(0~59), 
SS秒數(0~59)) 
to_char將日期轉化為字符、 
to_date將字符轉化為日期、 
to_number將數字轉化為字符、 
decode將特定數據轉變成另一種表示 

5. 組函數 
avg平均數、忽略null 
count查詢行數、 
max最大值,忽略null、 
min最小值,忽略null、 
stddev標准差,忽略null、 
sum總和,忽略null、 
variance方差,忽略null 
6. rowin是存儲每條記錄的實際物理地址,對記錄的訪問是基於rowid的,這是存取表中數據的最快的方法。 
7. where字句不能夠對group by的結果進行限定,需要用having限定。 
8.

八、 insert 
insert into <table_name>[col_name, col_name, col_name,…,] 
values(value, value, value, value,…); 
在sqlplus下,可以用&字符進行參數替換,可以通過工具逐個輸入insert的值 
九、 update 
update <table_name> 
set col_name=value/expression, col_name=value/expression 
[where <conditions>] 

十、 delete 
delete from <table_name> 
[where <condition>]; 
或delete  <table_name> 
[where <condition>]; 

truncate和delete的區別: 
a、delete可以使用rollback命令進行撤銷,而truncate不可 
b、truncate不能觸發任何delete觸發器。 
十一、 約束 
1、 unique 
tel_number char(10) constraint cm_unique unique, 
組合constraint cm_unique unique(tel_number,online_email), 
alter table cm add constraint cm_unique unique(tel_number), 

2、 check 
tel_number char(14) check(length(tel_number)=14), 

3、 not null 
tel_number char(14) not null, 

4、 primary key 
tel_number char(14) constraint cm_primary primary key, 

5、 foreigh key 
constraint emp1_foreign foreign key(deptno) references dept1(deptno), 
級聯刪除: 
deptno number(2) references dept1(deptno) [on delete set null] 刪除子記錄時主記錄相應值為null 
constraint emp1_foreign foreign key(deptno) references dept1(deptno) [on delete cascade] 刪除子記錄時級聯刪除主記錄 
若不寫則子記錄存在不可刪除主記錄。 

十二、 連接 
1、 左連接: 
表示左表中指定的內容全部返回 
select e.ename,d.dname 
from emp1 e,dept d 
where e.deptno = d.deptno(+) 
2、 右連接: 
表示右表中指定的內容全部返回 
select e.ename,d.dname 
from emp1 e,dept d 
where e.deptno(+) = d.deptno 
3、 自連接 
select worker.ename,manager.ename 
from emp worker,emp manager 
where worker.mgr = manager.empno 
4、 嵌套查詢 
子查詢中不能有order by分組語句; 
oracle中使用exists比使用in查詢速度快。因為在使用exists時,系統會先檢查主查詢,然後運行子查詢知道它找到第一個匹配項;而在系統在執行in語句時,會先執行子查詢並將結果放到一個加了索引的臨時表,在執行子查詢之前,系統先將主查詢掛起。 
5、 集合運算 
union all:結合兩個select語句結果,可以有重復 
union:結合兩個select語句結果,消除任何相同的行 
minus:從第一個select結果中消除第二個select結果 
intersect:只返回同時出現在兩個select語句中的行 

十三、 PL/SQL 
declare 
<declarations section> 
begin 
<executable command> 
declare 
<declarations section> 
begin 
<executable command> 
end; 
end; 

1、 定義變量和sql定義相似 
variable_name [constant] datatype [not null][{:=|default} default_value] 
定義常量時使用constant。 

2、 交互式輸入變量值 
v_empno number(4):=&v_empno; 

3、 打印語句 
dbms_output.put_line(v_empno); 
4、 顯示記錄 
type record_name is record(field_definition_list); 
例: 
type t_emp is record 

v_empno emp.empno%type, 
v_ename emp.ename%type 
); 
5、 隱式記錄 
v_emp emp%rowtype; 

6、 index_by表 
type type_name is table of element_type [not null] index by binary_interger; 
declare 
type table_empno_type is table of emp.empno%type index by binary_integer; 
table_empno table_empno_type; 
i binary_integer:=1; 
begin 
select empno 
into table_empno(i) 
from emp 
where empno=7369; 
    end; 
7、 可變數組 
type type_name is [varray|varying array] (max_size) of element_type [not null] 
declare 
type varray_empno_type is varray(5) of emp.emono%type; 
varray_empno varray_empno_type; 
begin 
varray_empno:=varray_empno_type(7369.7499); 

8、 集合的方法 
count:集合中的元素個數 
delete:刪除集合中所有元素 
delete(x):刪除下標為x的元素 
delete(x,y):刪除下標從x到y的元素 
extend:在集合末尾添加一個元素 
extend(x):在集合末尾添加x個元素 
extend(x,n):在集合末尾添加n個x的副本 
first:返回第一個元素的下標號,對於varray始終返回1 
last:返回最後一個元素的下標號 
limit返回可變數組集合的最大的元素個數 
next:返回x之後的元素 
prior:返回x之前的元素 
trim:從末端刪除一個元素 
trim(x):從末端刪除x個元素 

http://www.cnblogs.com/roucheng/
9、 動態sql 
excute immediate 動態SQL語句 using 綁定參數列表 returning into輸出參數列表; 

str_sql:=’create table’||’ ’||table_name||’(’||field1||’ ’||’datatype1’||’,’|| field2||’ ’||’datatype2’||’)’; 
execute immediate str_sql; 

10、 if條件語句 
if condition then 
sequence_of_statements 
end if; 

if condition then 
sequence_of_statement 
else 
sequence_of_statement 
end if; 

if condition then 
sequence_of_statement 
else if condition2 then 
sequence_of_statement 
else 
sequence_of_statement 
end if; 


11、 case語句 
case selector 
when expression then sequence_of_statements; 
when expression then sequence_of_statements; 
when expression then sequence_of_statements; 
[else  sequence_of_statements;] 
end case; 

12、 loop循環 
loop 
  sequence_of_statements 
  if a>0 then     
exit               或exit when a>0 
end if; 
end loop; 

13、 for-loop語句 
for counter in [reverse] lower_bound..higher_bound loop 
sequence_of_statement 
        end loop; 

如: 
        for I in 1..v_count loop 
list(i) :=i*I; 
end loop; 

14、 while-loop語句 
while condition loop 
sequence_of_statements 
end loop; 

15、 游標定義 
a、cursor cursor_name [(parameter[,parameter]…)] 
[return return_type] is select_statement 
b、open cursor_name 
c、fetch cursor_name into variable[,variable,…] 
d、close cursor_name 

例: 
declare 
  cursor c_emp_ename is select ename form emp; 
v_ename emp.ename%type; 
v_count binary_integer; 
begin 
select count(rowed) 
into v_count 
from emp; 
open c_emp_ename; 
for I in i..v_count loop 
fetch c_emp_ename into v_ename; 
dbms_output.put_line(vname); 
end loop; 
close c_emp_ename; 
end 

16、 cursor for循環及其替代語句 
a、 先定義游標,之後用in(cursor_name)的方式使用該循環 
cursor cursor_dept is select deptno ,dname from dept order by deptno; 
for var in cursor_dept loop 
在這裡可以使用var來得到游標所指數據 
end loop 
b、 采用in(查詢語句)的方式使用該循環 
for var  in(select deptno ,dname from dept order by deptno;) loop 
在這裡可以使用var來得到游標所指數據 
end loop 


17、 顯示游標屬性 
%found:if c_emp_ename %fount then … end if; 
% notfount:exit when c_emp_ename %notfound; 
%isopen:if c_emp_ename % isopen then … end if; 
%rowcount:提取次數if c_emp_name %rowcount >10 then … end if 

18、 隱式游標(SQL游標) 
用來處理insert、update、delete和返回一行的select into語句,對這幾個語句進行操作時判斷處理結果用的。 
不可使用open、fetch和close進行操作。 
也包含%fount、%notfount、%isopen(總是false)、%rowcount。 

19、 異常處理 
a、 異常的拋出方式 
pl/sql運行時 
raise exception_name 
調用raise_application_erroe 
b、 exception 
when exception_name then 
    處理代碼; 
when exception_name then 
    處理代碼; 
when others then 
    處理代碼; 
c、 自定義異常 
declare 
   exceptin_name exception; 
begin 
   statements; 
raise <exception_name> 
exception 
  when <exception_name> then 
end; 

20、 子程序 

http://www.cnblogs.com/roucheng/
1、 存儲過程 
create [or replace] procedure <procedure_name> 
(<arg1[in|out|in out] ,datatype,……>) 
is|as 
[local declaration] 
begin 
executable statements 
[exception handler] 
edn [procedure_name] 

2、 函數 
create [or replace] function <function_name> 
(<arg1[mode],datatype>,……) 
return<datatype> is|as 
[local declaration] 
begin 
executable statements 
[exception handler] 
end [function_name] 

函數和過程都可以通過參數列表接收或返回另個或多個值;函數和過程的主要區別在於他們的調用方式,過程是作為一個獨立的執行語句調用的,而調用函數後需將函數的返回值賦值給某一變量。 
3、 包 
包定義: 
create [or replace] package package_name {as|is} 
public_variable_declarations| 
public_type_declarations| 
public_exception_declarations| 
public_cursor_declarations| 
function_declarations聲明| 
procedure_specifications聲明 
end [package_name] 
包主體: 
create [or replace] package body package_name {as|is} 
public_variable_declarations| 
public_type_declarations| 
public_exception_declarations| 
public_cursor_declarations| 
function_declarations實現| 
procedure_specifications實現 
end [package_name] 

4、 觸發器 
create [or replace] trigger trigger_name 觸發事件 觸發事件 
on {table_or_view_name|database} 
[referencing [old [as] <old_name>][new [as] <new_name>]]       //更新時用 
[for each row [when condition]]       //加上則為行級觸發,否則為語句級觸發 
trigger_body 

觸發時間: 
before:數據庫動作之前觸發器執行。 
after:數據庫動作之後觸發器執行 
instead of:觸發器被觸發,但相應的操作並不被執行,而運行的僅是觸發器SQL語句本身。用在 使不可被修改的視圖能夠支持修改。 

觸發事件: 
insert on:向表或視圖插入一行時 
update of:更新表或視圖某一行時 
delete on:刪除表或視圖某一行時 
create:創建一個數據庫對象時 
alter:修改一個數據庫對象時 
drop:刪除一個數據庫對象時 
start:打開數據庫時觸發觸發器,在事件後觸發 
shutdown:關閉數據庫時觸發觸發器,在事件前觸發 
logon:當一個會話建立時觸發,事件前觸發 
logoff:關閉會話時觸發,事件前觸發 
server:服務器錯誤發生時觸發,事件後觸發。 

  條件謂詞: 
inserting、updationg、deleting 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved