oracle复习

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;
}



你可能感兴趣的:(java,oracle,function,user,table,Integer)