PL/SQL(二)

来源:互联网 发布:js删除tbody中的tr 编辑:程序博客网 时间:2024/05/19 17:08
v_empno emp.empno%type:=&no;v_ename emp.ename%type;v_emp emp%rowtype;

 

 

 

修改输入员工的工资加上%10declarev_empno emp.empno%type:=&no;v_ename emp.ename%type;v_sal emp.sal%type;beginupdate emp set sal=sal*1.1 where empno=v_empno returning ename,sal into v_ename,v_sal;dbms_output.put_line('员工名:'||v_ename||'新工资'||v_sal);end;/

 

输出所有记录declarev_num int;v_emp emp%rowtype;beginselect count(*) into v_num from emp;for i in 1..v_num loop select empno,ename,job,mgr,hiredate,sal,comm,deptno into v_emp from (select rownum r,emp.* from emp) where r=i;dbms_output.put_line(v_emp.empno||chr(9)||v_emp.ename);end loop;end;

 

 

 

1、声明cursor 游标名 is 查询语句;2、打开open 游标名;3、提取(一次提取一行)fetch 游标名 into 变量;4、关闭close 游标;声明放在 declare里declarecursor rs is select * from emp;v_emp emp%rowtype;v_num int;beginselect count(*) into v_num from emp;open rs;dbms_output.put_line('empno'||chr(9)||'ename'||chr(9)||'job');for i in 1..v_num loopfetch rs into v_emp;dbms_output.put_line(v_emp.empno||chr(9)||v_emp.ename||chr(9)||v_emp.job);end loop;close rs;end;

 

While版的 循环输出declarecursor rs is select * from emp;v_emp emp%rowtype;beginopen rs;fetch rs into v_emp;while rs%found loopdbms_output.put_line(v_emp.ename);fetch rs into v_emp;end loop;close rs;end;/

 

查询 工作 为** 的员工declarecursor rs(v_job varchar2) is select * from emp where job=v_job;r_emp emp%rowtype;beginopen rs('&Job');loopdbms_output.put_line(r_emp.ename||chr(9)||r_emp.job);fetch rs into r_emp;exit when rs%notfound;end loop;close rs;end;

 

SQLDDL:create alter drop DML:insert update delete selectDCL:grant revokeTCL:commit rollback savepointPL/SQL procedureal过程程序块的基本结构声明变量 常量分支循环Cursor==******游标=====ResultSet存储过程函数异常包触发器-----------------------BEGIN--执行部分END;dbms_output.put_line();set serveroutput on  beginend;执行使用/常用符号 .退出        / 执行        '字符串类型单引号       := 赋值符号每句话有用分号结束注释 单行注释 -- 多行注释 /**/名称  类型;i  int;j constant int;declare--声明begin--执行end;练习:定义一个变量 有键盘输入      定义一个常量 hello输出 常量和变量的值例如 hello Tomdbms_output.put_line();dbms_output.put() dbms_output.new_line() --没有参数在pl/sql程序块中使用sql在使用select查询时必须使用select into 需要注意:select into 只可以查到一行记录,不可以多也不可少。DML:INSERT UPDATE DELETE SELECTDDL:CREATE ALTER DROP  --DDL 在pl/sql程序块中无法直接执行DCL:GRANT  REVOKE      --DCL 在pl/sql程序块中无法直接执行TCL:COMMIT ROLLBACK SAVEPOINT 练习 输入员工编号输出员工姓名declare v_empno number(4):=&no; v_ename varchar2(20);begin select ename into v_ename from emp where  empno=v_empno; dbms_output.put_line(v_ename);end;  输入一个数值判断成绩级别0-59      差60-80     可81-90     良91-100    优其他值为输入错误declare v_i int:=&no;begin if v_i between 0 and 100 then      if v_i between 0 and 59 then       dbms_output.put_line('差');      else if v_i between 60 and 80 then       dbms_output.put_line('可');      else if v_i between 81 and 90 then       dbms_output.put_line('良');      else if v_i between 91 and 100 then       dbms_output.put_line('优');          end if;         end if;        end if;      end if; else  dbms_output.put_line('输入的范围应该为0-100'); end if;end;if case 两种格式1 等值判断case 变量 when 值1 then   .... when 值2 then  .... else ....end case;2 表达式判断case when 表达式1 then   .... when 表达式2 then  .... else ....end case;loop--循环体; exit;end loop;while 条件 loop --循环体end loop;作业--1 输入员工编号显示员工详细信息declarev_id int:=&1;v_empno int;v_ename varchar2(20);v_job varchar2(20);v_mgr int;v_hiredate varchar2(20);v_sal int;v_comm int;v_deptno int;beginselect empno,ename into v_empno,v_ename from emp where empno=v_id;dbms_output.put_line(v_empno||' '||v_ename);end;/  2 输入员工编号完成员工工资的调整    10部门  增长0.5%    20部门  增长1.0%    30部门  增长1.5%    40部门  增长2.0%  declare  v_id int:=&1;  v_deptno int;  begin  select deptno into v_deptno from emp where empno=v_id;  if v_deptno=10 then  update emp set sal=sal+sal*(0.5/100) where deptno=10;  else if v_deptno=20 then  update emp set sal=sal+sal*(1/100) where deptno=20;  else if v_deptno=30 then  update emp set sal=sal+sal*(1.5/100) where deptno=30;  else if v_deptno=40 then  update emp set sal=sal+sal*(2.0/100) where deptno=40;  end if;  end if;  end if;  end if;  end; /

 

原创粉丝点击