Oracle变量语句练习

2014-11-24 17:04:06 · 作者: · 浏览: 0
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;