存储过程培训
来源:互联网 发布:mac dw 英文变中文 编辑:程序博客网 时间:2024/05/20 19:49
存储过程:
conn scott/tiger;
1.基本结构
CREATE OR REPLACE PROCEDURE 存储过程名字
(
参数1 IN NUMBER,
参数2 IN NUMBER
) IS
变量1 INTEGER :=0;
变量2 DATE;
BEGIN
END 存储过程名字
-------------
2.SELECT INTO STATEMENT
将select查询的结果存入到变量中,可以同时将多个列存储多个变量中,必须有一条
记录,否则抛出异常(如果没有记录抛出NO_DATA_FOUND)
例子:
BEGIN
SELECT col1,col2 into 变量1,变量2 FROM typestruct where xxx;
EXCEPTION
WHEN NO_DATA_FOUND THEN
xxxx;
END;
---------------
CREATE OR REPLACE PROCEDURE pro_test1
(
c1 IN NUMBER
) IS
b1 number :=0;
b2 DATE;
BEGIN
b2:=to_date('1990-11-20','yyyy-mm-dd');
select comm INTO b1 from emp where 1>2;/*没数据*/
select comm INTO b1 from emp where empno='7369';/*null值*/
DBMS_OUTPUT.put_line( b1 || '有数据'|| b2 );/*null值也算有数据*/
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.put_line( b1 || '没有数据'|| b2 );
END pro_test1;
------------------
3.IF 判断
IF V_TEST=1 THEN
BEGIN
do something
END;
END IF;
CREATE OR REPLACE PROCEDURE pro_test1
(
c1 IN NUMBER
) IS
b1 number :=0;
BEGIN
select comm INTO b1 from emp where empno=7369;
IF b1 is null THEN
BEGIN
DBMS_OUTPUT.put_line( b1 || '存在数据'|| to_char(sysdate,'yyyy-mm-dd') );
END;
END IF;
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.put_line( b1 || '没有数据'|| to_char(sysdate,'yyyy-mm-dd') );
END pro_test1;
------------------
4.while 循环
WHILE V_TEST=1 LOOP
BEGIN
XXXX
END;
END LOOP;
create table test_1 (id int ,name varchar(30));
CREATE OR REPLACE PROCEDURE pro_test1(c1 IN varchar2) IS
V_TEST number := 0;
V_FH varchar(30);
BEGIN
V_FH:=c1;
WHILE V_TEST < 10 LOOP
BEGIN
INSERT INTO test_1 values (V_TEST,V_FH);
V_TEST:=V_TEST+1;
IF 0=mod(V_TEST,9) THEN
BEGIN
V_FH:='CHINA';
END;
END IF;
END;
END LOOP;
COMMIT;
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.put_line(V_TEST || '没有数据' ||
to_char(sysdate, 'yyyy-mm-dd'));
END pro_test1;
----------------------
5.变量赋值
V_TEST := 123;
6.用for in 使用cursor
...
IS
CURSOR cur IS SELECT * FROM xxx;
BEGIN
FOR cur_result in cur LOOP
BEGIN
V_SUM :=cur_result.列名1+cur_result.列名2
END;
END LOOP;
END;
CREATE OR REPLACE PROCEDURE pro_test1(k1 IN varchar2) IS
cursor c1 is select empno,ename,job,sal from emp where deptno in (20,30);
n1 number;
begin
for v1 IN c1 loop
dbms_output.put_line(k1 || v1.empno || ',' || v1.ename || v1.job || v1.sal );
n1 := c1%rowcount;
end loop;
dbms_output.put_line(n1);
end pro_test1 ;
-------------------------
9、简单实例,通过DBMS_OUTPUT来看结果
CREATE OR REPLACE PROCEDURE pro_hp (lic_para IN VARCHAR2,out_para OUT VARCHAR2)
AS
temp VARCHAR2 (100);
BEGIN
SELECT ename
INTO temp
FROM emp
WHERE empno = lic_para;
out_para:=temp;
DBMS_OUTPUT.put_line (out_para);
END pro_hp;
下面是调用:
过程调用方式一
declare
realempno emp.empno%type;
realname varchar(40);
begin
realempno := 7369;
realname := '';
pro_hp(realempno, realname); --必须按顺序
DBMS_OUTPUT.PUT_LINE(realempno || ' ' || realname);
END;
过程调用方式二
declare
realempno emp.empno%type;
realname varchar(40);
begin
realempno := 7369;
realname := '';
pro_hp(lic_para => realempno, out_para => realname); --指定值对应变量顺序可变
DBMS_OUTPUT.PUT_LINE(realempno || ' ' || realname);
END;
10.用pl/sql developer debug
连接数据库后建立一个Test WINDOW
在窗口输入调用SP的代码,F9开始debug,CTRL+N单步调试
(step into )位置的按钮才是关键——单步执行,就是让代码一行一行的执行,(step over)位置的按钮是跳出单步执行,等待下一个指令。
conn scott/tiger;
1.基本结构
CREATE OR REPLACE PROCEDURE 存储过程名字
(
参数1 IN NUMBER,
参数2 IN NUMBER
) IS
变量1 INTEGER :=0;
变量2 DATE;
BEGIN
END 存储过程名字
-------------
2.SELECT INTO STATEMENT
将select查询的结果存入到变量中,可以同时将多个列存储多个变量中,必须有一条
记录,否则抛出异常(如果没有记录抛出NO_DATA_FOUND)
例子:
BEGIN
SELECT col1,col2 into 变量1,变量2 FROM typestruct where xxx;
EXCEPTION
WHEN NO_DATA_FOUND THEN
xxxx;
END;
---------------
CREATE OR REPLACE PROCEDURE pro_test1
(
c1 IN NUMBER
) IS
b1 number :=0;
b2 DATE;
BEGIN
b2:=to_date('1990-11-20','yyyy-mm-dd');
select comm INTO b1 from emp where 1>2;/*没数据*/
select comm INTO b1 from emp where empno='7369';/*null值*/
DBMS_OUTPUT.put_line( b1 || '有数据'|| b2 );/*null值也算有数据*/
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.put_line( b1 || '没有数据'|| b2 );
END pro_test1;
------------------
3.IF 判断
IF V_TEST=1 THEN
BEGIN
do something
END;
END IF;
CREATE OR REPLACE PROCEDURE pro_test1
(
c1 IN NUMBER
) IS
b1 number :=0;
BEGIN
select comm INTO b1 from emp where empno=7369;
IF b1 is null THEN
BEGIN
DBMS_OUTPUT.put_line( b1 || '存在数据'|| to_char(sysdate,'yyyy-mm-dd') );
END;
END IF;
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.put_line( b1 || '没有数据'|| to_char(sysdate,'yyyy-mm-dd') );
END pro_test1;
------------------
4.while 循环
WHILE V_TEST=1 LOOP
BEGIN
XXXX
END;
END LOOP;
create table test_1 (id int ,name varchar(30));
CREATE OR REPLACE PROCEDURE pro_test1(c1 IN varchar2) IS
V_TEST number := 0;
V_FH varchar(30);
BEGIN
V_FH:=c1;
WHILE V_TEST < 10 LOOP
BEGIN
INSERT INTO test_1 values (V_TEST,V_FH);
V_TEST:=V_TEST+1;
IF 0=mod(V_TEST,9) THEN
BEGIN
V_FH:='CHINA';
END;
END IF;
END;
END LOOP;
COMMIT;
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.put_line(V_TEST || '没有数据' ||
to_char(sysdate, 'yyyy-mm-dd'));
END pro_test1;
----------------------
5.变量赋值
V_TEST := 123;
6.用for in 使用cursor
...
IS
CURSOR cur IS SELECT * FROM xxx;
BEGIN
FOR cur_result in cur LOOP
BEGIN
V_SUM :=cur_result.列名1+cur_result.列名2
END;
END LOOP;
END;
CREATE OR REPLACE PROCEDURE pro_test1(k1 IN varchar2) IS
cursor c1 is select empno,ename,job,sal from emp where deptno in (20,30);
n1 number;
begin
for v1 IN c1 loop
dbms_output.put_line(k1 || v1.empno || ',' || v1.ename || v1.job || v1.sal );
n1 := c1%rowcount;
end loop;
dbms_output.put_line(n1);
end pro_test1 ;
-------------------------
9、简单实例,通过DBMS_OUTPUT来看结果
CREATE OR REPLACE PROCEDURE pro_hp (lic_para IN VARCHAR2,out_para OUT VARCHAR2)
AS
temp VARCHAR2 (100);
BEGIN
SELECT ename
INTO temp
FROM emp
WHERE empno = lic_para;
out_para:=temp;
DBMS_OUTPUT.put_line (out_para);
END pro_hp;
下面是调用:
过程调用方式一
declare
realempno emp.empno%type;
realname varchar(40);
begin
realempno := 7369;
realname := '';
pro_hp(realempno, realname); --必须按顺序
DBMS_OUTPUT.PUT_LINE(realempno || ' ' || realname);
END;
过程调用方式二
declare
realempno emp.empno%type;
realname varchar(40);
begin
realempno := 7369;
realname := '';
pro_hp(lic_para => realempno, out_para => realname); --指定值对应变量顺序可变
DBMS_OUTPUT.PUT_LINE(realempno || ' ' || realname);
END;
10.用pl/sql developer debug
连接数据库后建立一个Test WINDOW
在窗口输入调用SP的代码,F9开始debug,CTRL+N单步调试
(step into )位置的按钮才是关键——单步执行,就是让代码一行一行的执行,(step over)位置的按钮是跳出单步执行,等待下一个指令。
阅读全文
0 0
- 存储过程培训
- 存储过程&amp;函数(培训教程)
- CMMI组织培训过程
- [跟着hsp步步学习系统]oracle培训学习集锦全360度扫描(10)一个分页存储过程
- 软件开发过程培训总结
- 存储过程
- 存储过程
- 存储过程
- 存储过程
- 存储过程
- 存储过程
- 存储过程
- 存储过程
- 存储过程
- 存储过程
- 存储过程
- 存储过程
- 存储过程
- Access denied for user 'sa'@'localhost' (using password: NO) spring内配置hibernate 报错
- atop使用介绍
- SQL分组自增,再按组分列显示
- [centos]ebook
- POJ2686-Traveling by Stagecoach
- 存储过程培训
- softmax回归
- iOS CMMotionManager之加速计、陀螺仪
- margin-left 属性
- Udacity Deep Learning课程作业(六)
- 网络判断
- 【剑指offer】面试题 45:把数组排成最小的数
- ES性能调优权威指南(篇二)
- 稳压二极管