Oracle数据库的存储过程怎么写?

Oracle数据库的存储过程怎么写?,第1张

Oracle存储过程基本语法:

CREATE OR REPLACE PROCEDURE 存储过程名 

IS 

BEGIN 

NULL 

END

解释:

行1: 

CREATE OR REPLACE PROCEDURE 是一个SQL语句通知Oracle数据库去创建一个叫做skeleton存储过程, 如果存在就覆盖它 

行2: 

IS关键词表明后面将跟随一个PL/SQL体。 

行3: 

BEGIN关键词表明PL/SQL体的开始。 

行4: 

NULL PL/SQL语句表明什么事都不做,这句不能删去,因为PL/SQL体中至少需要有一句 

行5: 

END关键词表明PL/SQL体的结束。

列个表,里边我一样给你写个例子,你看着学学,我尽量给你做出注释

--建一个学生表

create table student (id int,name varchar2(10))

--插入两条测试数据

insert into student values (1,'张三')

insert into student values (2,'李四')

commit

-------------用存储过程添加id为3,姓名为王五的学生-----------

create or replace PROCEDURE P_INSERT

(v_id int,--定义id变量

v_name varchar2--定义姓名变量)

is

begin

insert into student values (v_id,v_name)--执行插入 *** 作

commit

end

执行的时候用下边的

BEGIN

p_insert(3,'王五')

END

然后select * from student

你会发现多了3 王五 这条数据

---------------用存储过程删除id为3的学生------------

create or replace PROCEDURE P_DELETE

(v_id int)--定义变量id

is

begin

delete from student where id=v_id--执行删除 *** 作

commit

end

执行

BEGIN

p_delete(3)

END

执行完上边后执行

select * from student

你会发现id为3的学生没了

---------------用存储过程查询id为2的学生姓名------------

create or replace PROCEDURE P_SELECT

(v_id int)--定义输入变量id

is

v_name varchar2(10)--定义输出变量name

begin

select name into v_name from student where id=v_id--执行查询

dbms_output.put_line('学生姓名为:'||v_name)--输出结果

end

执行

BEGIN

p_select(2)

END

输出的结果就是id为2的学生姓名

-----------用存储过程查询id为1的学生姓名修改为赵六----------

create or replace PROCEDURE P_UPDATE

(v_id int,--定义要修改的id

v_name varchar2)--定义要修改后的名字

is

begin

update student set name=v_name where id=v_id--执行修改 *** 作

commit

end

执行

BEGIN

P_UPDATE(1,'赵六')

END

然后你再

select * from student

你会发现id为1的已经为赵六了

上边这些都是最简单的存储过程,在实际过程中肯定没这么简单

还有,我让你执行的

BEGIN

P_UPDATE(1,'赵六')

END

这种东西可以当做oracle的job调用,可以定时执行

再有不懂的你再问吧,上边的仅做参考

累死我了,哈哈

oracle 存储过程的基本语法

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

...

3.IF 判断

IF V_TEST=1 THEN

BEGIN

do something

END

END IF

4.while 循环

WHILE V_TEST=1 LOOP

BEGIN

XXXX

END

END LOOP

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

7.带参数的cursor

CURSOR C_USER(C_ID NUMBER) IS SELECT NAME FROM USER WHERE TYPEID=C_ID

OPEN C_USER(变量值)

LOOP

FETCH C_USER INTO V_NAME

EXIT FETCH C_USER%NOTFOUND

do something

END LOOP

CLOSE C_USER

8.用pl/sql developer debug

连接数据库后建立一个Test WINDOW

在窗口输入调用SP的代码,F9开始debug,CTRL+N单步调试


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11964921.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存