输入输出,方法,循环

--问题输出 下面的内容:oracle世界我来了,一刀999
--declare用于定义变量dbms_output.put_line()是输出语句,
--DECLARE
--BEGIN
--END

DECLARE
msg varchar2(20) := 'Hello';
BEGIN
dbms_output.put_line(msg||' oracle世界我来了,一刀999');
END;
/

-------------------“/”手动输入,输入/可以结束程序-----------------------
--输出语句显示到当前窗口的前提,一个窗口使用一次就可以了
set serveroutput on
 /

  declare
    sex char(1) := 'M';
  begin
    if sex='M' then
     dbms_output.put_line('帅哥');
    elsif sex='F'then
     dbms_output.put_line('美女');
    else
     dbms_output.put_line('小孩');
    end if;
  end;
  /

使用if 判断条件  输入 一个数字 1 2 3
如果 数字 1 输出优秀
如果 数字 2 输出很优秀
如果 数字 3 输出非常优秀
 
---------“&n”:会弹出窗口,输入交互------------
 declare
    nu number(1) := &n;
  begin
    if nu=1 then
     dbms_output.put_line('优秀');
    elsif nu=2 then
     dbms_output.put_line('很优秀');
    else
     dbms_output.put_line('非常优秀');
    end if;
  end;
/
有一个NUMBER(3)变量,
如果大于0显示1;
如果小于0显示-1;
如果等于0显示0;
declare
  n number(3) :=10;
begin
  if n>0 then
    dbms_output.put_line(1);
  elsif n<0 then
    dbms_output.put_line(-1);
  else
    dbms_output.put_line(0);
  end if;
end;
/

转变为交互式的写法


在c#中
按cw按两下tab输出
if一下tab快捷if框架
其他快捷键自己设置

page163--7.6,7.8
declare
     v_deptno emp.deptno%type;
    v_empno emp.empno%type;
    v_sal number(6,2);
begin
  v_empno:=&no;
select deptno,sal INTO v_deptno,v_sal FROM emp WHERE empno=v_empno;
  if v_deptno = 10 THEN
    UPDATE emp SET sal=v_sal+100 WHERE empno = v_empno;
  elsif v_deptno=20 then
    UPDATE emp SET sal=v_sal+200 WHERE empno = v_empno;
  elsif v_deptno=30 then
    UPDATE emp SET sal=v_sal+300 WHERE empno = v_empno;
  else
    UPDATE emp SET sal=v_sal+400 WHERE empno = v_empno;
  end if;
end;
-----------------
set serverout on
declare
    i number:=1;
begin
 LOOP
  Dbms_output.put_line(i||'的立方为'||i*i*i);
  i:=i+1;
  exit when i>5;
  end loop;
end;
------------------------------------------
--for循环,
--FOR ... in ... LOOP:循环条件
--END LOOP;

 BEGIN
   FOR i IN 1..50 LOOP
     dbms_output.put_line(i*i+1);
   END LOOP;
 END;

问题 150 ?
     3到40  ?
------------------------------------------
--用变量查询7900职员的姓名工资入职日期,工作
declare
  v_name varchar2(10);
  v_sal number(7,2);
  v_job emp.job%type ;
  v_HIREDATE  emp.hiredate%type;
begin
  select ename,sal,hiredate,job 
  into v_name,v_sal,v_HIREDATE,v_job
  from emp 
  where empno=7900; 
dbms_output.put_line('职员姓名:'||v_name);
  dbms_output.put_line('工资:'||v_sal);
  dbms_output.put_line('入职日期:'||v_HIREDATE);
  dbms_output.put_line('工作:'||v_job);
end;
/
-----------------------------------------
--用变量输出king这个人的信息包含他的工作编号empno
--emp.job%type:同emp表的数据类型一致
declare
  v_empno number(10);
  v_name varchar2(10);  
  v_sal number(7,2);
  v_job emp.job%type ;
  v_hiredate  emp.hiredate%type;
begin
  select ename,empno,sal,hiredate,job 
  into v_name,v_empno,v_sal,v_hiredate,v_job
  from emp 
  where ename='KING'; 
  dbms_output.put_line('姓名:'||v_name);
  dbms_output.put_line('职工编号:'||v_empno);
  dbms_output.put_line('工资:'||v_sal);
  dbms_output.put_line('入职日期:'||v_hiredate);
  dbms_output.put_line('工作:'||v_job);
end;
/
--------------------------------------
编写一段PL/SQL,实现计算个人
所得税计算逻辑。(参考图例的扣除方法)
3500免征
如果超过3500,按以下阶段方式扣除
--小于1500时,税率按3%,速算扣除数0
--在1500到4500区间时,税率10%,速算扣除数105
--在4500到9000区间时,税率20%,速算扣除数555
--大于等于9000时,税率25%,速算扣除数1005
declare
  v_sal number(10):= 10000;
  v_tax number(7,2);
  v_tax_sal number(10);
begin
  --计算出应交税的工资部分
  v_tax_sal := v_sal-3500;
  --判断区间
  if v_tax_sal<1500 then
     v_tax := v_tax_sal*0.03;
  elsif v_tax_sal<4500 then
     v_tax := v_tax_sal*0.1-105;
  elsif v_tax_sal<9000 then
     v_tax := v_tax_sal*0.2-555;
  else
     v_tax := v_tax_sal*0.25-1005;
  end if;
  dbms_output.put_line('工资:'||v_sal);
  dbms_output.put_line('交税:'||v_tax);
end;

declare
  sal number(10):=&n;
  v_tax number(7,2);
begin
  if sal>3500 and sal<5000 then
  v_tax:=sal*0.03;
    dbms_output.put_line('扣税:'|| v_tax);
 
end if;
end;
-----------------------------------------------------
新增需求
根据EMP表记录生成纳税记录表的信息
纳税记录表EMP_TAX
主键ID
员工编号EMPNO
员工名称ENAME
员工工资总额SAL (EMP中SAL+COMM合计)
纳税额TAX(根据前面扣税逻辑计算的金额)
纳税时间TAX_DATE(系统时间)
编写一个PL/SQL完成上述功能

create table emp_tax(
 ID NUMBER primary key,
 EMPNO NUMBER(4),
 ENAME VARCHAR2(10),
 SAL NUMBER(7,2),
 TAX NUMBER(7,2),
 TAX_DATE DATE
);
create sequence tax_seq;

-----PL/SQL---------
declare
 CURSOR c_emp IS select * from emp;
 v_emp emp%ROWTYPE;--记录变量,保存一行员工信息
 v_total emp.sal%TYPE;--工资总额
 v_tax_sal emp.sal%TYPE;--交税工资
 v_tax emp.sal%TYPE;--交税金额
begin
  OPEN c_emp;
  LOOP
  --循环取出EMP表每一行员工记录
    fetch c_emp into v_emp;
    exit when c_emp%NOTFOUND;
  --计算员工应交税金额TAX
    v_total := v_emp.sal+NVL(v_emp.comm,0);
    v_tax_sal := v_total-3500;
  --判断区间
    if v_tax_sal<=0 then
      v_tax :=0;
    elsif v_tax_sal<1500 then
      v_tax := v_tax_sal*0.03;
    elsif v_tax_sal<4500 then
      v_tax := v_tax_sal*0.1-105;
    elsif v_tax_sal<9000 then
      v_tax := v_tax_sal*0.2-555;
    else
      v_tax := v_tax_sal*0.25-1005;
    end if;
  --将EMP_TAX所需的字段值写入INSERT
    insert into EMP_TAX(id,empno,
     ename,sal,tax,tax_date) 
    values(tax_seq.nextval,v_emp.empno,
     v_emp.ename,v_total,v_tax,sysdate);
  END LOOP;
  CLOSE c_emp;
  commit;--提交操作
end;

 

posted @ 2024-04-09 22:42  困到很想醒  阅读(7)  评论(0编辑  收藏  举报