n  过程

过程用于执行特定的操作,当建立过程时,既可以指定输入参数(in),也可以指定输出参数(out),通过在过程中使用输入参数,可以将数据传递到执行部分;通过使用输出参数可以将执行部分的数据传递到应用环境,在sqlplus中可以使用create procedure命令来建立过程。

实例如下:

①请考虑编写一个过程,可以输入雇员名,新工资,可修改雇员的工资

②如何调用过程有两种方法:

exec过程名(参数值…)

call  过程名(参数值…)

n  过程的进一步讲解

oracle过程,可以指定参数是输入的参数还是输出的参数,基本语法如下:

create procedure 过程名(变量名 in 变量类型…,变量名 out 变量类型…) is

//定义变量

begin

//执行语句;

end;

注意:变量如果没有写in,默认是输入in

变量类型不要指定大小,

特别说明:当我们编写过程时,可以输入show
error来显示具体的错误

SQL>   create or replace procedure pro5(in_ename in
varchar2,in_newsal in number) is

2   
begin

3     
update emp set sal=in_newsal where ename=in_ename;

4     
end;

5  /

Procedure
created

SQL>
exec pro5('SMITH',100);

PL/SQL
procedure successfully completed

如何在java程序中调用过程

需求说明:使用java调用刚才写的过程

package com.lsz.test;

import java.sql.*;

public class TestProcedure {

public static void main(String[] args) {

Connection ct=null;

CallableStatement cs=null;

try {

Class.forName("oracle.jdbc.driver.OracleDriver");

ct=DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:ORCL","scott","tiger");

cs=ct.prepareCall("{call pro5(?,?)}");

cs.setString(1,"SMITH");

cs.setFloat(2,456.5f);

cs.execute();

} catch (Exception e) {

e.printStackTrace();

}finally{

try {

}
catch (Exception e2) {

}

}

}

}

对SQLHelper类升级,添加一个可以调用存储过程的方法

public static void executeProcedure(String
sql,String[] parameters){

try {

ct=DriverManager.getConnection(url,username,password);

cs=ct.prepareCall(sql);

if(parameters!=null&&!"".equals(parameters)){

for(int i=0;i<parameters.length;i++){

cs.setString(i+1,parameters[i]);

}

}

cs.execute();

} catch (Exception e) {

e.printStackTrace();

throw new
RuntimeException(e.getMessage());

}finally{

close(rs,cs,ct);

}

}

课堂小练习:编写一个过程,可以接受ID和薪水,更新薪水,如果ID不存在,需要在exception中捕获,并给出提示!需要在控制台和java程序中都调用

create
or
replace
procedure
pro1(v_empno
number,v_sal
number)
is

begin

update
emp set
sal=v_sal
where
empno=v_empno;

exception

when
no_data_found then

dbms_output.put_line('你输入的编号有误!');

end;

以上代码不会出现异常,因为no_data_found是在select语句中使用的。

pl/sql基础知识—过程快速入门的更多相关文章

  1. pl/sql基础知识—函数快速入门

    n  函数 函数用于返回特定的数据,当建立函数式,在函数头部必须包含return子句,而在函数体内必须包含return语句返回的数据,我们可以使用create function来建立函数,实际案例: ...

  2. web前端基础知识及快速入门指南

    web前端基础知识及快速入门指南 做前端开发有几个月了,虽然说是几个月,但是中间断断续续的上课.考试以及其它杂七杂八的事情,到现在居然一直感觉自己虽然很多前端的知识很眼熟,却也感觉自己貌似也知识在门口 ...

  3. pl/sql基础知识—定义并使用变量

    n  介绍 在编写pl/sql程序是,可以定义变量和常量:在pl/sql程序中包括有: ①标量类型(scalar) ②复合类型(composite) ③参照类型(reference) ④lob(lar ...

  4. PL/SQL 基础知识简介

    1.PL/SQL代码块 PL/SQL 代码块是指令的集合,支持所有的DML,NDS,DBMS_SQL,DDL. :DML 是数据操纵语言(Data Manipulation Language)包括,I ...

  5. PL/SQL基础知识

    Oracle之PL/SQL学习笔记 自己在学习Oracle是做的笔记及实验代码记录,内容挺全的,也挺详细,发篇博文分享给需要的朋友,共有1w多字的学习笔记吧.是以前做的,一直在压箱底,今天拿出来整理了 ...

  6. pl/sql基础知识—pl/sql块介绍

    n  介绍 块(block)是pl/sql的基本成型单元,编写pl/sql程序实际上就是编写pl/sql块.要完成相对简单的应用功能,可能只需要编写一个pl/sql块:但是如果要想实现复杂的功能,可能 ...

  7. 【PL/SQL基础知识】结构

    1.pl/sql块的结构 declare --声明的变量.类型.游标 begin --程序的执行部分(类似于java的main()方法) exception --针对begin块中出现的异常 ---w ...

  8. pl/sql基础知识—触发器

    n  触发器简单介绍 触发器是指隐含执行的存储过程,它不是由程序员或者是DBA来显式调用,而是因为某个操作引发执行的.当定义触发器时,必须要指定触法的事件和触发的操作,常用的触发事件包括insert, ...

  9. pl/sql基础知识—包

    n  包 包用于在逻辑上组合过程和函数,它由包规范和包体两部分组成. 为什么需要包:使用包可以更好的管理自己写的函数.过程 ①我们可以使用create package命令来创建包:     creat ...

随机推荐

  1. 约束布局ConstraintLayout加快布局速度

    Android Studio2.2更新布局设计器,同时,引人了约束布局ConstraintLayout. 简单来说,可以把它看做是相对布局的升级版本,但是区别与相对布局更加强调约束.何为约束,即控件之 ...

  2. idea如何清晰地查看java类的继承结构及该类的所有方法?

    转载自:https://blog.csdn.net/luo609630199/article/details/82192938 我们在世用idea是平时除了编码外,有时我们需要查看源码或者别人写的代码 ...

  3. httpclient遇到java.net.URISyntaxException: Illegal character in scheme name at index 0:

    正准备按照大佬的解决办法处理, 看会一条回复,说url有空格 检查了一下,还真是有空格 去除url中的空格,问题解除

  4. CentOS 6.5 usb安装

    我只说一下将CentOS安装作为服务器的情况,但是适用于普遍的CentOS安装过程,首先下载CentOS的安装镜像文件,有这么几种:CentOS-6.5-x86_64-LiveCD.CentOS-6. ...

  5. 解决导入TensorFlow后出现警告的的问题解决:通过降低numpy的版本

    在原有基础上安装tensorflow 重新虚拟出一个环境安装tensorflow 安装 测试 大多教程都是重新虚拟出一个环境,原有环境就可以支持为什么还要重建一个新的环境,如果以后遇到坑了更新解释. ...

  6. LA3695 Distant Galaxy

    Distant Galaxy https://vjudge.net/problem/UVALive-3695 You are observing a distant galaxy using a te ...

  7. bert 预训练模型路径

    google的bert预训练模型: BERT-Large, Uncased (Whole Word Masking): 24-layer, 1024-hidden, 16-heads, 340M pa ...

  8. Kotlin 委托(1)类委托、变量委托注意事项

    1.官方文档 英文: https://kotlinlang.org/docs/reference/delegation.html https://kotlinlang.org/docs/referen ...

  9. JS为什么是单线程的?

    JavaScript语言最大的特点就是单线程.它是浏览器的脚本语言.在同一时间只能做一件事.用于操作DOM.如果JS是多线程的,当我在给一个DOM添加内容时,又删除了这个DOM,那么JS该怎么做. 关 ...

  10. Spring MVC 搭建web项目示例

    环境为Eclipse 1:新建Dynamic web project  : springMvcDemo 2:下载spring的jar包,把jar包复制到WEB-INF/lib目录下 3.添加配置文件w ...