新建一张表用于测试存储过程
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();
}
}
}
}
}