8月6号笔记

DECLARE
num1 NUMBER;
num2 NUMBER;
calResult NUMBER;
BEGIN 
  num1:=&n1;
  num2:=&n2;
  calResult:=num1+num2;
  dbms_output.put_line(num1||'+'||num2||'='||calResult) ;
END;
--输出当前部门的总人数
DECLARE
v_count NUMBER;
BEGIN
  SELECT COUNT(1) INTO v_count FROM emp WHERE deptno=&deptno;
dbms_output.put_line('总人数'||v_count);
END;  
  
 --子程序(存储过程)带参数的
 --将某个部门员工的工资普提10%
 CREATE OR REPLACE PROCEDURE update_emp(dno NUMBER) IS
 BEGIN
   UPDATE emp SET sal=sal*1.1 WHERE deptno=dno; 
   COMMIT;
 END;
 
 
 BEGIN
   --在程序块中进行调研
   update_emp(20);
   --单行注释
   /*
     多行注释
   */
 END;
 
 SELECT * FROM emp WHERE deptno=20;
 
 --查询并打印指定的员工信息
  DECLARE
   v_name VARCHAR2(10);
   v_salary NUMBER;
   v_hiredate DATE;
 BEGIN
   SELECT ename,sal,hiredate INTO v_name,v_salary,v_hiredate FROM emp WHERE empno=&empno;
   dbms_output.put_line('雇员名称:'||v_name);
   dbms_output.put_line('薪水:'||v_salary);
   dbms_output.put_line('入职时间:'||v_hiredate);
 END;
 --%TYPE可以自动根据列或者其他变量的类型和长度定义新变量
 DECLARE
   v_name emp.ename%TYPE;
   v_salary emp.sal%TYPE;
   v_hiredate emp.hiredate%TYPE;   
 BEGIN
   SELECT ename,sal,hiredate INTO v_name,v_salary,v_hiredate FROM emp WHERE empno=&empno;
   dbms_output.put_line('雇员名称:'||v_name);
   dbms_output.put_line('薪水:'||v_salary);
   dbms_output.put_line('入职时间:'||v_hiredate);   
 END;
 
 --记录类型
 --%ROWTYPE(变量的类型与表中整行记录完全相同)
 DECLARE
   emp_record emp%ROWTYPE;
 BEGIN
   SELECT * INTO emp_record  FROM emp WHERE empno=&empno;
   dbms_output.put_line('雇员名称:'||emp_record.ename);
   dbms_output.put_line('薪水:'||emp_record.sal);
   dbms_output.put_line('入职时间:'||emp_record.hiredate);  
 END;
 --自定义类型
 DECLARE
   --类型的定义
   TYPE emp_record_type IS RECORD(
         v_name emp.ename%TYPE,
         v_salary emp.sal%TYPE,
         v_hiredate emp.hiredate%TYPE 
   );
   --变量的声明
   emp_record emp_record_type;
 BEGIN
   SELECT ename,sal,hiredate INTO emp_record  FROM emp WHERE empno=&empno;
   dbms_output.put_line('雇员名称:'||emp_record.v_name);
   dbms_output.put_line('薪水:'||emp_record.v_salary);
   dbms_output.put_line('入职时间:'||emp_record.v_hiredate);
   EXCEPTION 
     WHEN NO_DATA_FOUND THEN dbms_output.put_line('该员工不存在');
 END;
 
 --集合类型
 --一维表
 DECLARE 
 TYPE empno_table_type IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
 empno_table empno_table_type;
 TYPE dname_table_type IS TABLE OF dept.dname%TYPE INDEX BY BINARY_INTEGER;
 dname_table dname_table_type;
 BEGIN 
  empno_table(1):=3;
  empno_table(2):=4;
  empno_table(200):=4;
  empno_table(-200):=4;
 
 dbms_output.put_line('1:'||empno_table(1));
  dbms_output.put_line('2:'||empno_table(2));
   dbms_output.put_line('200:'||empno_table(200));
    dbms_output.put_line('-200:'||empno_table(-200));
    
    SELECT dname INTO dname_table(-1) FROM dept WHERE deptno=&deptno;
    dbms_output.put_line('dname_table(-1)'||dname_table(-1));
 END;
 
 --二维表
 DECLARE 
 TYPE dept_table_type IS TABLE OF dept%ROWTYPE INDEX BY BINARY_INTEGER;
 dept_table dept_table_type;
 BEGIN
   SELECT * INTO dept_table(10) FROM  dept WHERE deptno=&deptno;
   dbms_output.put_line('dept_table(10).name '||dept_table(10).dname);
   dbms_output.put_line('dept_table(10).loc '||dept_table(10).loc);
 
 END;
 
 --可变数组
DECLARE
 TYPE dept_varray_type IS VARRAY(10) OF dept.dname%TYPE NOT NULL;
 dept_varray dept_varray_type:=dept_varray_type('1','2','3','4','5');
 BEGIN
   dbms_output.put_line('dept_varray(1)'||dept_varray(1));
   SELECT dname INTO dept_varray(2)FROM dept WHERE deptno=30;
   dbms_output.put_line('dept_varray(2)'||dept_varray(2));
    --集合里的常用方法
   dbms_output.put_line(dept_varray.count);
   dbms_output.put_line(dept_varray.limit);
   dbms_output.put_line(dept_varray.first);
   dbms_output.put_line(dept_varray.last);
   dbms_output.put_line(dept_varray.prior(2));
   dbms_output.put_line(dept_varray.next(2));
 END;
 SELECT NULL+1 FROM dual;
 SELECT NULL||1 FROM dual;
 
  --if elsif  end if
  --从键盘获取2个数,判断大小
 DECLARE
    v_num1 NUMBER;
    v_num2 NUMBER;
 BEGIN
   v_num1:=&n1;
   v_num2:=&n2;
   
   IF v_num1>v_num2 THEN
      dbms_output.put_line(v_num1||'>'||v_num2);
   ELSE
     dbms_output.put_line(v_num1||'<'||v_num2);
   END IF;
   --方式1
   IF v_num1>5 THEN
      dbms_output.put_line(v_num1||'>5');
   ELSE
     IF v_num1>3 THEN
        dbms_output.put_line(v_num1||'>3');
     END IF;
   END IF;
   --方式2
   IF v_num1>5 THEN
      dbms_output.put_line(v_num1||'>5');
   ELSIF v_num1>3 THEN
     dbms_output.put_line(v_num1||'>3');
   END IF;
 END;
 
 -- CASE WHEN语句
 DECLARE 
   v_grade CHAR(1):=UPPER('&grade');
   v_result VARCHAR2(50);
 BEGIN
   CASE v_grade
     WHEN 'A' THEN v_result:='相当的靠谱';
     WHEN 'B' THEN v_result:='有点靠谱';
     WHEN 'C' THEN v_result:='靠谱';
     ELSE v_result:='相当的不靠谱';
   END CASE;
     dbms_output.put_line('你的成绩:'||v_result);
 END;
 
 --循环
 --无条件循环
 LOOP
   EXIT WHEN 
 END LOOP;
 
 --从1+2+....结果为10的时候退出循环
 DECLARE
  v_count NUMBER:=0;
  i NUMBER:=1;
 BEGIN
   LOOP
     v_count:=v_count+i;
     i:=i+1;
     EXIT WHEN v_count=10;
   END LOOP;
   dbms_output.put_line('i='||i);
   dbms_output.put_line('v_count='||v_count);
 END;
 
 --while循环
 WHILE <条件> LOOP
   
 END LOOP;
 
 
 DECLARE 
   v_count NUMBER:=0;
   i NUMBER:=1;
 BEGIN
   WHILE v_count<10 LOOP
     v_count:=v_count+i;
     i:=i+1;
   END LOOP;
   dbms_output.put_line('i='||i);
   dbms_output.put_line('v_count='||v_count);
 END;

--for 循环
DECLARE
BEGIN
  FOR i IN 1..10 LOOP
    dbms_output.put_line('i='||i);
  END LOOP;
END;

DECLARE
BEGIN
  FOR i IN REVERSE 1..10 LOOP
    dbms_output.put_line('i='||i);
  END LOOP;
END;

--不建议使用goto语句
DECLARE
  v_count NUMBER:=1;
BEGIN
  LOOP
    v_count:=v_count+1;
    IF v_count>=10 THEN
      GOTO end_loop;
    END IF;
  END LOOP;
  <<end_loop>>
  dbms_output.put_line('v_count='||v_count);
END;
 
 
 
 
 --练习题
 DECLARE
   saltest NUMBER(17);
 BEGIN
   SELECT sal INTO saltest FROM emp WHERE empno=&empno;
   IF saltest<2000 THEN
     dbms_output.put_line('挣得不多还需努力');
     ELSIF saltest<5000 THEN dbms_output.put_line('还可以');
    ELSIF saltest>5000 THEN  dbms_output.put_line('可以歇歇了');
     END IF;
 END;
 
 SELECT * FROM emp;
 
 --
 DECLARE 
   saltest NUMBER(17);
 BEGIN
 SELECT sal INTO saltest FROM emp WHERE empno=&empno;
   CASE saltest
     WHEN 'A' THEN v_result:='相当的靠谱';
     WHEN 'B' THEN v_result:='有点靠谱';
     WHEN 'C' THEN v_result:='靠谱';
     ELSE v_result:='相当的不靠谱';
   END CASE;
     dbms_output.put_line('你的成绩:'||v_result);
 END;
 
 /*
 1.员工表中员工的人数输出到屏幕
2.创建临时表temp,字段:char_store varchar2(35), date_store date创建匿名块,
1)把两个变量  'This is my first pl/sql 	program',current date插入到表中
 2)10号部门员工姓名,参加工作时间插入到表中
3.对名字以'A'或'S'开始的所有员工按原工资涨10%,对所有销售人员(SALESMAN)增加佣金500

 */
 
 DECLARE
 renshu NUMBER(3);
 BEGIN 
   SELECT COUNT(*) INTO renshu FROM emp;
   dbms_output.put_line('员工人数是:'||renshu);
   END;
 
 --3.
  CREATE OR REPLACE PROCEDURE update_emp(dno NUMBER) IS
 BEGIN
   UPDATE emp SET sal=sal*1.1 WHERE deptno=dno; 
   COMMIT;
 END;
 
 
 
 
 
 
 ----nrejren                                               
 
 
 
 
 
 
 
 
 
 
 
 
 
  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值