Oracle练习

--声明一个变量,并给它赋值
declare 
v_bonus number(8);
begin
select id*6 into v_bonus from A where Id=5;
DBMS_OUTPUT.PUT_LINE('奖金'||to_char(v_bonus));
end;


select * from emp


--拷贝一个字段的类型结构


declare
 v_ename emp.ename%type;
 v_sal emp.sal%type;
 c_tax_rate constant number(3,2) :=0.03;
 v_sal_tax v_sal%type;
 begin
    select ename,sal into v_ename,v_sal from emp where empno=&eno;
    v_sal_tax :=v_sal * c_tax_rate;
    dbms_output.put_line('雇员名称:' || v_ename);
    dbms_output.put_line('工资:' || v_sal);
    dbms_output.put_line('所得税' || v_sal_tax);
    end;
    
    select * from emp


declare
  v_emp emp%rowtype; --与emp表中的各个列相同
  begin
     select * into v_emp from emp where empno=&eno;  --将emp表中的所有记录赋值给 v_emp, &表示输入一个新的值
     dbms_output.put_line('雇员名称:'|| v_emp.ename);
     dbms_output.put_line('工资:' || v_emp.sal);
     end;
     
 -- 拷贝一条记录中几个字段的数据结构
declare 
   type emp_record_type is record(
      name emp.ename%type,salary emp.sal%type,job emp.job%type
   );
   v_emp_record emp_record_type;
   begin
     select ename,sal,job into v_emp_record from emp where empno=&eno;
     dbms_output.put_line('雇员名称:' || v_emp_record.name);
     dbms_output.put_line('工资:'|| v_emp_record.salary);
     dbms_output.put_line('职位:' || v_emp_record.job);
  end;
  
  insert into emp select * from emp
  
  --拷贝整个表的表结构,逐行拷贝
  
  declare 
    type emp_table_type is table of emp%rowtype
    index by binary_integer;
    v_emp_table emp_table_type;
    begin
       select ename,sal into v_emp_table(1).ename,v_emp_table(1).sal from emp where empno=7369;
       select ename,sal into v_emp_table(2).ename,v_emp_table(2).sal from emp where empno=7370;
       dbms_output.put_line('雇员名称:'||v_emp_table(1).ename || '工资:' || v_emp_table(1).sal);
       dbms_output.put_line('雇员名称:' || v_emp_table(2).ename || '工资:' || v_emp_table(2).sal);
   end;
   
   --使用when loop 循环
   declare 
     v_i number:=1;
     v_s number:=0;
    begin
        loop
          exit when v_i>100;
           v_s:=v_s+v_i;
           v_i:=v_i+1;
        end loop;
        dbms_output.put_line('100之内的整数和:' || v_s);
    end;
    
    --使用while loop 循环;
  declare
     v_i number:=1;
     v_s number:=0;
     begin
     while v_i<=100 loop
      v_s:=v_s+v_i;
      v_i:=v_i+1;
      end loop;
      dbms_output.put_line('100以内的整数和:  '|| v_s);
  end;
  
  --求100以内的自然数
  declare 
     v_s number:=0;
     begin
        for v_i in 1..100 loop
           v_s:=v_s+v_i;
        end loop;
        dbms_output.put_line('100以内的自然数:'|| v_s);
   end;
   
   --求100-110之间的素数
   declare
       v_m number:=101;
       v_i number;
       v_n number:=0;
   begin
      while v_m<110 loop
        v_i:=2;
        loop
          exit when v_i>v_m-1;
          if mod(v_m,v_i)=0 then
            v_i:=0;
            exit;
           end if;
           v_i:=v_i+1;
          
        end loop;
        if v_i>0 then
          v_n:=v_n+1;
          dbms_output.put_line('第'|| v_n || '个素数是' || v_m);
        end if;
         v_m:=v_m+2;
      end loop;
    end;

posted on 2013-08-29 19:48  you Richer  阅读(173)  评论(0编辑  收藏  举报