Oracle笔记系列(三)

 --问题:给员工涨工资,总裁涨1000,经理800 其他400
SQL> /*
SQL> Java:
SQL> public void sayHello(){
SQL>     System.out.println("Hello World");
SQL> }
SQL> */
SQL> --利用PLSQL打印Hello World
SQL> declare
  2     --变量说明
  3  begin
  4     --程序体
  5     dbms_output.put_line('Hello World');
  6  end;
  7  /

PL/SQL 过程已成功完成。

SQL> --打开屏幕输出开关
SQL> set serveroutput on
SQL> /
Hello World                                                                     

PL/SQL 过程已成功完成。

引用型变量

DECLARE
--定义引用型变量
  PENAME EMP.ENAME%TYPE;
  PSAL   EMP.SAL%TYPE;

BEGIN
  SELECT ENAME, SAL INTO PENAME, PSAL FROM EMP WHERE EMPNO = 7839;
  DBMS_OUTPUT.PUT_LINE(PENAME || '的薪水是' || PSAL);

END;


记录型变量

-- yang 创建于 2014/3/12 
DECLARE
  --定义记录型变量:代表一行
  EMP_REC EMP%ROWTYPE;
BEGIN
  -- 给记录型变量赋值
  SELECT * INTO EMP_REC FROM EMP WHERE EMPNO = 7839;

  --输出
  DBMS_OUTPUT.PUT_LINE(EMP_REC.ENAME || '的薪水是' || EMP_REC.SAL || 
                                                  ' 奖金是'     ||NVL(EMP_REC.COMM, 0));
END;





/* if语句
判断用户输入的数据
*/
--PL\SQL 接收键盘输入
--接收键盘输入

--Oracle SQL developer    
--accept num prompt '请输入一个数字';

DECLARE 
--定义一个变量 保存键盘输入
pnum NUMBER :=#
BEGIN 
--判断
IF  pnum =0 THEN dbms_output.put_line('你输入的是'||pnum);
    Elsif     pnum =1 THEN dbms_output.put_line('你输入的是'||pnum);
   ELSIF     pnum =2THEN dbms_output.put_line('你输入的是'||pnum);
  
    ELSE dbms_output.put_line('你输入的是无效数字');
 END IF;       
END;

/*
循环  :打印1~10
*/

DECLARE 
 pnum NUMBER :=1;
 BEGIN 
 LOOP
   --退出的条件
 EXIT WHEN  pnum>10;
  --打印
  dbms_output.put_line(pnum); 
  --自增
  pnum :=pnum+1;
  END LOOP;
 END;

/*
使用光标 查询员工的姓名和工资,并打印

注意的问题:
1.先打开,后使用,最后关闭
2.如果不close 光标;内存泄露 too many opened cursor(Error)
*/

DECLARE
  -- 定义光标
  CURSOR CEMP  IS  SELECT ENAME, SAL FROM EMP;
  --为该光标定义变量
  PNAME EMP.ENAME%TYPE;
  PSAL  EMP.SAL%TYPE;

BEGIN
  --打开光标
  OPEN CEMP;
  LOOP
    --从光标中取值
    FETCH CEMP  INTO PNAME, PSAL;
    --退出条件
    EXIT WHEN CEMP%NOTFOUND;
    --输出
    DBMS_OUTPUT.PUT_LINE(PNAME || '的薪水是' || PSAL);
  END LOOP;
  --关闭光标
  CLOSE CEMP;
END;

/*按员工的工种 涨工资。总裁1000,经理800,普通员工400
*/
DECLARE
  --代表员工的编号和工种
  CURSOR CSAL   IS
    SELECT EMPNO, JOB FROM EMP;
  --为光标定义变量
  CJOB EMP.JOB%TYPE;
  CNO  EMP.EMPNO%TYPE;
BEGIN
  OPEN CSAL;
  LOOP
            --取出一个员工
    FETCH CSAL
      INTO CNO, CJOB;
    EXIT WHEN CSAL %NOTFOUND;
    IF CJOB = 'PRESIDENT' THEN
      UPDATE EMP SET SAL = SAL + 1000 WHERE EMPNO = CNO; 
    ELSIF CJOB = 'manager' THEN
      UPDATE EMP SET SAL = SAL + 800 WHERE EMPNO = CNO;  
    ELSE
      UPDATE EMP SET SAL = SAL + 400 WHERE EMPNO = CNO;
    END IF;
  END LOOP;
  CLOSE CSAL;
  COMMIT;
  DBMS_OUTPUT.PUT_LINE('完成!!');
END;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值