Oracle 函數 “判斷數據表中不存在的數據,才允許通過”


 1 create or replace function mca_detail_material_val(p_material_code VARCHAR2,  --實參
 2                                                    p_material_name VARCHAR2,
 3                                                    p_mca_no VARCHAR2
 4                                                   ) 
 5        RETURN varchar2 AS
 6        
 7  --物料編碼/名稱的驗證,數據表(MATERIAL)中 不存在 該物料編碼/名稱,允許通過,填其他值都不允許通過
 8 
 9        v_count1   NUMBER; -- 形參
10        v_count2   NUMBER;
11        v_count3   NUMBER;
12        v_count4   NUMBER;
13 
14        CURSOR get_wl_material_code1 IS
15               SELECT count(m.material_code)  -- count()函數:查詢出來的記錄條數(記錄數)
16               FROM   MATERIAL m
17               WHERE  m.material_code = p_material_code;
18               
19        CURSOR get_wl_material_code2 IS
20               SELECT count(material_code)
21               FROM   mca_detail m
22               WHERE  m.material_code = p_material_code AND m.mca_no <> p_mca_no;
23                                                      -- m.mca_no <> p_mca_no:在編輯時,排除此單號(不做比較)---物料編碼
24        CURSOR get_wl_material_name1 IS
25               SELECT count(m.material_name)
26               FROM   MATERIAL m 
27               WHERE  m.material_name = p_material_name;
28               
29        CURSOR get_wl_material_name2 IS
30               SELECT count(m.material_name)
31               FROM   mca_detail m
32               WHERE  m.material_name = p_material_name AND m.mca_no <> p_mca_no;
33 BEGIN                                                -- m.mca_no <> p_mca_no:在編輯時,排除此單號(不做比較)---物料名稱
34       OPEN get_wl_material_code1;
35       FETCH get_wl_material_code1 INTO v_count1;
36       CLOSE get_wl_material_code1;
37       
38       OPEN get_wl_material_code2;
39       FETCH get_wl_material_code2 INTO v_count3;
40       CLOSE get_wl_material_code2;
41       
42       OPEN get_wl_material_name1;
43       FETCH get_wl_material_name1 INTO v_count2;
44       CLOSE get_wl_material_name1;
45       
46       OPEN get_wl_material_name2;
47       FETCH get_wl_material_name2 INTO v_count4;
48       CLOSE get_wl_material_name2;
49 
50       IF v_count1+v_count3 <> 0 THEN
51          RETURN '4823272'; -- 錯誤信息碼(信息碼表)     該信息碼對應的內容:物料編碼已存在,不允許出現相同值,請確認該編碼的真確性!
52       ELSIF v_count2+v_count4 <> 0 THEN
53          RETURN '4823273'; -- 錯誤信息碼(信息碼表)     該信息碼對應的內容:物料名稱已存在,不允許出現相同值,請確認該編碼的真確性
54       END IF;
55 
56       RETURN '0';
57 
58 end mca_detail_material_val;

 

注:如需測試該函數,請復制到Oracle數據庫中,右擊函數名“mca_detail_material_val”,選擇“test” 進行測試,測試時記得把相應的表名及字段換成自己建立的

 

 

 

 

原創作者:DSHORE

出處:http://www.cnblogs.com/dshore123/

歡迎轉載,轉載務必說明出處。(如果本文對你有用,可以點擊一下右下角的 推薦,謝謝!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM