oracle从入门到精通(8)------存储过程,游标

Oracle从入门到精通(8)

  -----存储过程
  -----游标
  
什么是存储过程?它有什么好处?

答:存储过程是指提前编写好,并且存储在数据库的一些语句

好处:由于这些语句是提前编写好,并且已经存在数据库,所以它的不需要通过程序传递语句到数据库,而是在数据库
直接运行,所以,速度会更快------使用它的主要目的,让程序的性能更好,运行速度更快


存储过程的分类有哪些?

答:存储过程可分为两种类型:
  1、不带参数的存储过程
  2、带参数的存储过程(输入参数、输出参数、输入输出参数)

--不带参数的存储过程语法:
create or replace procedure inf_proc
as
begin
       insert into inf values(2,'bruce',21);
       commit;
end;

--调用存储过程的两种方式:
--第一种:
begin
       inf_proc();
end;

--第二种:
在命令提示行下编写:  call 存储过程名称();

/****************************************************************************/



参数的类型为:  in     --表示是一个输入参数
参数的类型为:  out    --表示是一个输出参数
参数的类型为:  in out --表示是一个输入输出参数

--


带参数的存储过程----输入参数   

语法:                  参数名称 参数类型 数据类型
create or replace procedure inf_proc(in_id in number,in_name in varchar2,in_age in number)
as
begin
       insert into inf values(in_id,in_name,in_age);
       commit;
end;

--调用参数的存过程

begin
       inf_proc(3,'austin',23);
end;




-- 带输出参数的存储过程  (把数据从存储过程中提出来)
语法:
create or replace procedure inf_proc(in_id in number,out_name out varchar2,out_age out number)
as
begin
       select name,age into out_name,out_age from inf where id=in_id;
end;


------调用带返回值的存储过程
declare
       id number;
       name varchar2(20);
       age number;
begin
       id:=&请输入编号;
       inf_proc(in_id =>id,out_name => name,out_age => age);
       dbms_output.put_line('姓名是:'||name);
       dbms_output.put_line('年龄是:'||age);
end;

------------------------------------------


-- 带输入输出参数的存储过程 
语法:
create or replace procedure inf_proc(in_id in out number,out_name out varchar2,out_age out number)
as
begin
       select id,name,age into in_id,out_name,out_age from inf where id=in_id;
end;



declare
       id number;
       name varchar2(20);
       age number;
begin
       id:=&请输入编号;
       inf_proc(in_id =>id,out_name => name,out_age => age);
       
       dbms_output.put_line('编号:'||id);
       dbms_output.put_line('姓名是:'||name);
       dbms_output.put_line('年龄是:'||age);
end;











































drop table inf;
create table inf
(
       id number primary key,
       name varchar2(20) not null,
       age number

)









------------------------------------------------------------
Oracle中的游标

       它是用于指数据集中的某一行记录的一个标识符


Oracle中的游标分类:

       1、静态游标 (声明游标时,必须指定,该游标指向的是哪一张表,指定以后就不允许再改变)
                        
       
              A、隐式游标 (由系统提供)
              B、显示游标 (由用户创建)
       
       2、动态游标 (声明游标时,不必指定指向的是哪一张表,在打开游开游标的时候再决定)


-------

静态游标--->  隐式游标

          1   sql%found         ---执行成功返回true,执行失败返回false
          2   sql%notfound      ---执行成功返回false,执行失败返回true
          3   sql%rowcount      ---执行语句以后,有几行语句操作成功
    

begin
          update inf set name='abc' where id>2;
          dbms_output.put_line('修改的行数是:'||sql%rowcount);

end;

-------------------------------------------------------------------------------
-- sql%found      
begin
          update inf set name='bruceLee' where id=5678;         
          if(sql%found)
                 then dbms_output.put_line('修改数据成功!');
          else 
                      dbms_output.put_line('修改数据成失败!');          
          end if;    
end;          
-------------------------------------------

静态游标---->显示游标   (用户自己创建)

使用显示游标基本步骤:
                --1       声明游标
                --2       打开游标
                --3       利用游标提取数据
                --4       关闭游标


declare
       cursor my_cur is select id,name,age from inf where id=3;  
       mid number;
       mname varchar2(20);
       mage number; 
begin
       open my_cur;
       
       fetch my_cur into mid,mname,mage;
       dbms_output.put_line('编号'||mid);
       dbms_output.put_line('姓名'||mname);
       dbms_output.put_line('年龄'||mage);
       
       close my_cur;

end;

--------------------------------------------------------

declare
       cursor my_cur is select id,name,age from inf where id=3;  
       mid inf.id%type;   --mid的数据类型与 inf表中的id字段数据类型保持一致
       mname inf.name%type;
       mage inf.age%type; 
begin
       open my_cur;
       
       fetch my_cur into mid,mname,mage;
       dbms_output.put_line('编号'||mid);
       dbms_output.put_line('姓名'||mname);
       dbms_output.put_line('年龄'||mage);
       
       close my_cur;

end;

------------------------------------------------------------------
declare
       cursor my_cur is select * from inf where id=5;  
       r inf%rowtype;  --声明变量r,它的类型为inf表中的行的类型
begin
       open my_cur;
       
       fetch my_cur into r;
       
       dbms_output.put_line('编号'||r.id);
       dbms_output.put_line('姓名'||r.name);
       dbms_output.put_line('年龄'||r.age);
       
       close my_cur;

end;


----------------------------------------------------------------


declare
       cursor my_cur is select * from inf ;  
       r inf%rowtype;  --声明变量r,它的类型为inf表中的行的类型
begin
       open my_cur;
     
       fetch my_cur into r;     
       
       while(my_cur%found)
             loop
                    dbms_output.put_line(r.id||'   '||r.name||'  '||r.age);
                    fetch my_cur into r; 
             end loop;
       close my_cur;

end;

--------------------------------------------------------------------
















select * from inf where id=1;

select * from inf


















oracle从入门到精通(8)

  -----存储过程
  -----游标
  
什么是存储过程?它有什么好处?

答:存储过程是指提前编写好,并且存储在数据库的一些语句

好处:由于这些语句是提前编写好,并且已经存在数据库,所以它的不需要通过程序传递语句到数据库,而是在数据库
直接运行,所以,速度会更快------使用它的主要目的,让程序的性能更好,运行速度更快


存储过程的分类有哪些?

答:存储过程可分为两种类型:
  1、不带参数的存储过程
  2、带参数的存储过程(输入参数、输出参数、输入输出参数)

--不带参数的存储过程语法:
create or replace procedure inf_proc
as
begin
       insert into inf values(2,'bruce',21);
       commit;
end;

--调用存储过程的两种方式:
--第一种:
begin
       inf_proc();
end;

--第二种:
在命令提示行下编写:  call 存储过程名称();

/****************************************************************************/



参数的类型为:  in     --表示是一个输入参数
参数的类型为:  out    --表示是一个输出参数
参数的类型为:  in out --表示是一个输入输出参数

--


带参数的存储过程----输入参数   

语法:                  参数名称 参数类型 数据类型
create or replace procedure inf_proc(in_id in number,in_name in varchar2,in_age in number)
as
begin
       insert into inf values(in_id,in_name,in_age);
       commit;
end;

--调用参数的存过程

begin
       inf_proc(3,'austin',23);
end;




-- 带输出参数的存储过程  (把数据从存储过程中提出来)
语法:
create or replace procedure inf_proc(in_id in number,out_name out varchar2,out_age out number)
as
begin
       select name,age into out_name,out_age from inf where id=in_id;
end;


------调用带返回值的存储过程
declare
       id number;
       name varchar2(20);
       age number;
begin
       id:=&请输入编号;
       inf_proc(in_id =>id,out_name => name,out_age => age);
       dbms_output.put_line('姓名是:'||name);
       dbms_output.put_line('年龄是:'||age);
end;

------------------------------------------


-- 带输入输出参数的存储过程 
语法:
create or replace procedure inf_proc(in_id in out number,out_name out varchar2,out_age out number)
as
begin
       select id,name,age into in_id,out_name,out_age from inf where id=in_id;
end;



declare
       id number;
       name varchar2(20);
       age number;
begin
       id:=&请输入编号;
       inf_proc(in_id =>id,out_name => name,out_age => age);
       
       dbms_output.put_line('编号:'||id);
       dbms_output.put_line('姓名是:'||name);
       dbms_output.put_line('年龄是:'||age);
end;











































drop table inf;
create table inf
(
       id number primary key,
       name varchar2(20) not null,
       age number

)









------------------------------------------------------------
Oracle中的游标

       它是用于指数据集中的某一行记录的一个标识符


Oracle中的游标分类:

       1、静态游标 (声明游标时,必须指定,该游标指向的是哪一张表,指定以后就不允许再改变)
                        
       
              A、隐式游标 (由系统提供)
              B、显示游标 (由用户创建)
       
       2、动态游标 (声明游标时,不必指定指向的是哪一张表,在打开游开游标的时候再决定)


-------

静态游标--->  隐式游标

          1   sql%found         ---执行成功返回true,执行失败返回false
          2   sql%notfound      ---执行成功返回false,执行失败返回true
          3   sql%rowcount      ---执行语句以后,有几行语句操作成功
    

begin
          update inf set name='abc' where id>2;
          dbms_output.put_line('修改的行数是:'||sql%rowcount);

end;

-------------------------------------------------------------------------------
-- sql%found      
begin
          update inf set name='bruceLee' where id=5678;         
          if(sql%found)
                 then dbms_output.put_line('修改数据成功!');
          else 
                      dbms_output.put_line('修改数据成失败!');          
          end if;    
end;          
-------------------------------------------

静态游标---->显示游标   (用户自己创建)

使用显示游标基本步骤:
                --1       声明游标
                --2       打开游标
                --3       利用游标提取数据
                --4       关闭游标


declare
       cursor my_cur is select id,name,age from inf where id=3;  
       mid number;
       mname varchar2(20);
       mage number; 
begin
       open my_cur;
       
       fetch my_cur into mid,mname,mage;
       dbms_output.put_line('编号'||mid);
       dbms_output.put_line('姓名'||mname);
       dbms_output.put_line('年龄'||mage);
       
       close my_cur;

end;

--------------------------------------------------------

declare
       cursor my_cur is select id,name,age from inf where id=3;  
       mid inf.id%type;   --mid的数据类型与 inf表中的id字段数据类型保持一致
       mname inf.name%type;
       mage inf.age%type; 
begin
       open my_cur;
       
       fetch my_cur into mid,mname,mage;
       dbms_output.put_line('编号'||mid);
       dbms_output.put_line('姓名'||mname);
       dbms_output.put_line('年龄'||mage);
       
       close my_cur;

end;

------------------------------------------------------------------
declare
       cursor my_cur is select * from inf where id=5;  
       r inf%rowtype;  --声明变量r,它的类型为inf表中的行的类型
begin
       open my_cur;
       
       fetch my_cur into r;
       
       dbms_output.put_line('编号'||r.id);
       dbms_output.put_line('姓名'||r.name);
       dbms_output.put_line('年龄'||r.age);
       
       close my_cur;

end;


----------------------------------------------------------------


declare
       cursor my_cur is select * from inf ;  
       r inf%rowtype;  --声明变量r,它的类型为inf表中的行的类型
begin
       open my_cur;
     
       fetch my_cur into r;     
       
       while(my_cur%found)
             loop
                    dbms_output.put_line(r.id||'   '||r.name||'  '||r.age);
                    fetch my_cur into r; 
             end loop;
       close my_cur;

end;

--------------------------------------------------------------------
















select * from inf where id=1;

select * from inf


















oracle从入门到精通(8)

  -----存储过程
  -----游标
  
什么是存储过程?它有什么好处?

答:存储过程是指提前编写好,并且存储在数据库的一些语句

好处:由于这些语句是提前编写好,并且已经存在数据库,所以它的不需要通过程序传递语句到数据库,而是在数据库
直接运行,所以,速度会更快------使用它的主要目的,让程序的性能更好,运行速度更快


存储过程的分类有哪些?

答:存储过程可分为两种类型:
  1、不带参数的存储过程
  2、带参数的存储过程(输入参数、输出参数、输入输出参数)

--不带参数的存储过程语法:
create or replace procedure inf_proc
as
begin
       insert into inf values(2,'bruce',21);
       commit;
end;

--调用存储过程的两种方式:
--第一种:
begin
       inf_proc();
end;

--第二种:
在命令提示行下编写:  call 存储过程名称();

/****************************************************************************/



参数的类型为:  in     --表示是一个输入参数
参数的类型为:  out    --表示是一个输出参数
参数的类型为:  in out --表示是一个输入输出参数

--


带参数的存储过程----输入参数   

语法:                  参数名称 参数类型 数据类型
create or replace procedure inf_proc(in_id in number,in_name in varchar2,in_age in number)
as
begin
       insert into inf values(in_id,in_name,in_age);
       commit;
end;

--调用参数的存过程

begin
       inf_proc(3,'austin',23);
end;




-- 带输出参数的存储过程  (把数据从存储过程中提出来)
语法:
create or replace procedure inf_proc(in_id in number,out_name out varchar2,out_age out number)
as
begin
       select name,age into out_name,out_age from inf where id=in_id;
end;


------调用带返回值的存储过程
declare
       id number;
       name varchar2(20);
       age number;
begin
       id:=&请输入编号;
       inf_proc(in_id =>id,out_name => name,out_age => age);
       dbms_output.put_line('姓名是:'||name);
       dbms_output.put_line('年龄是:'||age);
end;

------------------------------------------


-- 带输入输出参数的存储过程 
语法:
create or replace procedure inf_proc(in_id in out number,out_name out varchar2,out_age out number)
as
begin
       select id,name,age into in_id,out_name,out_age from inf where id=in_id;
end;



declare
       id number;
       name varchar2(20);
       age number;
begin
       id:=&请输入编号;
       inf_proc(in_id =>id,out_name => name,out_age => age);
       
       dbms_output.put_line('编号:'||id);
       dbms_output.put_line('姓名是:'||name);
       dbms_output.put_line('年龄是:'||age);
end;











































drop table inf;
create table inf
(
       id number primary key,
       name varchar2(20) not null,
       age number

)









------------------------------------------------------------
Oracle中的游标

       它是用于指数据集中的某一行记录的一个标识符


Oracle中的游标分类:

       1、静态游标 (声明游标时,必须指定,该游标指向的是哪一张表,指定以后就不允许再改变)
                        
       
              A、隐式游标 (由系统提供)
              B、显示游标 (由用户创建)
       
       2、动态游标 (声明游标时,不必指定指向的是哪一张表,在打开游开游标的时候再决定)


-------

静态游标--->  隐式游标

          1   sql%found         ---执行成功返回true,执行失败返回false
          2   sql%notfound      ---执行成功返回false,执行失败返回true
          3   sql%rowcount      ---执行语句以后,有几行语句操作成功
    

begin
          update inf set name='abc' where id>2;
          dbms_output.put_line('修改的行数是:'||sql%rowcount);

end;

-------------------------------------------------------------------------------
-- sql%found      
begin
          update inf set name='bruceLee' where id=5678;         
          if(sql%found)
                 then dbms_output.put_line('修改数据成功!');
          else 
                      dbms_output.put_line('修改数据成失败!');          
          end if;    
end;          
-------------------------------------------

静态游标---->显示游标   (用户自己创建)

使用显示游标基本步骤:
                --1       声明游标
                --2       打开游标
                --3       利用游标提取数据
                --4       关闭游标


declare
       cursor my_cur is select id,name,age from inf where id=3;  
       mid number;
       mname varchar2(20);
       mage number; 
begin
       open my_cur;
       
       fetch my_cur into mid,mname,mage;
       dbms_output.put_line('编号'||mid);
       dbms_output.put_line('姓名'||mname);
       dbms_output.put_line('年龄'||mage);
       
       close my_cur;

end;

--------------------------------------------------------

declare
       cursor my_cur is select id,name,age from inf where id=3;  
       mid inf.id%type;   --mid的数据类型与 inf表中的id字段数据类型保持一致
       mname inf.name%type;
       mage inf.age%type; 
begin
       open my_cur;
       
       fetch my_cur into mid,mname,mage;
       dbms_output.put_line('编号'||mid);
       dbms_output.put_line('姓名'||mname);
       dbms_output.put_line('年龄'||mage);
       
       close my_cur;

end;

------------------------------------------------------------------
declare
       cursor my_cur is select * from inf where id=5;  
       r inf%rowtype;  --声明变量r,它的类型为inf表中的行的类型
begin
       open my_cur;
       
       fetch my_cur into r;
       
       dbms_output.put_line('编号'||r.id);
       dbms_output.put_line('姓名'||r.name);
       dbms_output.put_line('年龄'||r.age);
       
       close my_cur;

end;


----------------------------------------------------------------


declare
       cursor my_cur is select * from inf ;  
       r inf%rowtype;  --声明变量r,它的类型为inf表中的行的类型
begin
       open my_cur;
     
       fetch my_cur into r;     
       
       while(my_cur%found)
             loop
                    dbms_output.put_line(r.id||'   '||r.name||'  '||r.age);
                    fetch my_cur into r; 
             end loop;
       close my_cur;

end;

--------------------------------------------------------------------
















select * from inf where id=1;

select * from inf


















oracle从入门到精通(8)

  -----存储过程
  -----游标
  
什么是存储过程?它有什么好处?

答:存储过程是指提前编写好,并且存储在数据库的一些语句

好处:由于这些语句是提前编写好,并且已经存在数据库,所以它的不需要通过程序传递语句到数据库,而是在数据库
直接运行,所以,速度会更快------使用它的主要目的,让程序的性能更好,运行速度更快


存储过程的分类有哪些?

答:存储过程可分为两种类型:
  1、不带参数的存储过程
  2、带参数的存储过程(输入参数、输出参数、输入输出参数)

--不带参数的存储过程语法:
create or replace procedure inf_proc
as
begin
       insert into inf values(2,'bruce',21);
       commit;
end;

--调用存储过程的两种方式:
--第一种:
begin
       inf_proc();
end;

--第二种:
在命令提示行下编写:  call 存储过程名称();

/****************************************************************************/



参数的类型为:  in     --表示是一个输入参数
参数的类型为:  out    --表示是一个输出参数
参数的类型为:  in out --表示是一个输入输出参数

--


带参数的存储过程----输入参数   

语法:                  参数名称 参数类型 数据类型
create or replace procedure inf_proc(in_id in number,in_name in varchar2,in_age in number)
as
begin
       insert into inf values(in_id,in_name,in_age);
       commit;
end;

--调用参数的存过程

begin
       inf_proc(3,'austin',23);
end;




-- 带输出参数的存储过程  (把数据从存储过程中提出来)
语法:
create or replace procedure inf_proc(in_id in number,out_name out varchar2,out_age out number)
as
begin
       select name,age into out_name,out_age from inf where id=in_id;
end;


------调用带返回值的存储过程
declare
       id number;
       name varchar2(20);
       age number;
begin
       id:=&请输入编号;
       inf_proc(in_id =>id,out_name => name,out_age => age);
       dbms_output.put_line('姓名是:'||name);
       dbms_output.put_line('年龄是:'||age);
end;

------------------------------------------


-- 带输入输出参数的存储过程 
语法:
create or replace procedure inf_proc(in_id in out number,out_name out varchar2,out_age out number)
as
begin
       select id,name,age into in_id,out_name,out_age from inf where id=in_id;
end;



declare
       id number;
       name varchar2(20);
       age number;
begin
       id:=&请输入编号;
       inf_proc(in_id =>id,out_name => name,out_age => age);
       
       dbms_output.put_line('编号:'||id);
       dbms_output.put_line('姓名是:'||name);
       dbms_output.put_line('年龄是:'||age);
end;











































drop table inf;
create table inf
(
       id number primary key,
       name varchar2(20) not null,
       age number

)









------------------------------------------------------------
Oracle中的游标

       它是用于指数据集中的某一行记录的一个标识符


Oracle中的游标分类:

       1、静态游标 (声明游标时,必须指定,该游标指向的是哪一张表,指定以后就不允许再改变)
                        
       
              A、隐式游标 (由系统提供)
              B、显示游标 (由用户创建)
       
       2、动态游标 (声明游标时,不必指定指向的是哪一张表,在打开游开游标的时候再决定)


-------

静态游标--->  隐式游标

          1   sql%found         ---执行成功返回true,执行失败返回false
          2   sql%notfound      ---执行成功返回false,执行失败返回true
          3   sql%rowcount      ---执行语句以后,有几行语句操作成功
    

begin
          update inf set name='abc' where id>2;
          dbms_output.put_line('修改的行数是:'||sql%rowcount);

end;

-------------------------------------------------------------------------------
-- sql%found      
begin
          update inf set name='bruceLee' where id=5678;         
          if(sql%found)
                 then dbms_output.put_line('修改数据成功!');
          else 
                      dbms_output.put_line('修改数据成失败!');          
          end if;    
end;          
-------------------------------------------

静态游标---->显示游标   (用户自己创建)

使用显示游标基本步骤:
                --1       声明游标
                --2       打开游标
                --3       利用游标提取数据
                --4       关闭游标


declare
       cursor my_cur is select id,name,age from inf where id=3;  
       mid number;
       mname varchar2(20);
       mage number; 
begin
       open my_cur;
       
       fetch my_cur into mid,mname,mage;
       dbms_output.put_line('编号'||mid);
       dbms_output.put_line('姓名'||mname);
       dbms_output.put_line('年龄'||mage);
       
       close my_cur;

end;

--------------------------------------------------------

declare
       cursor my_cur is select id,name,age from inf where id=3;  
       mid inf.id%type;   --mid的数据类型与 inf表中的id字段数据类型保持一致
       mname inf.name%type;
       mage inf.age%type; 
begin
       open my_cur;
       
       fetch my_cur into mid,mname,mage;
       dbms_output.put_line('编号'||mid);
       dbms_output.put_line('姓名'||mname);
       dbms_output.put_line('年龄'||mage);
       
       close my_cur;

end;

------------------------------------------------------------------
declare
       cursor my_cur is select * from inf where id=5;  
       r inf%rowtype;  --声明变量r,它的类型为inf表中的行的类型
begin
       open my_cur;
       
       fetch my_cur into r;
       
       dbms_output.put_line('编号'||r.id);
       dbms_output.put_line('姓名'||r.name);
       dbms_output.put_line('年龄'||r.age);
       
       close my_cur;

end;


----------------------------------------------------------------


declare
       cursor my_cur is select * from inf ;  
       r inf%rowtype;  --声明变量r,它的类型为inf表中的行的类型
begin
       open my_cur;
     
       fetch my_cur into r;     
       
       while(my_cur%found)
             loop
                    dbms_output.put_line(r.id||'   '||r.name||'  '||r.age);
                    fetch my_cur into r; 
             end loop;
       close my_cur;

end;

--------------------------------------------------------------------
















select * from inf where id=1;

select * from inf

















Oracle第八章

  -----存储过程
  -----游标
  
什么是存储过程?它有什么好处?

答:存储过程是指提前编写好,并且存储在数据库的一些语句

好处:由于这些语句是提前编写好,并且已经存在数据库,所以它的不需要通过程序传递语句到数据库,而是在数据库
直接运行,所以,速度会更快------使用它的主要目的,让程序的性能更好,运行速度更快


存储过程的分类有哪些?

答:存储过程可分为两种类型:
  1、不带参数的存储过程
  2、带参数的存储过程(输入参数、输出参数、输入输出参数)

--不带参数的存储过程语法:
create or replace procedure inf_proc
as
begin
       insert into inf values(2,'bruce',21);
       commit;
end;

--调用存储过程的两种方式:
--第一种:
begin
       inf_proc();
end;

--第二种:
在命令提示行下编写:  call 存储过程名称();

/****************************************************************************/



参数的类型为:  in     --表示是一个输入参数
参数的类型为:  out    --表示是一个输出参数
参数的类型为:  in out --表示是一个输入输出参数

--


带参数的存储过程----输入参数   

语法:                  参数名称 参数类型 数据类型
create or replace procedure inf_proc(in_id in number,in_name in varchar2,in_age in number)
as
begin
       insert into inf values(in_id,in_name,in_age);
       commit;
end;

--调用参数的存过程

begin
       inf_proc(3,'austin',23);
end;




-- 带输出参数的存储过程  (把数据从存储过程中提出来)
语法:
create or replace procedure inf_proc(in_id in number,out_name out varchar2,out_age out number)
as
begin
       select name,age into out_name,out_age from inf where id=in_id;
end;


------调用带返回值的存储过程
declare
       id number;
       name varchar2(20);
       age number;
begin
       id:=&请输入编号;
       inf_proc(in_id =>id,out_name => name,out_age => age);
       dbms_output.put_line('姓名是:'||name);
       dbms_output.put_line('年龄是:'||age);
end;

------------------------------------------


-- 带输入输出参数的存储过程 
语法:
create or replace procedure inf_proc(in_id in out number,out_name out varchar2,out_age out number)
as
begin
       select id,name,age into in_id,out_name,out_age from inf where id=in_id;
end;



declare
       id number;
       name varchar2(20);
       age number;
begin
       id:=&请输入编号;
       inf_proc(in_id =>id,out_name => name,out_age => age);
       
       dbms_output.put_line('编号:'||id);
       dbms_output.put_line('姓名是:'||name);
       dbms_output.put_line('年龄是:'||age);
end;











































drop table inf;
create table inf
(
       id number primary key,
       name varchar2(20) not null,
       age number

)









------------------------------------------------------------
Oracle中的游标

       它是用于指数据集中的某一行记录的一个标识符


Oracle中的游标分类:

       1、静态游标 (声明游标时,必须指定,该游标指向的是哪一张表,指定以后就不允许再改变)
                        
       
              A、隐式游标 (由系统提供)
              B、显示游标 (由用户创建)
       
       2、动态游标 (声明游标时,不必指定指向的是哪一张表,在打开游开游标的时候再决定)


-------

静态游标--->  隐式游标

          1   sql%found         ---执行成功返回true,执行失败返回false
          2   sql%notfound      ---执行成功返回false,执行失败返回true
          3   sql%rowcount      ---执行语句以后,有几行语句操作成功
    

begin
          update inf set name='abc' where id>2;
          dbms_output.put_line('修改的行数是:'||sql%rowcount);

end;

-------------------------------------------------------------------------------
-- sql%found      
begin
          update inf set name='bruceLee' where id=5678;         
          if(sql%found)
                 then dbms_output.put_line('修改数据成功!');
          else 
                      dbms_output.put_line('修改数据成失败!');          
          end if;    
end;          
-------------------------------------------

静态游标---->显示游标   (用户自己创建)

使用显示游标基本步骤:
                --1       声明游标
                --2       打开游标
                --3       利用游标提取数据
                --4       关闭游标


declare
       cursor my_cur is select id,name,age from inf where id=3;  
       mid number;
       mname varchar2(20);
       mage number; 
begin
       open my_cur;
       
       fetch my_cur into mid,mname,mage;
       dbms_output.put_line('编号'||mid);
       dbms_output.put_line('姓名'||mname);
       dbms_output.put_line('年龄'||mage);
       
       close my_cur;

end;

--------------------------------------------------------

declare
       cursor my_cur is select id,name,age from inf where id=3;  
       mid inf.id%type;   --mid的数据类型与 inf表中的id字段数据类型保持一致
       mname inf.name%type;
       mage inf.age%type; 
begin
       open my_cur;
       
       fetch my_cur into mid,mname,mage;
       dbms_output.put_line('编号'||mid);
       dbms_output.put_line('姓名'||mname);
       dbms_output.put_line('年龄'||mage);
       
       close my_cur;

end;

------------------------------------------------------------------
declare
       cursor my_cur is select * from inf where id=5;  
       r inf%rowtype;  --声明变量r,它的类型为inf表中的行的类型
begin
       open my_cur;
       
       fetch my_cur into r;
       
       dbms_output.put_line('编号'||r.id);
       dbms_output.put_line('姓名'||r.name);
       dbms_output.put_line('年龄'||r.age);
       
       close my_cur;

end;


----------------------------------------------------------------


declare
       cursor my_cur is select * from inf ;  
       r inf%rowtype;  --声明变量r,它的类型为inf表中的行的类型
begin
       open my_cur;
     
       fetch my_cur into r;     
       
       while(my_cur%found)
             loop
                    dbms_output.put_line(r.id||'   '||r.name||'  '||r.age);
                    fetch my_cur into r; 
             end loop;
       close my_cur;

end;

--------------------------------------------------------------------
















select * from inf where id=1;

select * from inf

















  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值