Oracle数据库PL/SQL的基本介绍

PL/SQL是什么?

今天面试官问我什么是PL/SQL 特来此给大家补习一下基础知识

在我看来是Java和SQL的结合体 类似和Javabase一样的用法

PL/SQL定义变量和Java不一样 PL/SQL定义变量首先需要声明DECLARE

DECLARE
I NUMBER := 1; 定义了一个数字变量 =在Oracle里面相当于等等比较的意思  :=是给其赋值 左边的代码 定义 一个 I  变量为NUMBER 赋值1;

还可以使用 SELECT INTO 语句进行赋值

Oracle的一些基本数据

 

 编写PL/SQL语句的基本介绍

 PL/SQL循环的写法

PL/SQL死循环的写法:

 PL/SQL WHILE的写法:

  PL/SQL foreace循环的写法:

在Oracle里面叫for循环 我感觉和java里的foreace循环差不多 所以我叫foreace循环

 

 PL/SQL函数FUNCTINO的创建和基本使用:PL/SQL游标 CURSOR 的创建和基本介绍

--游标 cursor (相当于java里面我们使用的结果集)
DECLARE 
CURSOR MYC IS SELECT ENAME FROM EMP;--定义了一个游标 名字叫 MYC 将emp表的名字数据装的了里面
MY_NAME EMP.ENAME%TYPE;--定义一个装emp表名字的容器 来装游标查询的数据
BEGIN
  OPEN MYC;--OPEN打开游标
  FETCH MYC INTO MY_NAME;--将数据从游标里面拿到MY_NAME
  DBMS_OUTPUT.PUT_LINE(MY_NAME);
  CLOSE MYC;--关闭游标
END;
--游标状态
--%FOUND 有表里面有数据
--%NOTFOUND 游标中没有数据
--%ROWCOUNT 受到影响的行数
--%ISOPEN 游标是否打开

--如何拿到游标中的所有数据
--利用循环遍历 游标只能使用foreach遍历
--不需要额外定义变量
--会自动打开和关闭
DECLARE
CURSOR MYC IS SELECT * FROM EMP;
BEGIN
       FOR E IN MYC --遍历游标数据
         LOOP
         DBMS_OUTPUT.PUT_LINE(E.ENAME);--将遍历的名字进行输出
         END LOOP;
END; 
--显式游标:自己定义的游标  myc myd mye
--隐式游标:隐式游标的名字都叫sql
--DML(增,删,改)会具备一个游标
CREATE TABLE DB_EMP
AS
SELECT * FROM EMP;

-- 将表中的工资少于2000的加上1000
-- 输出收到改变的人数
BEGIN
  UPDATE DB_EMP SET SAL=SAL+1000 WHERE SAL<2000;
  DBMS_OUTPUT.PUT_LINE('JXRS'||SQL%ROWCOUNT);
END;
--删除表中的员工
--如果没有 则输出没有
BEGIN
  DELETE FROM DB_EMP;
  IF SQL%ROWCOUNT=0 THEN
    DBMS_OUTPUT.PUT_LINE('无了');
    END IF;
    END;
--动态游标
--     游标在声明时没有设定,在打开时可以对其进行修改
--     强类型游标 有return
-- type my_t is ref cursor return xx%rowtype;
--     弱类型游标 无return
-- type c1 is ref cursor;
--     动态游标无法使用for循环遍历
--使用强类型游标查看数据
DECLARE
TYPE MYT IS REF CURSOR RETURN EMP%ROWTYPE;--声明一个类型,游标中只能存放EMP类型的行数据
MYE MYT;--一个游标 就是给游标命名
MY_EMP EMP%ROWTYPE;
BEGIN
  OPEN MYE FOR SELECT * FROM EMP;--手动指定了sql语句(动态游标)
  LOOP FETCH MYE INTO MY_EMP;
  EXIT WHEN MYE%NOTFOUND;
  DBMS_OUTPUT.PUT_LINE(MY_EMP.ENAME);
  END LOOP;
  CLOSE MYE;
  OPEN MYE FOR SELECT * FROM EMP WHERE DEPTNO=20;--手动指定了sql语句(动态游标)
  LOOP
    FETCH MYE INTO MY_EMP;
    EXIT WHEN MYE%NOTFOUND;
    DBMS_OUTPUT.PUT_LINE(MY_EMP.DEPTNO);
    END LOOP;
    CLOSE MYE;
 END;
 -- 使用弱类型游标查看emp,dept表的数据
 DECLARE 
 TYPE MYC IS REF CURSOR;--弱类型就是说  这个游标可以为多表服务
 MYT MYC;
 MYE EMP%rowtype;
 MYD DEPT%rowtype;
 BEGIN
   OPEN MYT FOR SELECT * FROM EMP;--手动指定了sql语句(动态游标)
   LOOP FETCH MYT INTO MYE;
   EXIT WHEN MYT%NOTFOUND;
   DBMS_OUTPUT.PUT_LINE(MYE.ENAME);
   END LOOP;
   OPEN MYT FOR SELECT * FROM DEPT;
   LOOP FETCH MYT INTO MYD;
   EXIT WHEN MYT%NOTFOUND;
   DBMS_OUTPUT.PUT_LINE(MYD.DNAME);
   END LOOP;
   END;
 

  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值