oracle 数据库包体,Oracle包和包体

--例1:包

create or replace package my_pac

is

--包内定义的所有数据 都是公有数据类型

--可以声明变量/常量,可以定义类型(cursor,table,record) 可以声明方法和过程  不写方法体和过程体

v_num number :=100;

v_v constant varchar2(20) :='aaaa';

type tab_type is table of varchar2(20) index by binary_integer;

type tab_type2 is table of varchar2(20);

type record_type is record(

v_ename emp.ename%type,

v_date date :=sysdate

);

--一般不放静态游标

cursor c_emp is select * from emp e;

--return emp%rowtype  可扩展性 不好

type cursor_type is ref cursor ;

--声明方法和过程

function f_two_num(l_num1 number,l_num2 number) return number;

function f_two_num(l_str1 varchar2,l_str2 varchar2) return varchar2;

procedure p_pac_pro(l_empno in number,l_sal out number);

end;

例2:--包体--包体  与包头对应  名字一致

create or replace package body my_pac

is

--声明变量、常量  其他类型(curosr table,record) 但是都属于私有数据  补充 方法体 和过程体

v_num_body number :=100;

--模拟重载  实现 f_two_num 两个函数

function f_two_num(l_num1 number,l_num2 number) return number

is

begin

return l_num1+l_num2;

end f_two_num;

function f_two_num(l_str1 varchar2,l_str2 varchar2) return varchar2

is

begin

return l_str1||l_str2;

end f_two_num;

procedure p_pac_pro(l_empno in number,l_sal out number)

is

begin

select e.sal into l_sal from emp e where e.empno = l_empno;

end p_pac_pro;

--可以写begin  一般没啥意思

begin

dbms_output.put_line('--');

end;

--参考材料:

日历表达式:

频率:FREQ必选参数

时间间隔:interval范围1-999可选参数

可选参数: BYMONTH、BYWEEKNO、BYYEARDAY、BYMONTHDAY

BYDAY、BYHOUR、BYMINUTE、BYSECOND

可选参数

BYDAY:周几的意思

BYMONTHDAY:一个月的几号

BYYEARDAY:一年的第几天

以下给出部分repeat_interval的写法实例,以供参考

每两个小时运行一次:

'FREQ=HOURLY;INTERVAL=2'

每天运行一次:

'FREQ=DAILY'

指定每周1、3、5运行一次

'FREQ=WEEKLY;BYDAY=MON,WED,FRI;'

指定每年3,6,9,12月的2号运行一次:

'FREQ=YEARLY;BYMONTH=MAR,JUN,SEP,DEC;BYMONTHDAY=2'

指定每隔周周五运行一次:

'FREQ=WEEKLY;INTERVAl=2;BYDAY=FRI;'

指定每月最后一天运行:

'FREQ=MONTHLY;BYMONTHDAY=-1;'

指定每年3月10号运行的日期:

'FREQ=YEARLY;BYMONTH=MAR,JUN,SEP,DEC;BYMONTHDAY=10;'

或者

'FREQ=YEARLY;BYDATE=0310;'

指定每天下午4点,5点和6点运行:

'FREQ=DAILY;BYHOUR=16,17,18;'

指定每月第2个星期三运行的日期表达式:

'FREQ=MONTHLY;BYDAY=2WED;'

指定每年最后一个星期五运行的日期表达式:

'FREQ=YEARLY;BYDAY=-1FRI;’

指定每个月前3天每小时运行一次的日期表达式:

'FREQ=HOURLY;BYMONTHDAY=1,2,3'

指定每分钟运行一次的日期表达式:

'FREQ=MINUTELY;INTERVAL=1'

指定每隔四个小时运行一次的日期表达式:

'FREQ=HOURLY;INTERVAL=4;BYMINUTE=0;BYSECOND=0'

指定每周1,2,3,4,5的7点到下午三点运行一次的日期表达式:'FREQ=DAILY;BYDAY=MON,TUE,WED,THU,FRI; BYHOUR=7,15;BYMINUTE=0;BYSECOND=0'

--例3:java调用存储过程

public static void main(String[] args) throws Exception{

Connection conn = DBUtil.getConn();

//PreparedStatement--->Statement

CallableStatement cs = conn.prepareCall("{call p_emp_sal (?,?)}");

cs.setInt(1, 7369);   //传入参数

cs.registerOutParameter(2, Types.NUMERIC);    //传出参数需要注册

cs.execute(); //执行存储过程

int result = cs.getInt(2);   //获取传出参数的值 一定是执行存储过程之后

System.out.println(result);

}

--例3:得到游标参数

public static void main(String[] args) throws Exception{

Connection conn = DBUtil.getConn();

//PreparedStatement--->Statement

CallableStatement cs = conn.prepareCall("{call p_curosr (?)}");

cs.registerOutParameter(1, OracleTypes.CURSOR);

cs.execute();

ResultSet rs = ((OracleCallableStatement)cs).getCursor(1);

while(rs.next()){

System.out.println(rs.getInt(1)+"====="+rs.getString(2));

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值