Oracle QL/SQL 的基本语法
发布日期:2021-05-07 19:44:25 浏览次数:21 分类:精选文章

本文共 3390 字,大约阅读时间需要 11 分钟。

文章目录

一、什么是PL/SQL ?

PL/SQL(Procedure Language/SQL)

PL/SQL 是 Oracle 对 sql 语言的过程化扩展,指在 SQL 命令语言中增加了过程处理语句(如分支、循
环等),使 SQL 语言具有过程处理能力。把 SQL 语言的数据操纵能力与过程语言的数据处理能力结合
起来,使得 PLSQL 面向过程但比过程语言简单、高效、灵活和实用。

范例 1: 为职工涨工资,每人涨 10%的工资。update emp set sal=sal*1.1

范例 2:按职工的职称长工资,总裁涨 1000 元,经理涨 800 元,其他人员涨 400 元。
这样的需求我们就无法使用一条 SQL 来实现,需要借助其他程序来帮助完成,也可以使用 pl/sql。

pl/sql 编程语言是对 sql 语言的扩展,使得 sql 语言具有过程化编程的特性。

pl/sql 编程语言比一般的过程化编程语言,更加灵活高效。
pl/sql 编程语言主要用来编写存储过程和存储函数等。

二、pl/sql 程序语法

程序语法:

declare	说明部分 (变量说明, 游标申明,例外说明 〕begin	语句序列 (DML 语句〕 …exception	例外处理语句End;

1. 常量和变量定义

在程序的声明阶段可以来定义常量和变量。

  • 变量的基本类型就是 oracle 中的建表时字段的变量如 char, varchar2, date, number,
    boolean, long
    在这里插入图片描述
  • 引用变量
    在这里插入图片描述
  • 记录型变量
    在这里插入图片描述
---赋值操作可以使用:=也可以使用into查询语句赋值declare    i number(2) := 10;    s varchar2(10) := '小明';    ena emp.ename%type;---引用型变量    emprow emp%rowtype;---记录型变量begin    dbms_output.put_line(i);    dbms_output.put_line(s);    select ename into ena from emp where empno = 7788;    dbms_output.put_line(ena);    select * into emprow from emp where empno = 7788;    dbms_output.put_line(emprow.ename || '的工作为:' || emprow.job);end;

2. if 分支

语法 1:	IF 条件 THEN 语句 1;		语句 2;		END IF;语法 2:	IF 条件 THEN 语句序列 1;		ELSE 语句序列 2;		END IF;		语法 3:	IF 条件 THEN 语句;	ELSIF 语句 THEN 语句;		ELSE 语句		END IF;
  • 范例 1:如果从控制台输入 1 则输出我是 1
    在这里插入图片描述
  • 范例 2: 如果从控制台输入 1 则输出我是 1 否则输出我不是 1
    在这里插入图片描述
  • 范例 3:判断人的不同年龄段 18 岁以下是未成年人, 18 岁以上 40 以下是成年人, 40 以上是老年人
    在这里插入图片描述
---输入小于18的数字,输出未成年---输入大于18小于40的数字,输出中年人---输入大于40的数字,输出老年人declare  i number(3) := ⅈbegin  if i<18 then    dbms_output.put_line('未成年');  elsif i<40 then    dbms_output.put_line('中年人');  else    dbms_output.put_line('老年人');  end if;end;

3. LOOP 循环语句

语法 1:	WHILE total <= 25000 LOOP	.. .	total : = total + salary;	END LOOP;语法 2:	Loop	EXIT [when 条件];	……	End loop	语法 3:	FOR I IN 1 . . 3 LOOP	语句序列 ;	END LOOP ;
  • 范例:使用语法 1 输出 1 到 10 的数字
    在这里插入图片描述
  • 范例:使用语法 2 输出 1 到 10 的数字
    在这里插入图片描述
  • 范例:使用语法 3 输出 1 到 10 的数字
    在这里插入图片描述
---用三种方式输出1到10是个数字---while循环declare  i number(2) := 1;begin  while i<11 loop     dbms_output.put_line(i);     i := i+1;  end loop;  end;---exit循环declare  i number(2) := 1;begin  loop    exit when i>10;    dbms_output.put_line(i);    i := i+1;  end loop;end;---for循环declarebegin  for i in 1..10 loop     dbms_output.put_line(i);    end loop;end;

4. 游标 Cursor

在写 java 程序中有集合的概念,那么在 pl/sql 中也会用到多条记录,这时候我们就要用到游标,

游标可以存储查询返回的多条数据

在这里插入图片描述

  • 范例 1:使用游标方式输出 emp 表中的员工编号和姓名
    在这里插入图片描述
  • 范例 2:按员工的工种涨工资,总裁 1000 元,经理涨 800 元其,他人员涨 400 元。
--备份出一张新表为 myemp;create table myemp as select * from emp;declare	cursor pc is select * from myemp;	addsal myemp.sal%type;	pemp myemp%rowtype;begin	open pc;	loop 		fetch pc into pemp;		exit when pc%notfound;		if pemp.job = 'PRESIDENT' then addsal := 1000;		elsif pemp.job = 'MANAGER' then addsal := 800;		else addsal := 400;		end if;		update myemp t set t.sal = t.sal + addsal where t.empno = pemp.empno;	end loop;	close pc;end;
  • 范例 3:写一段 PL/SQL 程序,为部门号为 10 的员工涨工资
    在这里插入图片描述
---游标:可以存放多个对象,多行记录。---输出emp表中所有员工的姓名declare  cursor c1 is select * from emp;  emprow emp%rowtype;begin  open c1;     loop         fetch c1 into emprow;         exit when c1%notfound;         dbms_output.put_line(emprow.ename);     end loop;  close c1;end;-----给指定部门员工涨工资declare  cursor c2(eno emp.deptno%type)   is select empno from emp where deptno = eno;  en emp.empno%type;begin  open c2(10);     loop        fetch c2 into en;        exit when c2%notfound;        update emp set sal=sal+100 where empno=en;        commit;     end loop;    close c2;end;----查询10号部门员工信息select * from emp where deptno = 10;
上一篇:Oracle 存储过程和存储函数
下一篇:Oracle 视图和索引

发表评论

最新留言

关注你微信了!
[***.104.42.241]2025年04月14日 17时50分43秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章