存储过程(一)

新建一张表用于测试存储过程

CREATE TABLE MYTEST(
  NAME VARCHAR2(30),
  PASSWD VARCHAR2(30)
);


编写一个存储过程,向表里面添加记录

CREATE OR REPLACE PROCEDURE SP_PRO1 IS
BEGIN
INSERT INTO MYTEST VALUES ('蛋蛋','m1234');
END;


编写一个存储过程,删除表里面的某条记录

CREATE OR REPLACE PROCEDURE SP_PRO2 IS
BEGIN
DELETE FROM MYTEST WHERE NAME = '蛋蛋';
END;


/*多行注释*/

调用过程(两种方法)

在sqlplus里面的命令为:

1.exec 过程名字(参数值1,参数值2,...)

2.call 过程名字(参数值1,参数值2,...)


--案例最简单的块
--包里面的一个过程
SET SERVEROUTPUT ON--打开输出选项
BEGIN
dbms_output.put_line('hello worldOOO');
END;


输出结果为:hello worldOOO


--案例二  有定义和执行部分的块
DECLARE
  --定义变量
  v_ename VARCHAR2(5);--定义字符串变量
BEGIN
  SELECT ename into v_ename from emp where empno = &no;--从控制台输入编号,将查出来的值付给变量v_ename
  dbms_output.put_line('雇员名' || v_ename );
END;


输出结果为:雇员名SCOTT


-案例三

查询多个字段

DECLARE
  --定义变量
  v_ename VARCHAR2(5);--定义字符串变量
  v_sal number(7,2);
BEGIN
  SELECT ename,sal into v_ename,v_sal from emp where empno = &aa;--从控制台输入编号,将查出来的值付给变量v_ename
  dbms_output.put_line('雇员名:' || v_ename ||'薪水:'|| v_sal);
END;

输出结果为:雇员名:SCOTT薪水:3000


--案例四  有定义部分、执行部分、例外部分(处理异常)

DECLARE
  --定义变量
  v_ename VARCHAR2(5);--定义字符串变量
  v_sal number(7,2);
BEGIN
  SELECT ename,sal into v_ename,v_sal from emp where empno = &aa;--从控制台输入编号,将查出来的值付给变量v_ename
  dbms_output.put_line('雇员名:' || v_ename ||'薪水:'|| v_sal);
--异常处理
EXCEPTION
  when no_data_found then
  dbms_output.put_line('朋友,你的编号输入有错误');
END;


若输入编号为1234,则查不到相关数据(自带的异常no_data_found)

输出结果为:朋友,你的编号输入有错误


--案例五  输入雇员名,新工资,修改该雇员的工资
--存储过程如下
CREATE PROCEDURE sp_pro3(spName varchar2,newSal number) IS
BEGIN 
--执行部分
UPDATE EMP SET sal = newSal where ename = spName;
END;


--在sqlplus中执行
EXEC SP_PRO3('SCOTT',4678);


=============================================

演示java程序调用oracle的存储过程 --以sp_pro3过程为例

package test;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

/**
 * 演示java程序调用oracle的存储过程 
 */
public class TestOracle {
	public static void main(String[] args) {
		Connection conn = null;
		try {
			//加载驱动建立连接
			Class.forName("oracle.jdbc.driver.OracleDriver");
			conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl","scott","jsd161102");
			//创建CallableStatement
			CallableStatement sc = conn.prepareCall("{call sp_pro3(?,?)}");
			//给?赋值
			sc.setString(1, "SMITH");
			sc.setInt(2, 10);
			//执行
			sc.execute();
			System.out.println("执行成功!");
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if(conn != null){
				try {
					conn.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
		}
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荒--

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值