• PLSQL存储过程(基础篇)-转


    我不是专门的开发人员,但存储过程又是很重要的知识,为了能够很好的记忆,现把这些基础知识总结一下。存储过程可以实现代码的充分共享,提高系统性能。

    基础篇       知识回顾

    如果经常使用特定操作,哪么可以考虑基于这些操作使用过程,简化开发和维护,可以充分实现代码共享,提高系统性能。

    过程的分类:

    (一)有过程参数

      (二)没有过程参数的
                 1.输入参数(默认是输入参数)
                 2.输出参数
                 3.输入输出参数
    基本语法规则:
    Create or replace procedure procedure_name(argument1 [mode1] datatype1 , argument2 [mode2] datatype2 ……)
    Is [as]
    PL/SQL Block;
    注意:当定义参数时,只能指定数据类型,不能指定长度.
    范例一:无参数的过程
    create or replace procedure a_time
    is
    begin
    dbms_session.set_nls('nls_date_format','''yyyy-mm-dd''');
    dbms_output.put_line(sysdate);
    end;
    /
    执行过程:(调用无参数过程可以直接引用过程名)
    SQL> exec a_time;
    2008-03-04                                                                     
    PL/SQL 过程已成功完成
    范例二:具有输入参数的过程:
    SQL> create or replace procedure b_insert (i emp.id%type,n emp.name%type)
    2 is
    3 begin
    4 insert into emp values(i,n);
    5 commit;
    6 end;
    SQL> 过程已创建。
    执行这个过程:
    SQL> exec b_insert('14','peter_lin');
    PL/SQL 过程已成功完成。
    SQL> select * from emp;
    ID          NAME                                                                
    ---------- ----------                                                          
    14         peter_lin                                                           
    1          DICK_t                                                               
    可以看到,数据自动插入到了表格中。
    范例三:带有输出参数的过程:
    SQL> create or replace procedure c_update(old varchar2,new emp.id%type,nam out emp.name%type)
    2 is
    3 begin
    4 select name into nam from emp where id=old;
    5 update emp set id=new where id=old;
    6 commit;
    7 end;
    SQL> 过程已创建。
    执行这个过程:带有输出参数的过程,需要使用变量接收这个输出值。
    SQL> declare
    2 nn emp.name%type;
    3 begin
    4 c_update(&old,&new,nn);
    5 dbms_output.put_line('被修改id的员工姓名:'||nn);
    6 end;
    7 /
    输入 old 的值: 14
    输入 new 的值: 12
    原值    4: c_update(&old,&new,nn);
    新值    4: c_update(14,12,nn);
    被修改id的员工姓名:peter_lin                                                  
    PL/SQL 过程已成功完成。
    SQL> select * from emp;
    ID         NAME                                                                 
    ---------- ----------                                                          
    12         peter_lin                                                           
    1          DICK_t                                                               
    已选择2行。
    范例四:带有输入输出参数的过程
    SQL>create or replace procedure in_out
    2 (n1 in out number,n2 in out number) is
    3 v1 number;
    4 v2 number;
    5 begin
    6 v1:=trunc(n1/n2);
    7 v2:=mod(n1,n2);
    8 n1:=v1;
    9 n2:=v2;
    10 end;
    SQL> 过程已创建。
    执行这个过程:
    SQL>declare
    2 a1 number:=&n1;
    3 a2 number:=&n2;
    4 begin
    5 in_out(a1,a2);
    6 dbms_output.put_line('除法的商'||a1||',除法的余数:'||a2);
    7 end;
    SQL> 输入 n1 的值: 100
    原值    2: a1 number:=&n1;
    新值    2: a1 number:=100;
    输入 n2 的值: 3
    原值    3: a2 number:=&n2;
    新值    3: a2 number:=3;

    除法的商33,除法的余数:1  

  • 相关阅读:
    一次关于聚合根的激烈讨论
    基于 abp vNext 和 .NET Core 开发博客项目
    PYTHON 学习笔记1 PYTHON 入门 搭建环境与基本类型
    DOCKER 学习笔记9 Kubernetes (K8s) 弹性伸缩容器 下
    DOCKER 学习笔记8 Docker Swarm 集群搭建
    DOCKER 学习笔记7 Docker Machine 建立虚拟机实战,以及错误总结
    DOCKER 学习笔记6 WINDOWS版尝鲜
    DOCKER 学习笔记5 Springboot+nginx+mysql 容器编排
    DOCKER 学习笔记4 认识DockerCompose 多容器编排
    DOCKER 学习笔记3 使用Docker部署SpringBoot
  • 原文地址:https://www.cnblogs.com/zhangzhu/p/5443803.html
Copyright © 2020-2023  润新知