--常用數(shù)據(jù)類型
VARCHAR2--文本
NUMBER--數(shù)字巡扇、金額
DATE--日期
VARCHAR2(1)--標記類字段
VARCHAR2(30)--編碼類字段
VARCHAR2(200)--描述類字段
VARCHAR2(2000)--備注類字段
--insert 一定要寫處理的字段掌唾,不要不寫全表插入
insert into cux_employee(employee_id,employee_no,....)
values(cux_employee_s.nextval,xxx,......);
--序列 表名_s
create sequence cux_employee_s;
--who 字段
created_by number --創(chuàng)建人
creation_date date --創(chuàng)建日期
last_updated_by number? --最后更新人
last_update_date date --最后更新日期
--主鍵 表名_PK
--唯一性索引 表名_U1..n
--索引 表名_N1..n
--塊
declare--聲明
begin--程序體開始
exception--異常處理
end;--程序體結束
DECLARE
? v_att1? NUMBER; --局部變量? v_變量名
? v_att2? NUMBER;
? v_result NUMBER;
BEGIN
? v_att1 := 100; --:= 賦值
? v_att2 := 0;
? v_result := v_att1 / v_att2;
? dbms_output.put_line(v_result);
EXCEPTION
? WHEN zero_divide THEN
? ? dbms_output.put_line('除數(shù)為0隘马!');
? WHEN OTHERS THEN
? ? dbms_output.put_line('error!');
END;
--常見預定義異常
DUP_VAL_ON_INDEX 唯一索引對應的列上有重復的值
NO_DATA_FOUND 使用 select into 未返回行舆吮,或應用索引表未初始化的元素時
TOO_MANY_ROWS 執(zhí)行 select into 時红淡,結果集超過一行
ZERO_DIVIDE 除數(shù)為 0
--select into? 取表中某一行數(shù)據(jù)做取值
--NO_DATA_FOUND 使用 select into 未返回行外莲,或應用索引表未初始化的元素時
--TOO_MANY_ROWS 執(zhí)行 select into 時猪半,結果集超過一行
DECLARE
? v_employee_no? VARCHAR2(30);
? v_employee_name cux_employee.employee_name%TYPE;
BEGIN
? SELECT e.employee_no,
? ? ? ? e.employee_name
? ? INTO v_employee_no,
? ? ? ? v_employee_name
? ? FROM cux_employee e
? WHERE e.employee_id = 4;
? dbms_output.put_line(v_employee_no || '/' || v_employee_name);
END;
--if & 自定義異常
DECLARE
? v_num NUMBER;
? e_error1 EXCEPTION; --申明自定義異常
? e_error2 EXCEPTION;
? e_error3 EXCEPTION;
BEGIN
? v_num := 2;
? IF v_num = 1 THEN
? ? RAISE e_error1; --拋出自定義異常
? ELSIF v_num = 2 THEN
? ? RAISE e_error2;
? ELSE
? ? RAISE e_error3;
? END IF;
EXCEPTION
? WHEN e_error1 THEN--捕獲自定義異常處理
? ? dbms_output.put_line('error1');
? WHEN e_error2 THEN
? ? dbms_output.put_line('error2');
? WHEN e_error3 THEN
? ? dbms_output.put_line('error3');
? WHEN OTHERS THEN
? ? dbms_output.put_line('others');
END;
--for 遍歷數(shù)據(jù)
--循環(huán)固定次數(shù)、范圍
DECLARE
? v_start NUMBER;
? v_end? NUMBER;
BEGIN
? v_start := 0;
? v_end? := 9;
? FOR cr IN v_start .. v_end
? LOOP
? ? dbms_output.put_line(cr);
? END LOOP;
END;
--遍歷結果集
DECLARE
? v_num NUMBER;
BEGIN
? v_num := 11;
? FOR cr IN (SELECT employee_no,
? ? ? ? ? ? ? ? ? ? employee_name
? ? ? ? ? ? ? FROM cux_employee
? ? ? ? ? ? ? WHERE rownum < v_num)
? LOOP
? ? dbms_output.put_line(cr.employee_no || cr.employee_name);
? END LOOP;
END;
--view 視圖
--創(chuàng)建 或 覆蓋 對象類型 對象名稱_v as
create or replace view cux_employee_v as
SELECT employee_no,
? ? ? employee_name
? FROM cux_employee
WHERE rownum < 10
select * from cux_employee_v;
--function 函數(shù)
--創(chuàng)建 或 覆蓋 對象類型 對象名稱(參數(shù)1 數(shù)據(jù)類型,參數(shù)2 數(shù)據(jù)類型,........)返回 數(shù)據(jù)類型 as
--傳入?yún)?shù) p_參數(shù)名
CREATE OR REPLACE FUNCTION test_fun(p_employee_id NUMBER) RETURN VARCHAR2 AS
? --DECLARE
? v_employee_no? VARCHAR2(30);
? v_employee_name cux_employee.employee_name%TYPE;
? v_result? ? ? ? VARCHAR2(200);
BEGIN
? SELECT e.employee_no,
? ? ? ? e.employee_name
? ? INTO v_employee_no,
? ? ? ? v_employee_name
? ? FROM cux_employee e
? WHERE e.employee_id = p_employee_id;
? v_result := v_employee_no || v_employee_name;
? --dbms_output.put_line(v_employee_no || '/' || v_employee_name);
? RETURN v_result;
END;
DECLARE
? v_employee_info VARCHAR2(200);
BEGIN
? v_employee_info := test_fun(p_employee_id => 5);
? dbms_output.put_line(v_employee_info);
END;
SELECT test_fun(p_employee_id => e.employee_id) employee_info,
? ? ? e.*
? FROM cux_employee e;
--procedre 存儲過程
--創(chuàng)建 或 覆蓋 對象類型 對象名稱(參數(shù)1 傳入/傳出 數(shù)據(jù)類型,參數(shù)2 傳入/傳出 數(shù)據(jù)類型,........) as
--傳入?yún)?shù) p_參數(shù)名
--傳出參數(shù) o_參數(shù)名
--傳入傳出參數(shù) x_參數(shù)名
CREATE OR REPLACE PROCEDURE test_proc(p_employee_id? NUMBER,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? o_employee_no? OUT VARCHAR2,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? o_employee_name OUT VARCHAR2) AS
? --DECLARE
BEGIN
? SELECT e.employee_no,
? ? ? ? e.employee_name
? ? INTO o_employee_no,
? ? ? ? o_employee_name
? ? FROM cux_employee e
? WHERE e.employee_id = p_employee_id;
END;
DECLARE
? v_employee_no? VARCHAR2(30);
? v_employee_name VARCHAR2(200);
BEGIN
? test_proc(p_employee_id => 5, o_employee_no => v_employee_no, o_employee_name => v_employee_name);
? dbms_output.put_line(v_employee_no || v_employee_name);
END;
--package
--package 包頭 申明公共對象
--創(chuàng)建 或 覆蓋 對象類型 對象名_pkg as
CREATE OR REPLACE PACKAGE test_pkg AS
? FUNCTION test_fun(p_employee_id NUMBER) RETURN VARCHAR2;
? PROCEDURE test_proc(p_employee_id? NUMBER,
? ? ? ? ? ? ? ? ? ? ? o_employee_no? OUT VARCHAR2,
? ? ? ? ? ? ? ? ? ? ? o_employee_name OUT VARCHAR2);
END test_pkg;
--package body 包體 具體的程序
--創(chuàng)建 或 覆蓋 對象類型 對象名_pkg as
CREATE OR REPLACE PACKAGE BODY test_pkg AS
? FUNCTION test_fun(p_employee_id NUMBER) RETURN VARCHAR2 AS
? ? --DECLARE
? ? v_employee_no? VARCHAR2(30);
? ? v_employee_name cux_employee.employee_name%TYPE;
? ? v_result? ? ? ? VARCHAR2(200);
? BEGIN
? ? SELECT e.employee_no,
? ? ? ? ? e.employee_name
? ? ? INTO v_employee_no,
? ? ? ? ? v_employee_name
? ? ? FROM cux_employee e
? ? WHERE e.employee_id = p_employee_id;
? ? v_result := v_employee_no || v_employee_name;
? ? --dbms_output.put_line(v_employee_no || '/' || v_employee_name);
? ? RETURN v_result;
? END;
? PROCEDURE test_proc(p_employee_id? NUMBER,
? ? ? ? ? ? ? ? ? ? ? o_employee_no? OUT VARCHAR2,
? ? ? ? ? ? ? ? ? ? ? o_employee_name OUT VARCHAR2) AS
? ? --DECLARE
? BEGIN
? ? SELECT e.employee_no,
? ? ? ? ? e.employee_name
? ? ? INTO o_employee_no,
? ? ? ? ? o_employee_name
? ? ? FROM cux_employee e
? ? WHERE e.employee_id = p_employee_id;
? END;
END;
DECLARE
? v_employee_info VARCHAR2(200);
BEGIN
? v_employee_info := test_pkg.test_fun(p_employee_id => 5);
? dbms_output.put_line(v_employee_info);
END;