oracle第七天——函数和存储过程

--oracle函数和存储过程

--区别:(1)函数大部分是一些工具性的东西;(2)存储过程重点在于一些DML操作;(3)函数有返回值类型;(4)存储过程是参数形式的,没有返回值;
        

--1.oracle自定义函数
  create or replace function 函数名称 return 返回值类型 as
  begin
    .....
  end 函数名称;
  
  --示例1:查询图书数量返回
    create function getBookCount return number as
    begin
      declare bookCount number;
      begin
        select count(*) into bookCount from t_book;
        return bookCount;
      end;
    end getBookCount;
    /
    --调用:
    set serveroutput on
    begin
      dbms_output.put_line('表t_book有:'|| getBookCount() ||'条数据');
    end;
  
  --示例2:查询某个表的记录数,带参数:表名,!!!!此示例常用!!!!!
    create function getTableCount(tablename varchar2) return number as
    begin
      declare recordCount number;
              query_sql varchar2(300);
      begin
        query_sql := 'select count(*) from '||tablename;
        --execute immediate常用
        execute immediate query_sql into recordCount;
        return recordCount;
      end;
    end getTableCount;
    /
    --调用:
    set serveroutput on
    begin
      dbms_output.put_line('表t_book有:'|| getTableCount('t_book') ||'条数据');
    end;
  
  
--2.oracle存储过程
  create or replace procedure 存储过程名称 as
  begin
    ......
  end 存储过程名称;
  
  --参数
  in : 只进不出
  out :只出不进
  in out :可进可出
  
  --示例1:t_book新增数据
    create procedure addBook(bookName in varchar2,type_id in number,bookPrice in number) as
    begin
      declare maxId number;
      begin
        select max(id) into maxId from t_book;
        insert into t_book values(maxId+1,bookName,type_id,bookPrice);
        --可以在此处直接提交事务
        commit;
      end;
    end addBook;
    
    --执行:
    --在Command窗口直接执行:
      execute addBook('java案例教学',1,110);
  
  
  --示例2: 加入判断,如果书名以及存在则不存进去 n1:操作前表记录数  n2:执行后记录数
    create procedure addBookNotExits2(bookName in varchar2,type_id in number,bookPrice in number,n1 out number,n2 out number ) as
    begin
      declare maxId number;
              n number;
      begin
        select count(*) into n1 from t_book;
        select count(*) into n from t_book where book_name = bookName;
        if(n > 0) then
             return;
        end if;
        select max(id) into maxId from t_book;
        insert into t_book values(maxId+1,bookName,type_id,bookPrice);
        select count(*) into n2 from t_book;
        commit;
      end;
    end addBookNotExits2;
    --调用:
    declare n1 number;
           n2 number;
    begin
      addBookNotExits2('呵呵达',2,89,n1,n2);
      dbms_output.put_line('n1='||n1);
      dbms_output.put_line('n2='||n2);
    end;
     
     
     
     
     
  

 

posted @ 2016-12-07 22:22  Revel  阅读(169)  评论(0)    收藏  举报