您当前的位置: 首页 >  oracle

郭梧悠

暂无认证

  • 3浏览

    0关注

    402博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

oracle 的控制结构

郭梧悠 发布时间:2012-08-02 23:04:41 ,浏览量:3

8)控制结构(其中goto语句了解)       a)条件语句 if---then/if--then--else/if--then--eslif--then

          例子1):编写一个过程,可以输入雇员名,如果该雇员工资低于2000,就给该雇员增加工资10%               ---------------------------------------------------------------------------               SQL>create or replace procedure p(pName varchar2)  is                    v_sal emp.sal%type;--定义变量%type指的是让sal的类型和v_sal相同                    begin                       select sal into v_sal from emp where ename = pName;                       if v_salexec p('arthur');                 ---------------------------------------------------------------------------             例子2):编写一个过程,可以输入一个雇员名,入股雇员的补助comm不是零,就在原来的基础上加100,否则设置为200               ---------------------------------------------------------------------------                SQL>create or replace procedure p1(pName varchar2)  is                    v_comm emp.comm%type;--定义变量%type指的是让sal的类型和v_sal相同                    begin                       select comm into v_comm from emp where ename = pName;                       if v_comm0 then                           update emp set comm = comm + 100 where ename = pName;                       else                            update emp set comm = 200 where ename = pName;                       end if;--始终放在最后                   end;                   /                 SQL>exec p('arthur');                ---------------------------------------------------------------------------             例子3):编写一个过程,可以输入一个雇员编号,如果该雇员的职位是PRESIDENT,就给他的工资增加1000,如果职位是                    MANAGER,工资就增加500,其它职位工资增加200                 ---------------------------------------------------------------------------                  SQL>create or replace procedure p2(pNo number) is                      v_job emp.job%type;                      begin                          select job into v_job from emp where empno = pNo;                          if v_job = 'PRERENT' then                              update emp set sal = sal + 1000 where empno = pNo;                          elsif v_job = 'MANAGER' then                              update emp set sal = sal + 500 where empno = pNo;                          else                              update emp set sal = sal + 200 where empno = pNo;                          end if;--一定要加上                      end;                      /                   ---------------------------------------------------------------------------         b)循环语句            i)loop...end loop 这种循环至少被循环一次

               例子1): 编写一个过程,可输入用户名,并添加10个用户到users表中,用户标号id从1开始增加               ---------------------------------------------------------------------------               SQL>create or replace procedure p3(pName varchar2) is                   v_num number := 1;--控制循环的变量,初始值为1                   begin                   loop                      insert into users values(v_num,pName);                      --判断是否循环十次                      exit when v_num = 10;                      v_num := v_num + 1;--自增1                   end loop                   end;                   /                 SQL>exec p3('arthur');               ---------------------------------------------------------------------------                          ii):while 循环,以whlie....loop开始,以end loop结束                  例子1):编写一个过程,可输入用户名,并添加10个用户到users表中,用户标号id从11开始增加                 ---------------------------------------------------------------------------               SQL>create or replace procedure p4(pName varchar2) is                   v_num number := 11;--控制循环的变量,初始值为1                   begin                   while v_num < 21 loop                      insert into users values(v_num,pName);                      v_num := v_num + 1;--自增1                   end loop                   end;                   /                 SQL>exec p3('arthur');               --------------------------------------------------------------------------- 9)null,null语句不会执行任何操作,并且会直接将控制传递到下一条语句,主要好处是增加了PL/sql的可读性 10)编写分页过程         例子1):编写一个过程,可以向book表添加书,要求通过java程序调用                  ---------------------------------------------------------------------                   --in代表bookID为输入变量,其实in是默认的,                   --out:表示一个输出参数                   --这是一个无返回值的过程                  SQL>create or replace procedure p5(bookID in number,bookName in varchar2,publicHouse in varchar2) is                      begin                              insert into book values(bookID,bookName,publicHouse);                      end;                      /                    ---------------------------------------------------------------------                     通过java代码调用该过程                     ---------------------------------------------------------------------                     //加载驱动                      Class.forName("oracle.jdbc.driver.OracleDriver");                      Connection ct = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:MYORA1","userName","passWord")                                           CallableStatement cs = ct.prepareCall("{call p5(?,?,?)}");                                            //给?赋值                     cs.setInt(1,10);                     cs.setString(2,"星辰变");                     cs.setString(3,"新华出版社");                                      //执行                     cs.execute();                     //关闭资源操作,此处省略             例子2):有返回的存储过程                      编写一个过程,可以输入员工的编号,返回该员工的姓名,工资和岗位                      ---------------------------------------------------------------------                      -- 有输入和输出的存储过程                      SQL>create procedure p6(bianHao in number,name out varchar2,pSal out number,pJob out varchar2) is                          begin                               select ename,sal,job into name,pSal,pJob from emp where empno = bianHao;                          end;                          /                                            ---------------------------------------------------------------------                       在java里面获得上述过程中的姓名                       ---------------------------------------------------------------------                      Class.forName("oracle.jdbc.driver.OracleDriver");                      Connection ct = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:                                             CallableStatement cs = ct.prepareCall("{call p6(?,?,?,?)}");                      //给第一个?赋值                      cs.setInt(1,8888);                      //给第二个?赋值                      cs.registOutPrameter(2,oracle.jdbc.OracleTypes.VARCHAR);                      cs.registOutPrameter(3,oracle.jdbc.OracleTypes.DOUBLE);                      cs.registOutPrameter(4,oracle.jdbc.OracleTypes.VARCHAR);                                          //执行                      cs.execute();                      //取出返回值,以为返回值是第二个?,所以是2                      String name = cs.getString(2);                                           String job = cs.getString(4);                      //关闭相关资源,此处略写                      ---------------------------------------------------------------------              例子3):有返回值的存储过程(列表[结果集])                        编写一个过程,可以输入部门的编号,返回该部门所有的员工信息                         --由于oracle存储过程没有返回值,它的所有返回值都是通过out                         --参数来代替,列表同样也不例外,但由于是集合,所以不能用一般的参数,必须要用package                       ---------------------------------------------------------------------                       --第一部分,建一个包,定义了一个游标类型test_cursor                      SQL>create or replace package testPackage as type test_cursor(游标名) is ref cursor(游标)                          end testPackage                      --第二部分,创建过程                      SQL>create or replace procedure p7(bianHao in number,p_cursor out testPackage.test_cursor) is                          begin                             --打开一个游标                             open p_cursor for select * from emp where deptno = bianHao;                          end;                          /                      ---------------------------------------------------------------------                       Class.forName("oracle.jdbc.driver.OracleDriver");                       Connection ct = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:                                             CallableStatement cs = ct.prepareCall("{call p7(?,?)}");                      //给第一个?赋值                      cs.setInt(1,8888);                      //给第二个?赋值                      cs.registOutPrameter(2,oracle.jdbc.OracleTypes.CURSOR);                                          //执行                      cs.execute();                      //得到结果集                      ResultSet rs = (ResultSet) cs.getObject(2);                                           while(rs.next()){                          System.out.println(rs.getInt(1) + "--" + rs.getString(2));                      }                      //关闭相关资源,此处略写

关注
打赏
1663674776
查看更多评论
立即登录/注册

微信扫码登录

0.0372s