亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

Oracle存儲過程和自定義函數

難度初級
時長 1小時33分
學習人數
綜合評分9.83
105人評價 查看評價
9.9 內容實用
9.9 簡潔易懂
9.7 邏輯清晰
  • 語法:create or replace procedure 過程名(參數列表)

    as

    plsql程序體

    查看全部
  • 創建一個帶參數的存儲過程:

    https://img1.sycdn.imooc.com//5bebbf870001355205760281.jpghttps://img1.sycdn.imooc.com//5bebbf7e00019a6306030455.jpg

    查看全部
  • 創建和使用存儲過程:

    https://img1.sycdn.imooc.com//5bebbca600016fbb11880648.jpghttps://img1.sycdn.imooc.com//5bebbd790001640404140472.jpg

    查看全部
  • 鏈接數據庫
    查看全部
  • 存儲函數語法

    create [or replace] FUNCTION 函數名(參數列表)

    return 函數值類型

    as

    plsql子程序體;

    create or replace function query (eno in number) -- number是數據類型

    return number? --返回類型為number

    as?

    psal emp.sal%type; -- 定義變量;

    begin

    select sal into psal from emp where empno = eno;

    return psal*12 +nvl(empno,0);? -- nvl()去空函數,如果empno為null,賦值為0

    end;?

    查看全部
  • --帶參存儲過程

    create or replace procedure raisesalary(eno in number) --in 代表輸入

    as?

    --定義一個變量保存漲前的薪水

    psal emp.sal%type? --變量 psal 參數類型emp表的sal字段的類型

    begin

    select sal into psal from emp where empno = eno; --查詢emp的sal字段 into(賦值)給psal

    update emp set sal = sal+100 where empno=eno;

    --打印

    dbms_output.pun_line(psal);

    end;


    查看全部
  • java調用存儲過程
    查看全部
  • nvl(xx, 0) 如果為空則至零
    查看全部
  • package demo.oracle;


    import java.sql.CallableStatement;

    import java.sql.Connection;

    import java.sql.ResultSet;


    import org.junit.Test;


    import demo.utils.JDBCUtils;

    import oracle.jdbc.internal.OracleCallableStatement;

    import oracle.jdbc.internal.OracleTypes;


    public class TestCursor {

    @Test

    public void testCursor() {

    String sql = "{call package1.emplist(?,?)}";

    Connection conn = null;

    CallableStatement call = null;

    ResultSet rs = null;

    try {

    conn = JDBCUtils.getConnection();

    call = conn.prepareCall(sql);

    call.setInt(1,10);

    call.registerOutParameter(2, OracleTypes.CURSOR);

    call.execute();

    rs = ((OracleCallableStatement)call).getCursor(2);

    while(rs.next()) {

    double salary? = rs.getDouble("sal");

    System.out.println(salary);

    }

    }catch(Exception e) {

    e.printStackTrace();

    }finally {

    JDBCUtils.release(conn, call, null);

    }

    }

    }


    查看全部
  • package demo.oracle;


    import java.sql.CallableStatement;

    import java.sql.Connection;


    import org.junit.Test;


    import demo.utils.JDBCUtils;

    import oracle.jdbc.internal.OracleTypes;


    public class TestFunction {

    @Test

    public void testFunction() {

    String sql = "{?=call getsal(?)}";

    Connection conn = null;

    CallableStatement call = null;

    try {

    conn = JDBCUtils.getConnection();

    call = conn.prepareCall(sql);

    call.registerOutParameter(1, OracleTypes.NUMBER);

    call.setInt(2,7839);

    call.execute();

    double income = call.getDouble(1);

    System.out.println(income);

    }catch(Exception e) {

    e.printStackTrace();

    }finally {

    JDBCUtils.release(conn, call, null);

    }

    }

    }


    查看全部
  • package demo.oracle;


    import java.sql.CallableStatement;

    import java.sql.Connection;


    import org.junit.jupiter.api.Test;


    import demo.utils.JDBCUtils;

    import oracle.jdbc.internal.OracleTypes;


    public class TestProcedure {

    @Test

    public void testProcedure() {

    String sql = "{call empinform(?,?,?,?)}";

    Connection conn = null;

    CallableStatement call = null;

    try {

    conn = JDBCUtils.getConnection();

    call = conn.prepareCall(sql);

    call.setInt(1,7839);

    call.registerOutParameter(2, OracleTypes.VARCHAR);

    call.registerOutParameter(3, OracleTypes.NUMBER);

    call.registerOutParameter(4, OracleTypes.VARCHAR);

    call.execute();

    String name = call.getNString(2);

    double sal = call.getDouble(3);

    String job = call.getNString(4);

    System.out.println(name+"\t"+sal+"\t"+job);

    }catch(Exception e) {

    e.printStackTrace();

    }finally {

    JDBCUtils.release(conn, call, null);

    }

    }

    }


    查看全部
  • package demo.utils;


    import java.sql.Connection;

    import java.sql.DriverManager;

    import java.sql.ResultSet;

    import java.sql.SQLException;

    import java.sql.Statement;


    public class JDBCUtils {

    private static String driver = "oracle.jdbc.OracleDriver";

    private static String url = "jdbc:oracle:thin:@localhost:1521:orcl";

    private static String user = "scott";

    private static String password = "tiger";

    static {

    try {

    Class.forName(driver);

    } catch (ClassNotFoundException e) {

    throw new ExceptionInInitializerError(e);

    }

    }

    public static Connection getConnection() {

    try {

    return DriverManager.getConnection(url,user,password);

    } catch (SQLException e) {

    e.printStackTrace();

    }

    return null;

    }

    public static void release(Connection conn,Statement st,ResultSet rs) {

    if(rs != null) {

    try {

    rs.close();

    } catch (SQLException e) {

    e.printStackTrace();

    }finally {

    rs = null;

    }

    }

    if(st != null) {

    try {

    st.close();

    } catch (SQLException e) {

    e.printStackTrace();

    }finally {

    st = null;

    }

    }

    if(conn != null) {

    try {

    conn.close();

    } catch (SQLException e) {

    e.printStackTrace();

    }finally {

    conn = null;

    }

    }

    }

    }


    查看全部
    1 采集 收起 來源:概述

    2018-10-06

  • 不在存儲過程提交,回歸。保證事務一致性

    查看全部
  • 存儲過程和存儲函數

    在數據庫中供所有用戶程序調用的子程序(plsql語言書寫的程序)

    相同點:完成特定功能的程序

    區別:是否用retuen 語句返回值

    存儲函數可以通過return子句返回函數值

    存儲過程不可以通過return 子句返回函數值

    創建和使用存儲過程

    存儲過程只能創建和替換不能修改

    語法 : create [or replace] procedure sayhelloword 存儲過程名(參數列表)

    as

    ??--說明部分

    begin

    存儲程序;

    end;

    示例 :

    create or replace procedure sayhelloworld

    as --說明部分

    begin

    dbms_output.put_line('hello world'); --輸出hello world

    end;

    調用存儲過程

    1、sqlplus 調用

    exec 存儲過程名();

    連接sqlplus

    sqlplus scott/tiger@localhost:1521/orcl

    輸入用戶名 密碼

    打開屏幕輸出開關

    set serveroutput on

    調用存儲過程

    exec sayhelloworld();

    2、plsql程序調用

    begin

    存儲過程名(); --可以調用多次

    end;


    查看全部
  • 如何創建和使用存儲過程

    用create procedure 命令建立存儲過程和存儲函數

    語法:create [or replace] procedure 過程名 (參數列表)

    AS

    PLSQL子程序體;

    注意:存儲過程只能創建和替換,不能夠修改

    第一個存儲過程:打印helloworld

    create or replace procedure sayHelloWorld?

    as

    --說明部分

    begin

    ????dbms_output.put_line("Hello World !");

    end;

    /

    注意:在plsql中使用存儲過程或函數時在執行時需要以/結尾

    /*

    調用存儲過程

    1、execute 存儲過程名();

    ????例如:exec sayHelloWorld();

    2.在其他的plsql中調用存儲函數

    ????例如:begin

    ????????????????sayHelloWorld();

    ????????????????sayHelloWorld();

    ????????????end;

    ????????????/

    注意:使用第二種調用方法可以調用多次存儲過程

    */

    連接數據庫:sqlplus scott/tiger@localhost:1521/orcl

    說明:sqlplus 用戶名/密碼@主機號:數據庫端口號/數據庫實例名稱

    打開屏幕的復制開關:set serveroutput on


    查看全部

舉報

0/150
提交
取消
課程須知
小伙伴們,學習本門課程需要具備PL/SQL基礎,可以移步《Oracle數據庫開發必備利器之PL/SQL基礎》課程。除此以外,在課程中涉及到存儲過程和存儲函數在Java項目中的應用,因此需要小伙伴們具備Java基礎并熟悉JDBC。
老師告訴你能學到什么?
1、存儲過程和存儲函數的創建和調用 2、存儲過程和存儲函數在Java項目中的應用 3、如何在應用程序中訪問包下的存儲過程

微信掃碼,參與3人拼團

微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

友情提示:

您好,此課程屬于遷移課程,您已購買該課程,無需重復購買,感謝您對慕課網的支持!