Oracle存储过程详细教程「建议收藏」

2022-09-13 13:26:37 浏览数 (1)

大家好,又见面了,我是你们的朋友全栈君。

Oracle存储过程详细教程

目录
  • Oracle存储过程详细教程
    • 一 .创建存储过程语法
    • 二.输出案例
    • 三.调用存储过程
      • 3.1 声明declare关键字
      • 3.2不声明declare关键字
      • 3.3call
    • 四.带有参数的存储过程
    • 五.in,out参数问题
    • 六.异常写法
    • 七.循环
      • 7.1while 循环
      • 7.2for循环
    • 八.基本正删改查

一 .创建存储过程语法

代码语言:javascript复制
create or replace procedure 存储过程名
as
begin
  ----------------------------
end;
代码语言:javascript复制
注:
   在存储过程(PROCEDURE)和函数(FUNCTION)中没有区别;
   在视图(VIEW)中只能用AS不能用IS;
   在游标(CURSOR)中只能用IS不能用AS。

二.输出案例

代码语言:javascript复制
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关键字
代码语言:javascript复制
declare
begin
  myDemo01;
end;
3.2不声明declare关键字
代码语言:javascript复制
begin
  myDemo01; --在此处也可使用myDemo01();完成存储过程的调用
end;
3.3call
代码语言:javascript复制
call myDemo01();--call 存储过程名可完成调用,注意括号不能少

执行的结果如下所示:

四.带有参数的存储过程

代码语言:javascript复制
create or replace procedure myDemo02(name in varchar,age in int)
as
begin
  dbms_output.put_line('name='||name||', age='||age);
end;

注:在调用存储过程时,如果存储过程没有参数,调用时括号()可以不带。

五.in,out参数问题

代码语言:javascript复制
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类型。

执行的结果如下所示:

六.异常写法

代码语言:javascript复制
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.1while 循环
代码语言:javascript复制
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.2for循环
代码语言:javascript复制
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();

执行的结果如下所示:

八.基本正删改查

代码语言:javascript复制
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;

执行的结果如下所示:

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/160877.html原文链接:https://javaforall.cn

0 人点赞