前言
在学习JDBC的时候,因为CallableStatement遇到了这个存储过程,所以学习了一下存储过程,因为在网上看了很多教程,有些教程的sql语句写的没问题,但是我就是运行不成功,原来是因为一些细节没有被提到.
这里我做一下记录,希望能够把细节都包括进去.
sql Window和Command Window
关于存储过程的语法,这里就不赘述.
首先说两个东西:
我使用的是PL/sql Developer.这个IDE里面可以创建一个sql window和一个command window
一. sql Window
二. Command Window
Command Window是类似于sql*Plus命令终端的,
这两者在写存储过程的时候有点小差别.
带有参数的
在sql Window中创建存储过程
/*创建语句,setComm: 存储过程的名字,(salary number): 参数类型,不用写范围.*/
create or replace procedure setComm(salary number) is /*这里用is或者as好像都可以,没发现有什么不同.*/ begin update empcon set comm = salary where empno=1010; /*要执行的sql语句*/
end; /*结束*/
运行存储过程
begin setComm(300);
end;
/
在Command Window中创建存储过程
创建
sql> create or replace procedure setComm(salary number) 2 is 3 begin 4 update empcon set comm = salary where empno=1010;
5 end;
6 /
Procedure created
执行:
sql> exec setComm(22);
PL/sql procedure successfully completed
查询结果:
sql> select * from empcon;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------
7369 SMITH CLERK 7902 1980/12/17 800.00 20
7521 WARD SALESMAN 7698 1981/2/22 1250.00 500.00 30
7654 MARTIN SALESMAN 7698 1981/9/28 1250.00 1400.00 30
7782 CLARK MANAGER 7839 1981/6/9 2450.00 10
7788 SCOTT ANALYST 7566 1987/4/19 3000.00 20
7839 KING PRESIDENT 1981/11/17 5000.00 10
7876 ADAMS CLERK 7788 1987/5/23 1100.00 20
7900 JAMES CLERK 7698 1981/12/3 950.00 30
7902 FORD ANALYST 7566 1981/12/3 3000.00 20
7934 MILLER CLERK 7782 1982/1/23 1300.00 10
1010 3333 7839 2017/4/21 1 5002.00 22.00 10
9999 铜铁胆 7839 2017/4/21 1 5000.00 1500.00 10
12 rows selected
总结
带参数的存储过程就不再介绍了,其实这里有个关键点,也是我第一次忽略的,就是在Command Window里面,创建完存储过程后,要记得添加
/
符号,不然,可能会发现,一直按回车就是结束不了,不过可以用ESC结束.
sql> create or replace procedure setComm(salary number) 2 is 3 begin 4 update empcon set comm = salary where empno=1010;
5 end;
6
7
8
9
10
11
12
13
14