欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Oracle如何自定義函數(shù)

 更新時間:2025年06月09日 09:43:11   作者:雷神樂樂  
這篇文章主要介紹了Oracle如何自定義函數(shù)的問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

1.系統(tǒng)預定義函數(shù)

  • ---聚合函數(shù) sum max min count avg median wm_concat
  • ---常用函數(shù):數(shù)學函數(shù) 字符串函數(shù) 時間 trunc (date,'q')
  • ---分析函數(shù): over()
ratio_to_report() NTILE()OVER() LEAD() LAG() wm_concat() first_value()
row_number() RANK() dense_rank()

2.Oracle自定義函數(shù)語法

CREATE OR REPLACE FUNCTION 函數(shù)名(參數(shù)1 數(shù)據(jù)類型,參數(shù)2 [IN | OUT] 數(shù)據(jù)類型……)
    RETURN 返回的數(shù)據(jù)類型 ---返回的如果是  VARCHAR2 類型,也不能給長度
    IS ---IS 或者 AS 隨便寫一個都可以
    聲明變量 ---聲明變量的時候記得給長度
BEGIN
    函數(shù)的具體邏輯;
    RETURN 聲明變量;
    --里面必須要有一個RETURN子句
---異常處理
END;

3.什么是編譯

編譯,就是把函數(shù)在數(shù)據(jù)庫里創(chuàng)建。

編譯就是將寫好的代碼放在數(shù)據(jù)庫里某個文件里存著,調用函數(shù)的時候,就會到數(shù)據(jù)庫里執(zhí)行存放的函數(shù)邏輯。

檢查函數(shù)編譯(創(chuàng)建)的時候有沒有報錯 選中函數(shù)的名稱 > 鼠標右鍵 > view/edit

4.自定義函數(shù)練習題

示例:創(chuàng)建計算 1到 N 的和的函數(shù)

create or replace function fun_N(N number) return number
as
    f_sum number := 0; -- 存放臨時累加的和
begin
    for i in 1..N
        loop
            f_sum := f_sum + i;
        end loop;
    return f_sum;
    -- 定義異常
exception
    when others then
        DBMS_OUTPUT.PUT_LINE(SQLERRM);
    -- 使用 DBMS_OUTPUT.PUT_LINE 過程輸出異常的錯誤消息。
    -- SQLERRM 是一個Oracle預定義的異常變量,它包含了最近一次數(shù)據(jù)庫運行時錯誤的描述。
end;
select fun_N(10)
FROM DUAL;

示例:假如 Oracle沒有 POWER 這個函數(shù),需要人工自己開發(fā)函數(shù)POWER_A

create or replace function POWER_A(N1 number, N2 number) return number
as
    f_power number := 1; -- 存放臨時累加的和
begin
    for i in 1..N2
        loop
            f_power := f_power * N1;
        end loop;
    return f_power;
    -- 定義異常
exception
    when others then
        DBMS_OUTPUT.PUT_LINE(SQLERRM);
end;

select POWER_A(3,3) FROM DUAL;

第1次循環(huán):v1 = 1 * 3 = 3

第2次循環(huán):v1 = 3 * 3 = 9

第3次循環(huán):v1 = 9 * 3 = 27 → 最終結果

示例:創(chuàng)建一個函數(shù),根據(jù)傳遞給函數(shù)的員工編號返回員工的姓名;

create or replace function F_ENAME(P_EMPNO number) 
return varchar2 -- 參數(shù)不能定義長度
as
    v_ename varchar2(10); -- 變量要定義長度
begin
    select ename into v_ename from emp where EMPNO = P_EMPNO;
    return v_ename;
    -- 定義異常
exception
    when others then
        DBMS_OUTPUT.PUT_LINE(SQLERRM);
end;
select F_ENAME(7369)
FROM DUAL;

開發(fā)自定義函數(shù),返回 數(shù)字的階乘,例如:SELECT F_factorial(4) FROM DUAL;

create or replace function F_factorial(P_N number) return number -- 參數(shù)不能定義長度
as
    v1 number := 1; -- 臨時存放累加值
begin
    for i in 1..P_N
        loop
            v1 := v1 * i;
        end loop;
    return v1;
    -- 定義異常
exception
    when others then
        DBMS_OUTPUT.PUT_LINE(SQLERRM);
end;

SELECT F_factorial(4) FROM DUAL;

開發(fā)自定義函數(shù),比較兩個數(shù)字的大小 P_MAX_MIN(M NUMBER,N NUMBER)返回比較大的值;

create or replace function P_MAX_MIN(M NUMBER, N NUMBER) return number
as
    temp number;
begin
    if M > N THEN
        temp := M;
    else
        temp := N;
    end if;
    return temp;
end;

select P_MAX_MIN(12, 9) from DUAL;

創(chuàng)建一個函數(shù),函數(shù)的功能是根據(jù)傳入的一個崗位名稱,將這個崗位的員工數(shù)量返回

create or replace function F_AMOUNT(P_JOB VARCHAR2) return number
as
    v_ct number;
begin
    select count(1) into v_ct from emp where JOB = P_JOB;
    return v_ct;
end;

select F_AMOUNT('MANAGER') from DUAL;

總結

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • Oracle用戶密碼含有特殊字符導致無法登陸解決方法

    Oracle用戶密碼含有特殊字符導致無法登陸解決方法

    在客戶端上使用sqlplus用普通用戶可以登錄,但是system以及sys用戶均無法登錄,提示ORA-12154: TNS: 無法解析指定的連接標識符,本文將提供詳細的解決方法,需要了解的朋友可以參考下
    2012-11-11
  • 檢查Oracle數(shù)據(jù)庫版本的7種方法匯總

    檢查Oracle數(shù)據(jù)庫版本的7種方法匯總

    在Oracle數(shù)據(jù)庫的發(fā)展中,數(shù)據(jù)庫一直處于不斷升級狀態(tài),下面這篇文章主要給大家介紹了關于檢查Oracle數(shù)據(jù)庫版本的7種方法,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-10-10
  • Oracle如何實現(xiàn)把B表某一字段更新到A表

    Oracle如何實現(xiàn)把B表某一字段更新到A表

    這篇文章主要給大家介紹了關于Oracle如何實現(xiàn)把B表某一字段更新到A表的相關資料,在Oracle中使用一個表的字段來更新另一個表的字段,可以采用UPDATE SELECT語句,文中給出了詳細的代碼示例,需要的朋友可以參考下
    2023-07-07
  • Oracle 多行記錄合并/連接/聚合字符串的幾種方法

    Oracle 多行記錄合并/連接/聚合字符串的幾種方法

    怎么合并多行記錄的字符串,一直是oracle新手喜歡問的SQL問題之一,關于這個問題的帖子我看過不下30個了,現(xiàn)在就對這個問題,進行一個總結。
    2009-11-11
  • Oracle?19c的參數(shù)sec_case_sensitive_logon與ORA-01017錯誤問題分析

    Oracle?19c的參數(shù)sec_case_sensitive_logon與ORA-01017錯誤問題分析

    這篇文章主要介紹了Oracle?19c的參數(shù)sec_case_sensitive_logon與ORA-01017錯誤,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-04-04
  • oracle常見故障類別及規(guī)劃解析

    oracle常見故障類別及規(guī)劃解析

    這篇文章主要介紹了oracle常見故障及規(guī)劃解析,小編覺得還是不錯的,這里分享給大家,供需要的朋友參考。
    2017-10-10
  • Oracle中pivot函數(shù)圖文實例詳解

    Oracle中pivot函數(shù)圖文實例詳解

    pivot操作是一種數(shù)據(jù)處理方法,可以將一個表中的行數(shù)據(jù)轉換為列數(shù)據(jù),這種轉換對于表格數(shù)據(jù)的分析和展示非常有用,下面這篇文章主要給大家介紹了關于Oracle中pivot函數(shù)的相關資料,需要的朋友可以參考下
    2023-05-05
  • Linux?CentOS7安裝Oracle11g的超完美新手教程

    Linux?CentOS7安裝Oracle11g的超完美新手教程

    Linux下安裝Oracle相比windows安裝Oracle要顯得繁瑣很多,繁瑣在前期準備工作很多,下面這篇文章主要給大家介紹了關于Linux?CentOS7安裝Oracle11g的超完美教程,需要的朋友可以參考下
    2022-07-07
  • oracle日志操作模式(歸檔模式和非歸檔模式的利與弊)

    oracle日志操作模式(歸檔模式和非歸檔模式的利與弊)

    在Oracle數(shù)據(jù)庫中,主要有兩種日志操作模式,分別為非歸檔模式與歸檔模式。默認情況下,數(shù)據(jù)庫采用的是非歸檔模式。作為一個合格的數(shù)據(jù)庫管理員,應當深入了解這兩種日志操作模式的特點,并且在數(shù)據(jù)庫建立時,選擇合適的操作模式
    2013-01-01
  • Oracle 10g client 安裝圖解教程

    Oracle 10g client 安裝圖解教程

    這篇文章主要介紹了Oracle 10g client 安裝圖解教程,需要的朋友可以參考下
    2017-03-03

最新評論