--问题输出 下面的内容: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; 问题 1 到 50 ? 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;
标签:dbms,sal,--,输入输出,循环,put,output,line,方法 From: https://www.cnblogs.com/bky-wang/p/18125057