2024-03-19  阅读(10)
原文作者:吴声子夜歌 原文地址: https://blog.csdn.net/cold___play/article/details/103836260

带参数的存储过程

存储过程允许带有参数,参数的使用将增加存储过程的灵活性,给数据库编程带来极大的方便。

存储过程中如果使用了参数,在执行存储过程时必须为其指定参数。总的来说,参数可以是常量、变量和表达式等。

Oracle有三种参数模式:

  • IN
  • OUT
  • IN OUT

IN参数

该类参数值由调用者传入,并且只能够被存储过程读取。这种模式的参数是最常用的,也是默认的参数模式。

示例:创建一个带有输入参数的存储过程,当使用Insert_student添加学生信息时,用户只需要向该存储过程传入参数值,然后由存储过程从中读取数据。

    create or replace procedure Insert_student(SNO IN varchar2,SNAME IN varchar2,SSEX IN char,SAGE IN number,SDEPT IN varchar2) is
    begin
     insert into student
     values(SNO,SNAME,SSEX,SAGE,SDEPT);
     exception
       when dup_val_on_index then dbms_output.put_line('重复的学生ID');
       when others then dbms_output.put_line('发生其它错误!'); 
    end Insert_student;

执行存储过程并传递参数:
共有三种方式:

  • 名称传递

    202403192031326481.png

  • 位置传递

    202403192031329092.png

  • 组合传递

    202403192031332583.png

OUT参数

该类参数值由存储过程写入。

示例:创建一个带有输出参数的存储过程,该存储过程根据学生的姓名返回该学生的所属学院。

    create or replace procedure p_getSdept(NAME IN varchar2,DEPT OUT varchar2) 
    is
     temp varchar(20);
    begin
      select s.SDEPT into temp
      from student s
      where s.SNAME=NAME;
      DEPT := temp;
    end p_getSdept;

执行:

    ![在这里插入图片描述](https://img-blog.csdnimg.cn/2020010419172434.png)
    
    
    ### IN OUT参数
    ==示例:使用IN OUT参数交换两个变量的值==
```sql
    create or replace procedure p_swap(value1 in out number,value2 in out number) 
    is
     temp number;
    begin
      temp := value1;
      value1 := value2;
      value2 := temp;
    end p_swap;

执行:

    declare 
      var_1 varchar2:=1;
      var_2 varchar2:=2
    begin
      p_swap(var_1,var_2);
      dbms_output.put_line('var_1='||var_1);
      dbms_output.put_line('var_2='||var_2);
    end;

默认值问题

创建存储过程的同时可以给输入参数提供默认值。OUT和IN OUT参数不具有默认值。

示例:根据传入SNO查询学生姓名,默认查询1号学生姓名

    create or replace procedure p_getStudent(s_no in varchar2 default '1')
    is
     name varchar2(20);
    begin
      select SNAME into name
      from student 
      where SNO = s_no;
      dbms_output.put_line('name='||name);
    end p_getStudent;

执行:

202403192031335084.png

202403192031338125.png


Java 面试宝典是大明哥全力打造的 Java 精品面试题,它是一份靠谱、强大、详细、经典的 Java 后端面试宝典。它不仅仅只是一道道面试题,而是一套完整的 Java 知识体系,一套你 Java 知识点的扫盲贴。

它的内容包括:

  • 大厂真题:Java 面试宝典里面的题目都是最近几年的高频的大厂面试真题。
  • 原创内容:Java 面试宝典内容全部都是大明哥原创,内容全面且通俗易懂,回答部分可以直接作为面试回答内容。
  • 持续更新:一次购买,永久有效。大明哥会持续更新 3+ 年,累计更新 1000+,宝典会不断迭代更新,保证最新、最全面。
  • 覆盖全面:本宝典累计更新 1000+,从 Java 入门到 Java 架构的高频面试题,实现 360° 全覆盖。
  • 不止面试:内容包含面试题解析、内容详解、知识扩展,它不仅仅只是一份面试题,更是一套完整的 Java 知识体系。
  • 宝典详情:https://www.yuque.com/chenssy/sike-java/xvlo920axlp7sf4k
  • 宝典总览:https://www.yuque.com/chenssy/sike-java/yogsehzntzgp4ly1
  • 宝典进展:https://www.yuque.com/chenssy/sike-java/en9ned7loo47z5aw

目前 Java 面试宝典累计更新 400+ 道,总字数 42w+。大明哥还在持续更新中,下图是大明哥在 2024-12 月份的更新情况:

想了解详情的小伙伴,扫描下面二维码加大明哥微信【daming091】咨询

同时,大明哥也整理一套目前市面最常见的热点面试题。微信搜[大明哥聊 Java]或扫描下方二维码关注大明哥的原创公众号[大明哥聊 Java] ,回复【面试题】 即可免费领取。

阅读全文