日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

sql 中位数_【PL/SQL 自定义函数】 常用场景

發布時間:2023/12/15 数据库 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 sql 中位数_【PL/SQL 自定义函数】 常用场景 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

看完這章后你會學習到以下內容:

1.練習場景
2.面試場景
3.工作應用場景


總覽思維導圖:


面試部分:
1.創建函數,從emp表中查詢指定員工編號的職工的工資

CREATE OR REPLACE FUNCTION CHECK_SAL(F_EMPNO IN EMP.EMPNO%TYPE) RETURN NUMBER ISV_SAL VARCHAR(50);BEGINSELECT SAL INTO V_SAL FROM EMP WHERE EMPNO = F_EMPNO; --- 直接調用隱式游標RETURN V_SAL;EXCEPTION WHEN NO_DATA_FOUND THEN --- 異常值處理V_SAL:='沒找到任何結果';RETURN V_SAL;END;--- 調用函數 SELECT CHECK_SAL(7499) AS 工資 FROM DUAL;

2.*創建函數,返回emp表中指定職工的工資和姓名。
返回值是兩個,可用return返回一個,另一個用out參數帶回

CREATE OR REPLACE FUNCTION F_EMP_SALENAME(FEMPNO IN EMP.EMPNO%TYPE,V_ENAME OUT EMP.ENAME%TYPE)RETURN NUMBER IS V_SAL EMP.SAL%TYPE; BEGINSELECT SAL,ENAME INTO V_SAL,V_ENAMEFROM EMPWHERE EMPNO = FEMPNO;RETURN V_SAL;END;--- 第一部分借用IN參數,返回其中一個SAL --- 第二部分再重新定義一個OUT參數,不然程序不清楚要調用那個類型的參數DECLAREP_ENAME EMP.ENAME%TYPE;p_SAL EMP.SAL%TYPE;BEGINP_SAL:=F_EMP_SALENAME(7369,P_ENAME); --- 定義一個Out參數返回function的返回值SalDBMS_OUTPUT.put_line('員工'||P_ENAME||'薪酬'||P_SAL);END;

3.創建函數,根據給定的部門編號(提示: 利用&)計算該部門所有職工的平均工資。

CREATE OR REPLACE FUNCTION F_INPUTEMPNO(F_DEPTNO IN DEPT.DEPTNO%TYPE) RETURN NUMBER IS V_SAL NUMBER;BEGIN SELECT AVG(SAL) INTO V_SAL FROM EMP WHERE DEPTNO = F_DEPTNO; RETURN V_SAL; END;--- 調用時候,在輸入名稱前加入&,類似于VBA里的Input函數SELECT F_INPUTEMPNO(&部門編號) AS 平均工資 FROM DUAL;

4.創建一個函數,僅有一個形參,它接收調用函數中傳遞過來的實參--部門號,函數的返回值為該部門的一整條記錄信息.

CREATE OR REPLACE FUNCTION F_EMPINFO(F_DEPTNO IN DEPT.DEPTNO%TYPE)RETURN DEPT%ROWTYPE ISV_DEPT DEPT%ROWTYPE;BEGINSELECT * INTO V_DEPT FROM DEPT WHERE DEPTNO = F_DEPTNO;RETURN V_DEPT;END;DECLARE V_DEPT DEPT%ROWTYPE;BEGINV_DEPT := F_EMPINFO(20); --- 傳遞參數給到調用函數時新定義得變量V_Dept;DBMS_OUTPUT.PUT_LINE('部門名: '||V_DEPT.DNAME || ' 部門位置: ' || V_DEPT.LOC);END;

5*.創建函數,將emp表中工資低于平均工資的職工工資加上200,并返回修改了工資的總人數。注意:Update后面要加上Where語句否則全部都更新,其次我們善用%ROWCOUNT.

CREATE OR REPLACE FUNCTION F_MODIFY RETURN NUMBER IS BEGINUPDATE EMP SET SAL=SAL+200 WHERE SAL<(SELECT AVG(SAL) FROM EMP);RETURN SQL%ROWCOUNT; /* sql%rowcount用于記錄修改的條數,必須放在一個更新或者刪除等修改類語句后面執行,select語句用于查詢的話無法使用,當你執行多條修改語句時,按照sql%rowcount 之前執行的最后一條語句修改數為準。*/ END; / 調用 BEGINDBMS_OUTPUT.PUT_LINE(F_MODIFY); END; /

面試過程
1.輸入2個整數,返回最小到最大數之間的連乘的結果(兩個整數在1到20之間);
思路: 先對兩個數進行范圍的設置,用IF加AND判斷。
然后兩個數字一共三種可能:
A大于B,A小于B,A等于B 用IF Elsif 方式做條件判斷。

CREATE OR REPLACE FUNCTION FUNB(P1 IN INT, P2 IN INT) RETURN INTEGER IS --- 這兩個的數據類型一定要一致V_RESULT INTEGER := 1;BEGINIF (P1 < 1 AND P1 > 20) AND (P2< 1 AND P2 > 20) THENIF P2 > P1 THENFOR I IN P1 .. P2 LOOPV_RESULT := V_RESULT * I;END LOOP;ELSIF P2 < P1 THENFOR I IN P2 .. P1 LOOPV_RESULT := V_RESULT * I;END LOOP;ELSEV_RESULT := P1 * P2;END IF;ELSE DBMS_OUTPUT.put_line('請輸入正確的范圍值'); END IF; RETURN V_RESULT; END;

2.輸入3個整數,取中位數。

--- 方法一 CREATE OR REPLACE FUNCTION FUNA(P1 IN INT,P2 IN INT,P3 IN INT)RETURN INTEGER IS V_RESULT INTEGER;BEGIN SELECT CASE WHEN P1 >= P2 AND P1 <= P3 THEN P1WHEN P2 >= P1 AND P2 <= P3 THEN P2WHEN P3 >= P1 AND P3 <= P2 THEN P3 ENDINTO V_RESULT FROM DUAL;RETURN V_RESULT;END;----- 方法二 CREATE OR REPLACE FUNCTION FUN_middle(X1 IN NUMBER,X2 IN NUMBER,X3 IN NUMBER)RETURN numberIS BEGINIF (X1-X2)*(X1-X3)<=0 then return x1;elsif (x2-x1)*(x2-x3)<=0 then return x2;elsif(x3-x1)*(x3-x2)<=0 then return x3;end if;end;

3. 對比兩個數,返回一個最大值。可以在設置參數時,順帶設置默認值

-- 傳入兩個參數,返回最大值CREATE OR REPLACE FUNCTION FUN_MAX (P_NUM1 IN NUMBER, P_NUM2 IN NUMBER DEFAULT 99)RETURN NUMBER -- 函數的返回類型ISBEGINIF P_NUM1>P_NUM2 THEN RETURN P_NUM1; ELSE RETURN P_NUM2; END IF;END;

3. 工作場景(一)
-- 函數返回類型為游標(對應報表接口)

-- 傳入部門編號,返回整個部門的員工信息(函數) CREATE OR REPLACE FUNCTION FUN_REF(P_DEPTNO EMP.DEPTNO%TYPE)RETURN SYS_REFCURSOR ISC_EMP SYS_REFCURSOR;BEGINOPEN C_EMP FOR -- 不要忘記添加FORSELECT * FROM EMP WHERE DEPTNO = P_DEPTNO;RETURN C_EMP;END FUN_REF;-- 直接在Dual 表里直接調用SELECT FUN_REF(30) FROM DUAL;

總結

以上是生活随笔為你收集整理的sql 中位数_【PL/SQL 自定义函数】 常用场景的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。