/*为什么要使用存储过程*/
参照别人的答案有几点好处:
1.存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般 SQL 语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。
2.当对数据库进行复杂操作时(如对多个表进行 Update,Insert,Query,Delete 时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。这些操作,如果用程序来完成,就变成了一条条的 SQL 语句,可能要多次连接数据库。而换成存储,只需要连接一次数据库就可以了。
3.存储过程可以重复使用,可减少数据库开发人员的工作量。
4.安全性高,可设定只有某此用户才具有对指定存储过程的使用权。
一般来说,存储过程的编写比基本SQL语句复杂,编写存储过程需要更高的技能,更丰富的经验。经自已测试,一个有着十万条记录的表,通过php调用存储过程比通过PHP执行sql语句获取所有记录的时间,平均快0.4秒左右.
我很单纯的一些理解:
有些数据可以在DB 里核算没有必要惊动上层代码那样的话维护起来也麻烦,也能减轻上层代码的运行压力。
比如说: 1+1 =2 要在jsp页面上显示,可以通过java代码里面去运算,也可以通过db 存储过程,这样的话你直接调存储里面的方法则OK 。
/*oracle 普通帐户和超级帐户*/
//超级帐户是最高的权限帐户,具有复制粘贴功能
//普通帐户不能制制粘贴,修改受限
//普通帐户
cmd > sqlplus > system/system
//超级帐户
cmd > sqlplus > system/system as sysdba
//一个简单的存储过程 的创建
CREATE OR REPLACE PROCEDURE EX_PROC
IS
BEGIN
DBMS_OUTPUT.PUT_LINE('HELLO ');
END;
/
//执行存储过程之前要将SERVEROUTPUT的命令设为 ON 才能显示值
SET SERVEROUTPUT ON
/*执行存储过程*/
第1种(非常用)
EXECUTE EX_PROC;
第2种(常用)
//创建一表做实验 这里以学生表为例
CREATE TABLE XUE_SHENG(ID INTEGER, XING_MING VARCHAR(25),YU_WEN NUMBER, SHU_XUE NUMBER);
INSERT INTO XUE_SHENG VALUES(1,'ZHANGSHAN',80,90);
INSERT INTO XUE_SHENG VALUES(2,'LISI',85,70);
//输入只带(1个)参数, 把查询的结果显示出来
CREATE OR REPLACE PROCEDURE XS_PROC(TEMP_ID IN INTEGER)
IS
NAME VARCHAR2(25)
BEGIN
SELECT XING_MING INTO NAME FROM XUE_SHENG WHERE ID = TEMP_ID;
DBMS_OUTPUT.PUT_LINE(NAME);
END;
/
//执行这里显示过程已创建 说明OK
//到这一步我们可以将这一个参数执行出来看
EXECUTE XS_PROC(1);
//储蓄过程的作用 (当输入学生名字时计算总分)
CREATE OR REPLACE PROCEDURE XS_PROC(TEMP_NAME IN VARCHAR2)
IS
NUM_1 NUMBER;
NUM_2 NUMBER;
BEGIN
SELECT YU_WEN , SHU_XUE INTO NUM_1, NUM_2 FROM XUE_SHENG WHERE XING_MING = TEMP_NAME ;
DBMS_OUTPUT.PUT_LINE(NUM_1 +NUM_2);
END;
/
//执行'ZHANGSHAN'的时候就显示 170的总分
EXECUTE XS_PROC('ZHANGSHAN');
//输入和输出参数一起使用
SQL> CREATE OR REPLACE PROCEDURE XS_PROC(TEMP_NAME IN VARCHAR2, TEMP_NUM OUT NUMBER)
2 IS
3 NUM_1 NUMBER;
4 NUM_2 NUMBER;
5 BEGIN
6 SELECT YU_WEN, SHU_XUE INTO NUM_1, NUM_2 FROM XUE_SHENG WHERE XING_MING=TEMP_NAME;
7 TEMP_NUM := NUM_1 +NUM_2;
8 END;
9 /
//过程已创建。
//需要用下面这种方式执行
DECLARE
TNAME VARCHAR2(25);
TNUM NUMBER;
BEGIN
TNAME:='ZHANGSHAN';
XS_PROC(TNAME,TNUM);
DBMS_OUTPUT.PUT_LINE(TNUM);
END;
/
SQL> DECLARE
2 TNAME VARCHAR2(25);
3 TNUM NUMBER;
4 BEGIN
5 TNAME:='ZHANGSHAN';
6 DBMS_OUTPUT.PUT_LINE(TNUM);
7 END;
8 /
PL/SQL 过程已成功完成。