Oracle变量语句练习
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;