• 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  

  • 相关阅读:
    Java Servlet(十):JSTL核心标签库
    Java Servlet(九):转发请求与重定向请求区别
    Java tomcat启动失败(Servlet3.0 Web Project):A child container failed during start
    快速安装服务
    Java Servlet(八):EL自定义函数
    Java Servlet(七):JavaWeb MVC 操作(jdk7+tomcat7+eclipse)
    新版mysql(mysql-5.7.12-winx64)安装
    oracle之 oradebug 命令用法
    Linux 绑定双网卡
    Linux 之 NTP 服务 服务器
  • 原文地址:https://www.cnblogs.com/zhangzhu/p/5443803.html
Copyright © 2020-2023  润新知