oracle 块结构、存储过程、函数、包、包体

set serveroutput on  //显示信息
show error; //sql*plus显示错误信息
  //只有定义部分的块
 begin
   dbms_output.put_line('hello word');
 end;

 //有定义部分还有执行部分
  declare name varchar2(20); --定义部分
 begin
 --执行部分
   select name into name from user where id=10;
   dbms_output.put_line(name);
 end;

  //有定义部分、执行部分,还有异常部分块结构
 declare name varchar2(20); --定义部分
 begin
 --执行部分
   select name into name from user where id=$id;
   dbms_output.put_line(name);
 excepion    --异常部分
 when  NO_DATA_FOUND then
   dbms_output.put_line('出错了!');
 when others then
    dbms_output.put_line('不知道的异常!');
 end;


 //没有参数的proc
 create or replace procedure sp_testname()
 --定义部分
 begin
 --执行部分
  select * from category ;
 end;
 //有带进参数的proc,in可写可不写,我发现mysql中in可以写在前面,但oracle中的in,out必须写中间
  create or replace procedure sp_testname( id in number)
  --定义部分
 begin
  --执行部分
  select * from category where category_id=id;
 end;
 //有带进参数的proc,又有带出参数,mysql中好像varchar类型	都要带长度,
  create or replace procedure sp_testname(id number,categoryname out  varchar2)
  --定义部分
 begin
   --执行部分
  select categoryname into categoryname from category where category_id=id;
 end;

 //函数
 create or replace  function calc(num1 number,num2 number) return number is result nunber(10,0);
 begin
	select 	num1+num2 into result from dual;
	return result;
 end;
 //包
create or replace package sp_packages is
procedure insert_user(username varchar2,passwd varchar2);
function calc(num1 number,num2 number) return number;
 //包体
create or replace package body sp_packages is
procedure insert_user(username varchar2,passwd varchar2) is
--定义部分
begin
 --执行部分
 insert into user values(username,passwd);
end;
function calc(num1 number,num2 number) return number is result nunber(10,0)
begin
 --执行部分
    select num1+num2 into result from dual;
    return result;
end;

猜你喜欢

转载自javaeedevelop.iteye.com/blog/1549525