为了账号安全,请及时绑定邮箱和手机立即绑定

Oracle存储过程和自定义函数

难度初级
时长 1小时33分
学习人数
综合评分9.83
104人评价 查看评价
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下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!