oracle笔记
修改列类型
alter table users modify(birthday date);
增加列
alter table users add is_man varchar2(10);
创建用户 test 密码 123
create user test identified by 123 ;
为用户 test 赋权限 (当前用户为system)
grant connect , resource to test;
oracle 中的复合类型
declare
type user_row is record(
--声明复合类型
user_id users.u_id%type ,
u_name users.u_name%type ,
birtyday varchar2(100) ,
is_man users.is_man%type
);
ur user_row ;
--声明属性ur 类型为 user_row
begin
select u_id , u_name , to_char(birthday , 'yyyy-MM-dd') , is_man into ur from users where u_id = 1 ;
-- 查询数据库 为属性ur赋值
dbms_output.put_line('编号:' || ur.user_id || ' 姓名:' || ur.u_name || ' 生日:' || ur.birtyday || ' 性别:' || ur.is_man); --打印复合类型的内容
end;
九九乘法表
declare
i integer := 1;
j integer ;
begin
loop
exit when i > 9 ;
j := 1 ;
loop
exit when j > i ;
dbms_output.put(j || ' * ' || i || ' = ' || RPAD((i * j) , 2 , ' ') || ' ');
j := j+1;
end loop ;
i := i+1;
dbms_output.put_line('');
end loop ;
end;
RPAD(str , 5 , '*') 函数 表示向str的右边填充字符串, 知道str的长度为len为止, 第三个参数表示填充的字符串 ,这里表示 如果str的长度小于5 就向str的右边用*填充,直到str的长度等于5
游标的使用
--loop 循环方式
declare
cursor e is select * from emp ; --声明游标
e_row emp%rowtype; --用来接收游标的一行数据
begin
open e ; --打开游标
loop
exit when e%notfound; --当没有记录后退出循环
fetch e into e_row ; --提取游标里面的数据
dbms_output.put_line( rpad(e_row.ename , 15 , ' ') || ' ' || e_row.sal);
end loop;
close e; --关闭游标
end;
--while loop 循环方式
declare
cursor e is select * from emp ; --声明游标
e_row emp%rowtype; --用来接收游标的一行数据
begin
open e ; --打开游标
fetch e into e_row ;
while e%found loop
dbms_output.put_line( rpad(e_row.ename , 15 , ' ') || ' ' || e_row.sal);
fetch e into e_row ; --提取游标里面的数据
end loop;
close e; --关闭游标
end;
创建带返回值的过程 ,+ java调用过程,并取值
第一步、创建过程
create or replace procedure find_emp(emp_no in emp.empno%type , emp_row out user_pag.cur)
is
begin
open emp_row for select * from emp where empno = emp_no;
end;
第二步 、java调用
public Emp findEmpById(int empNo){
Emp emp = null;
Connection conn = null;
CallableStatement cs = null;
ResultSet rs = null;
try {
conn = DBManager.getConnection();
cs = conn.prepareCall("call find_emp(? , ?)");
cs.registerOutParameter(2, OracleTypes.CURSOR);
cs.setInt(1, empNo);
cs.execute();
rs = (ResultSet)cs.getObject(2);
if(rs.next()){
emp = new Emp();
emp.setEmpNo(rs.getInt(1));
emp.setEname(rs.getString(2));
emp.setJob(rs.getString(3));
emp.setMag(rs.getInt(4));
emp.setHiredate(rs.getDate(5));
emp.setSal(rs.getDouble(6));
emp.setComm(rs.getDouble(7));
emp.setDeptno(rs.getInt(8));
}
} catch (SQLException e) {
e.printStackTrace();
}finally{
DBManager.close(conn, cs, rs);
}
return emp;
}
oracle 包的使用 + java调用oracle过程与函数
第一步、 建包
create or replace package user_pag
is
type cur is ref cursor ;
procedure del_user(user_id emp.empno%type) ;
function find_user_page(star int , endr int ) return cur;
end;
第二部、建包体
create or replace package body user_pag
is
procedure del_user(user_id emp.empno%type)
is
begin
delete from emp where empno = user_id ;
end;
function find_user_page(star int , endr int ) return cur
is
emps cur ;
begin
open emps for select e2.* from (select e1.* , rownum rn from emp e1 where rownum < endr ) e2 where e2.rn > star;
return emps;
end;
end;
第三部 、java调用
/**
* 根据员工id删除 员工信息
* @param empNo
* @return
*/
public boolean delEmp(int empNo){
Connection conn = null;
CallableStatement cs = null;
try {
conn = DBManager.getConnection();
cs = conn.prepareCall("begin user_pag.del_user(?); end;");
cs.setInt(1, empNo);
int i = cs.executeUpdate();
System.out.println(i);
if(i > 0)
return true;
else
return false;
} catch (SQLException e) {
e.printStackTrace();
return false;
}finally{
DBManager.close(conn, cs, null);
}
}
/**
* 查询指定条数的员工信息
* @param start
* @param end
* @return
*/
public List<Emp> findEmpByPage(int start , int end){
List<Emp> emps = new Vector<Emp>();
Connection conn = null;
CallableStatement cs = null;
ResultSet rs = null;
try {
conn = DBManager.getConnection();
cs = conn.prepareCall("begin ? := user_pag.find_user_page(? , ?); end;");
cs.setInt(2, start);
cs.setInt(3, end);
cs.registerOutParameter(1, OracleTypes.CURSOR);
cs.execute();
rs = (ResultSet)cs.getObject(1);
while(rs.next()){
Emp emp = new Emp();
emp.setEmpNo(rs.getInt(1));
emp.setEname(rs.getString(2));
emp.setJob(rs.getString(3));
emp.setMag(rs.getInt(4));
emp.setHiredate(rs.getDate(5));
emp.setSal(rs.getDouble(6));
emp.setComm(rs.getDouble(7));
emp.setDeptno(rs.getInt(8));
emps.add(emp);
}
} catch (SQLException e) {
e.printStackTrace();
}finally{
DBManager.close(conn, cs, rs);
}
return emps;
}