Liny_@NotePad

沉迷ACG中

《Essential C++》第二章练习

关于函数的声明与定义还不是很清楚。。继续苦读 = =

《Essential C++》第一章练习

刚看完第一章~做做练习 = = 前4题偷懒不做,从第5题开始……

PL/SQL课堂练习(过程、函数、包、触发器)

1、过程练习,掌握过程参数(in/out/in out)及调用环境
 1.1)过程名字PROC_EMP(in hireYear,out manCount,in out commis_pct)
  需求描述:
   输入一个hireYear,计算出该年入职的员工数staffCount;
   给定一个commis_pct,上述范围的职员如果没有提成(commission_pct)的,
   用这个数作为他的提成,已有提成的,不做改动
   上述范围职员的提成最大值用commis_pct参数返回

  1. CREATE OR REPLACE PROCEDURE proc_emp(hireYear IN NUMBER, manCount OUT NUMBER, commis_pct IN OUT NUMBER) IS
  2.        
  3.        -- 计算出该年入职的员工数staffCount
  4.        SELECT COUNT(*)
  5.        INTO manCount
  6.        FROM employees
  7.        WHERE hireYear = TO_CHAR(hire_date,'yyyy');
  8.        
  9.        -- 给定一个commis_pct,上述范围的职员如果没有提成(commission_pct)的,
  10.        -- 用这个数作为他的提成,已有提成的,不做改动
  11.        UPDATE employees
  12.        SET COMMISSION_PCT = commis_pct
  13.        WHERE hireYear = TO_CHAR(hire_date,'yyyy') AND commission_pct IS NULL;
  14.        
  15.        -- 上述范围职员的提成最大值用commis_pct参数返回
  16.        SELECT MAX(commission_pct)
  17.        INTO commis_pct
  18.        FROM employees
  19.        WHERE hireYear = TO_CHAR(hire_date,'yyyy');
  20.        
  21.        RETURN;
  22.  
  23. END proc_emp;

 

PL/SQL课堂练习(匿名块)

1、普通变量声明
 1)、声明3个变量:full_name varchar2(20),salary number(9,2),fdate date
 2)、用Select into语句从employees表为上面3个变量赋值,条件是rownum <= &_rownum
 3)、用DBMS_OUTPUT.PUT_LINE()打印三个变量值,结果如:Mickel.Jordon 's salary is $4680, Joined in 1987-07-12
 4)、另外声明常量PI,NUMBER(2,7)=3.1415926,声明变量flag BOOLEAN,默认值=FALSE,声明变量age NUMBER,无默认值
 5)、打印上述变量

  1.  
  2.    full_name VARCHAR2(20);
  3.    salary NUMBER(9,2);
  4.    fdate DATE;
  5.    pi CONSTANT NUMBER(8,7) := 3.1415926;
  6.    flag BOOLEAN := FALSE;
  7.    age NUMBER;
  8.  
  9.  
  10.    SELECT first_name||'.'||last_name, salary, hire_date
  11.    INTO full_name, salary, fdate
  12.    FROM employees
  13.    WHERE ROWNUM <= &_rownum;
  14.  
  15.    DBMS_OUTPUT.PUT_LINE(full_name||' ''s salary IS $'||salary||', Joined in '||to_char(fdate,'yyyy-MM-dd'));
  16.  
  17.    DBMS_OUTPUT.PUT_LINE('pi:'||pi);
  18.  
  19.    IF flag THEN
  20.       DBMS_OUTPUT.PUT_LINE('true');
  21.    ELSE
  22.       DBMS_OUTPUT.PUT_LINE('false');
  23.    END IF;
  24.  
  25.    DBMS_OUTPUT.PUT_LINE('age:'||age);
  26.  

数据库对象练习

【HR/HR】

1、用学生选课场景创建表:
 1.1
 Student(id,sno,sname,telnum,email)
 Course(id,cno,cname,teachername)
 studentcourse(id,s_id,c_id)

  1. CREATE TABLE student(
  2. id NUMBER,
  3. sno VARCHAR2 (15) NOT NULL,
  4. sname VARCHAR2 (20) NOT NULL,
  5. telnum VARCHAR2 (12),
  6. email VARCHAR2 (50)
  7. );
  8. CREATE TABLE course(
  9. id NUMBER,
  10. cno VARCHAR2 (6) NOT NULL,
  11. cname VARCHAR2 (30) NOT NULL,
  12. teachername VARCHAR2(20)
  13. );
  14. CREATE TABLE studentcourse(
  15. id NUMBER,
  16. s_id NUMBER,
  17. c_id NUMBER
  18. );

SQL练习

【SCOTT/TIGER】

7. 用Decode函数实现横表和竖表的转换

  1. SELECT deptno DEPARTMENT_ID,
  2.        COUNT(*) "部门人数",
  3.        SUM(DECODE(SIGN(sal-9000),-1,0,1)) "超高收入人数(>9000)",
  4.        SUM(DECODE(SIGN(sal-9000),-1,0,( DECODE(SIGN(sal-12000),1,0,1) ) )) "极高收入人数([9000,12000])",
  5.        SUM(DECODE(SIGN(sal-6000),-1,0,( DECODE(SIGN(sal-9000),1,0,1) ) )) "高收入([6000,9000])",
  6.        SUM(DECODE(SIGN(sal-3000),-1,0,( DECODE(SIGN(sal-6000),1,0,1) ) )) "一般收入([3000,6000])",
  7.        SUM(DECODE(SIGN(sal-3000),-1,1,0)) "低收入([<3000])"
  8.   FROM emp
  9.  GROUP BY deptno;

练习:SQL基础与常用单行函数

练习:创建一个新建tablespace的User