自定义sql_【PL/SQL 自定义函数】 常用场景
看完這章后你會(huì)學(xué)習(xí)到以下內(nèi)容:
1.練習(xí)場(chǎng)景
2.面試場(chǎng)景
3.工作應(yīng)用場(chǎng)景
總覽思維導(dǎo)圖:
面試部分:
1.創(chuàng)建函數(shù),從emp表中查詢(xún)指定員工編號(hào)的職工的工資
2.*創(chuàng)建函數(shù),返回emp表中指定職工的工資和姓名。
返回值是兩個(gè),可用return返回一個(gè),另一個(gè)用out參數(shù)帶回
3.創(chuàng)建函數(shù),根據(jù)給定的部門(mén)編號(hào)(提示: 利用&)計(jì)算該部門(mén)所有職工的平均工資。
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;--- 調(diào)用時(shí)候,在輸入名稱(chēng)前加入&,類(lèi)似于VBA里的Input函數(shù)SELECT F_INPUTEMPNO(&部門(mén)編號(hào)) AS 平均工資 FROM DUAL;4.創(chuàng)建一個(gè)函數(shù),僅有一個(gè)形參,它接收調(diào)用函數(shù)中傳遞過(guò)來(lái)的實(shí)參--部門(mén)號(hào),函數(shù)的返回值為該部門(mén)的一整條記錄信息.
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); --- 傳遞參數(shù)給到調(diào)用函數(shù)時(shí)新定義得變量V_Dept;DBMS_OUTPUT.PUT_LINE('部門(mén)名: '||V_DEPT.DNAME || ' 部門(mén)位置: ' || V_DEPT.LOC);END;5*.創(chuàng)建函數(shù),將emp表中工資低于平均工資的職工工資加上200,并返回修改了工資的總?cè)藬?shù)。注意:Update后面要加上Where語(yǔ)句否則全部都更新,其次我們善用%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用于記錄修改的條數(shù),必須放在一個(gè)更新或者刪除等修改類(lèi)語(yǔ)句后面執(zhí)行,select語(yǔ)句用于查詢(xún)的話(huà)無(wú)法使用,當(dāng)你執(zhí)行多條修改語(yǔ)句時(shí),按照sql%rowcount 之前執(zhí)行的最后一條語(yǔ)句修改數(shù)為準(zhǔn)。*/ END; / 調(diào)用 BEGINDBMS_OUTPUT.PUT_LINE(F_MODIFY); END; /面試過(guò)程
1.輸入2個(gè)整數(shù),返回最小到最大數(shù)之間的連乘的結(jié)果(兩個(gè)整數(shù)在1到20之間);
思路: 先對(duì)兩個(gè)數(shù)進(jìn)行范圍的設(shè)置,用IF加AND判斷。
然后兩個(gè)數(shù)字一共三種可能:
A大于B,A小于B,A等于B 用IF Elsif 方式做條件判斷。
2.輸入3個(gè)整數(shù),取中位數(shù)。
--- 方法一 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. 對(duì)比兩個(gè)數(shù),返回一個(gè)最大值。可以在設(shè)置參數(shù)時(shí),順帶設(shè)置默認(rèn)值
-- 傳入兩個(gè)參數(shù),返回最大值CREATE OR REPLACE FUNCTION FUN_MAX (P_NUM1 IN NUMBER, P_NUM2 IN NUMBER DEFAULT 99)RETURN NUMBER -- 函數(shù)的返回類(lèi)型ISBEGINIF P_NUM1>P_NUM2 THEN RETURN P_NUM1; ELSE RETURN P_NUM2; END IF;END;3. 工作場(chǎng)景(一)
-- 函數(shù)返回類(lèi)型為游標(biāo)(對(duì)應(yīng)報(bào)表接口)
總結(jié)
以上是生活随笔為你收集整理的自定义sql_【PL/SQL 自定义函数】 常用场景的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 小程序picker标题_微信小程序-自定
- 下一篇: php连接mysql_PHP连接MySQ