常用SQL(Oracle)

常用SQL[ORACLE]


1.常用系統函數

2.常用sql語句

3.一些定義和關鍵字

4.需要注意點


1.常用系統函數 ↑
--decode

decode(column,if_value,value,elseif_value,value,default_value);

decode(條件,值1,翻譯值1,值2,翻譯值2,...值n,翻譯值n,缺省值)

好比一張表:

select decode(score,'A','優秀','B','良好','C','及格','不及格') from t_table
--sum

求和函數
--wm_concat

該函數可以把列值以","號分隔起來,並顯示成一行

2.常用sql語句 ↑
--新建用戶

create user zhaopei identified by zhaopei;

--給用戶權限

grant dba to zhaopei ;

--刪除表字段

alter table Tbl_Survey_Human_New DROP COLUMN 字段名;
alter table Tbl_Survey_Human_New DROP COLUMN n_oa_report_FLAG;
--新增表字段

alter table Tbl_Survey_Human_New add(字段名 字段類型);
alter table Tbl_Survey_Human_New add(n_protocaryon_report_FLAG varchar2(2));
--修改表字段

alter table Tbl_Survey_Human_New modify(字段名 字段類型);
alter table Tbl_Survey_Human_New modify(c_caseisreal_type varchar2(30));
--添加字段備註

comment on column 表名.字段名 is '註釋';
comment on column Tbl_Report_Caseseat.BLOCKED is '派查勘員受阻';

--創建序列


create sequence mysq
minvalue 1 --最小值
maxvalue 99999999999999999 --最大值
start with 1 --開始值
increment by 1 --每次增長值
cache 20; --緩存大小
View Code
--Union 並集操作 .

對兩個結果集進行並集操作,不包括重複行,同時進行默認規則的排序;
--Union All 並集操作

對兩個結果集進行並集操作,包括重複行,不進行排序;
-- CASE WHEN 表達式

--簡單Case函數

CASE sex
WHEN '1' THEN '男'
WHEN '2' THEN '女'
ELSE '其他' END

--Case搜索函數

CASE
WHEN sex = '1' THEN '男'
WHEN sex = '2' THEN '女'
ELSE '其他' END

 

--查詢相同條件的其中一條數據

select * from tb k_id in (select min(k_id) from tb group by d_id)
--動態SQL.


--動態sql execute immediate
begin
execute immediate 'select * from scott.emp';
execute immediate 'create table emp1121(id number,name varchar2(10),salary number )';
end;
View Code
--異常處理1


1 declare
2 num1 number := 1;
3 num2 number := 0;
4 my_exce exception; --定義錯誤類型
5 begin
6 if num2 = 0 then
7 raise my_exce; --自定義錯誤
8 end if;
9 num1 := num1 / num2;
10 exception
11 when my_exce then --自定義錯誤處理
12 dbms_output.put_line(sqlcode || '===' || sqlerrm);
13 dbms_output.put_line('自定義 錯誤');
14 when others then
15 dbms_output.put_line(sqlcode || '===' || sqlerrm);
16 dbms_output.put_line('除零錯誤');
17 end;
View Code
--異常處理2


1 declare
2 num1 number := 1;
3 num2 number := 0;
4 begin
5 if num2 = 0 then
6 raise_application_error(-20991, '部門代碼爲空'); --自定義異常錯誤消息
7 --RAISE_APPLICATION_ERROR(error_number,error_message,[keep_errors] );--keep_errors 爲可選
8 --error_number 是從 –20,000 到 –20,999 之間的參數
9 --error_message 是相應的提示信息(< 2048 字節)
10 end if;
11 num1 := num1 / num2;
12 exception
13 when others then
14 dbms_output.put_line(sqlcode || '===' || sqlerrm);
15 dbms_output.put_line('除零錯誤');
16 end;
View Code

3.一些定義和關鍵字 ↑
--DDL和DML

DDL:如drop,alter,truncate。
DML:如insert,update,delete,merge。

--DECLARE

declare 聲明變量
--DEFAULT

default 默認值

--數組類型.


1 DECLARE
2 --定義一個最多保存5個VARCHAR(25)數據類型成員的VARRAY數據類型
3 TYPE REG_VARRAY_TYPE IS VARRAY(5) OF VARCHAR(25);
4 --聲明一個該VARRAY數據類型的變量
5 V_REG_VARRAY REG_VARRAY_TYPE;
6
7 BEGIN
8 --用構造函數語法賦予初值
9 v_reg_varray := reg_varray_type
10 ('中國', '美國', '英國', '日本', '法國');
11
12 DBMS_OUTPUT.PUT_LINE('地區名稱:'||v_reg_varray(1)||'、'
13 ||v_reg_varray(2)||'、'
14 ||v_reg_varray(3)||'、'
15 ||v_reg_varray(4));
16 DBMS_OUTPUT.PUT_LINE('賦予初值NULL的第5個成員的值:'||v_reg_varray(5)||' count:'||v_reg_varray.count);--count可查數組的長度
17 --用構造函數語法賦予初值後就可以這樣對成員賦值
18 v_reg_varray(5) := '國';
19 DBMS_OUTPUT.PUT_LINE('第5個成員的值:'||v_reg_varray(5));
20 END;
View Code

--記錄類型


1 declare
2 type test_type is record(
3 name varchar2(10) not null := 'zhangsan',
4 id varchar2(10));
5 test_v test_type;
6 begin
7 test_v.name := '李四';
8 test_v.id := '111';
9 dbms_output.put_line(test_v.name || ' ' || test_v.id);
10 end;
View Code
4.需要注意的 ↑
存儲過程中is和as的區別

在存儲過程(PROCEDURE)和函數(FUNCTION)中沒有區別,在視圖(VIEW)中只能用AS不能用IS,在遊標(CURSOR)中只能用IS不能用AS。
賦值

str1 := 'str'; --數據庫中的賦值 是 :=
比較

str1=str2 --數據庫中的比較符 是單等號
LENGTH,LENGTHB,LENGTHC,LENGTH2,LENGTH4的區別


LENGTH(string1) 返回以字符爲單位的長度.
LENGTHB(string1) 返回以字節爲單位的長度.
LENGTHC(string1) 返回以Unicode完全字符爲單位的長度.
LENGTH2(string1) 返回以UCS2代碼點爲單位的長度.
LENGTH4(string1) 返回以UCS4代碼點爲單位的長度.
View Code
oracle中 substrb() substrc() substr2() substr4()的區別


substr 按字符截取,單位字符
substrb 按字節,單位字節
substrc unicode字符爲單位
substr2 ucs2代碼點爲單位
substr4 ucs4代碼點爲單位

substr是按字符來計算,一個字母或漢字都按一個字符計算如:
substr('智能ABC',2,2)='能A'
如果想要按字節來計算則可以採用substrb函數,用法一樣
substrb('智能ABC',3,4)='能AB'

當然還有另外幾個按不同編碼計算的函數
substrc:按Unicode編碼,
substr2:按UCS2編碼,
substr4:按UCS4編碼。
View Code

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章