dongyl
Oracle SP 使用
本文最后更新于2022年11月06日,已超过684天没有更新。如果文章内容或图片资源失效,请留言反馈,我会及时处理,谢谢!
一 .创建存储过程语法
create or replace procedure 存储过程名
as
begin
----------------------------
end;
注:
在存储过程(PROCEDURE)和函数(FUNCTION)中没有区别;
在视图(VIEW)中只能用AS不能用IS;
在游标(CURSOR)中只能用IS不能用AS。
二.输出案例
create or replace procedure myDemo01
as
begin
dbms_output.put_line('hello word, my name is stored procedure');
end;
as:关键字。
begin:关键字。
dbms_output.put_line(‘hello word, my name is stored procedure’); 输出内容。
end;关键字。
三.调用存储过程
3.1 声明declare关键字
declare
begin
myDemo01;
end;
3.2不声明declare关键字
begin
myDemo01; --在此处也可使用myDemo01();完成存储过程的调用
end;
3.3 call
call myDemo01();--call 存储过程名可完成调用,注意括号不能少
五.in,out参数问题
create or replace procedure myDemo04(name out varchar,age in int)
as
begin
dbms_output.put_line('age='||age);
select 'ex_sunqi' into name from dual;
end;
declare
name varchar(10);
age int;
begin
myDemo04(name=>name,age=>25);
dbms_output.put_line('name='||name);
end;
注:in代表输入,out用于输出,参数默认类型是in类型
六.异常写法
create or replace procedure myDemo03
as
age int;
begin
age:=1/0;
dbms_output.put_line(age);
--异常
exception when others then
dbms_output.put_line('error');
end;
call myDemo03();
七.循环
7.1 while 循环
create or replace procedure myDemo5
as
n_count number := 0;
begin
while n_count < 5 loop
dbms_output.put_line(n_count);
n_count := n_count + 1;
end loop;
end;
begin
myDemo5;
end;
7.2 for循环
create or replace procedure myDemo06
as
begin
FOR USE in (select * from T_USER_INFO) loop
if (USE.id<3) then
dbms_output.put_line(USE.USER_NAME);
end if;
end loop;
end;
CALL myDemo06();
八.基本增删改查
create or replace procedure mydemo07
(ID in int, user_name in varchar,pssword in varchar,
created_date in DATE,created_by IN varchar,UPDATED_date IN DATE,
UPDATED_by IN varchar,is_valid IN varchar)
as
begin
insert into T_USER_INFO VALUES
(ID,user_name,pssword,created_date,created_by,UPDATED_date,UPDATED_by,is_valid);
--UPDATE T_USER_INFO t SET t.USER_NAME='sunqi' WHERE t.ID=ID ;
--DELETE T_USER_INFO t WHERE t.ID=ID ;
commit; --提交
end;
begin
mydemo07(3,'ex_sunqi','666666',SYSDATE,'ex_sunqi',SYSDATE,'ex_sunqi','Y');
end;