pl/sql

什么是PL/SQL

  PL/SQL是结合oracle过程语言和机构化查询运行(SQL) 的一种扩展语言。使用PL/SQL可以编写具有很多高级功能的程序,有以下优点

  • PL/SOL可以采用过程性语言控制程序的结构,也就是说,结构,如判断。循环等程序结构。
  • 同其他的编程语言一样,PL/SOL可以对程序中的错误进行自动处理,误时不会中断,即它的异常处理机制。
  • PL/SOL程序块具有更好的可移植性,可以移植到另一个Cracle数据库中。
  • PL/SOL程序减少了网络的交互,有助于提高程序性能。

常量和变量的声明与赋值

声明并赋值:

declare
/*
||注意命名规则
||名称不能超过30个字符
||第一个字符必须为字母
||不区分大小写
||不能用 减号
||不能是SQL保留字
*/
--声明变量
ename varchar2(20)
--声明常量 赋值是用 := 赋值 '='用于比较
c_rate_incr constant number(7,2):=1.10
begin
end;

赋值:

--声明变量
v_ename varchar2(20);
--声明常量并使用 :=赋值
c_rate_incr constant number(7,2):=1.10;
begin
--通过select in同给变量赋值
select ename into v_ename from emp
where empno='';
Dbms_Output.put_line('变量:'||v_ename);
end;

结果

这种操作只能返回单行数据多了会报错

属性类型

使用%TYPE属性的优点在于:

  • 可以不必知道所引用的数据库列的数据类型。
  • 所引用的数据库列的数据类型可以实时改变, 容易保持一一致,不用修改PL/S0L 程序。

%ROWTYPE返回一个记录类型,其数据类型和数据库表的数据结构相一致,这时可以使用%FOWTIFE,使用%ROWTYPE属性的优点在于:

  • 可以不必知道所引用的数据库中列的个数和数据类型。
  • 所引用的数据库中列的个数和数据类型可以实时改变,容易保持一致不用修改PL/S0L 程序。

简单来讲 %type相当于一个普通的变量类型(字符或者数值),而%rowtype则是相当于集合可以保存多个变量信息

%type举例:

declare
--声明变量
v_ename emp.ename%type;--声明常量并使用 :=赋值
c_rate_incr constant number(7,2):=1.10;
begin
--通过select in同给变量赋值
select ename into v_ename from emp
where empno='';
Dbms_Output.put_line('变量:'||v_ename);
end;

结果

%rowtype举例:

declare
--声明变量
v_ename emp%rowtype;
--声明常量并使用 :=赋值
c_rate_incr constant number(7,2):=1.10;
begin
--通过select in同给变量赋值
select * into v_ename from emp
where empno='';
Dbms_Output.put_line('变量:'||v_ename.job||'--sal:'||v_ename.sal);
end;

结果

pl/sql中的控制语句

if控制语句

begin
if 9>0 then
Dbms_Output.put_line('9>0');
else if 0>1 then
Dbms_Output.put_line('0>1 ');
else
Dbms_Output.put_line('9<0');
end if;
end;

结果:

case语句

--case 也就是switch一样的功能
begin
case 2
when 1 then
Dbms_Output.put_line('2是1');
when 3 then
Dbms_Output.put_line('2是3');
else
Dbms_Output.put_line('2是2');
end case;
end;

结果:

loop循环

--loop
begin
loop
Dbms_Output.put_line('loop也就是do-while');
exit when 9>0;
end loop;
end;

结果:

for循环

--for
begin
for i in 1..6 loop
Dbms_Output.put_line('i:'||i);
end loop;
end;

结果:

while循环

--while
begin
while 6>0 loop
Dbms_Output.put_line('6>0');
exit;
end loop;
end;
  • exit:跳出当前循环,使循环结束(相当与其他编程语言里面的break)
  • continue:结束本次循环,进入下一次循环
  • return:结束当前过程或者函数

顺序控制

  顺序控制用于按顺序执行语句.顺序语句包括null语句和goto语句goto不推荐使用

--顺序控制
begin
if 6>0 then
null;--为了使语法变得有意义,去掉null会报错
else
Dbms_Output.put_line('6>0');
end if;
end;

  null语句是一个可执行语句,相当于一个占位符或不执行任何操作的空语句,它可以使得某些语句变得有意义,提高程序可读性,保证其他语句结构

的完整性和正确性.

begin
if 6>0 then
goto end_loop;--跳转到 <<end_loop>> 此标记是自定义
else
null;
end if;
<<end_loop>>
Dbms_Output.put_line('6>0');
end;
  • 标签<<end_loop>>后面接一条可执行的语句,不能直接跟END IF或者其他END;
  • 属于plsql控制语句,用于程序控制非条件跳至指定标签<<???>>。不易控制和维护,慎用!

PL/sql中如何声明变量,常量,控制语句及for,loop,while和顺序控制的使用的更多相关文章

  1. PL/SQL中直接写SQL语句和用EXECUTE IMMEDIATE方法的区别

    PL/SQL中直接写SQL语句和用EXECUTE IMMEDIATE方法的区别 在PL/SQL中在执行SQL语句时可以直接写SQL或者可以把一个SQL语句拼成一个字符串,如下: select * fr ...

  2. PL/SQL中LOOP循环控制语句

    在PL/SQL中可以使用LOOP语句对数据进行循环处理,利用该语句可以循环执行指定的语句序列.常用的LOOP循环语句包含3种形式:基本的LOOP.WHILE...LOOP和FOR...LOOP. LO ...

  3. 在PL/SQL中调用Oracle存储过程

    存储过程 1 什么是存储过程? 用于在数据库中完成特定的操作或者任务.是一个PLSQL程序块,可以永久的保存在数据库中以供其他程序调用. 2 存储过程的参数模式 存储过程的参数特性: IN类型的参数 ...

  4. oracle PL/SQL(procedure language/SQL)程序设计(在PL/SQL中使用SQL)

    在PL/SQL程序中,允许使用的SQL语句只有DML和事务控制语句,使用DDL语句是非法的.使用SELECT语句从数据库中选取数据时,只能返回一行数据.使用COMMIT,  ROLLBACK, 和SA ...

  5. ORACLE PL/SQL 实例精解之第三章 PL/SQL中的SQL

    3.1 在PL/SQL中使用DML 在PL/SQL语块中,两种变量赋值a. := 初始化.b. select into语法,PL/SQL语块的声明部分被声明的变量,后期可以使用选择语句进行赋值. 3. ...

  6. PL/Sql 中创建、调试、调用存储过程

    存储过程的详细建立方法 1.先建存储过程 左边的浏览窗口选择 procedures ,会列出所有的存储过程,右击文件夹procedures单击菜单"new",弹出 template ...

  7. SQL在declare声明变量

    在sql添加的声明变量. declare @local_variable data_type 你需要指定一个变量声明的类型, 能够使用set和select对变量进行赋值, 在sql语句中就能够使用@l ...

  8. PL/SQL程序控制结构及在PL/SQL中更改数据和管理事务

    1.条件控制 A. IF条件分支语法: if (条件1) then 语句; elsif (条件2) then 语句; elsif (条件3) then 语句; else 语句; end if; B . ...

  9. PL/SQL中SELECT总结

      一.SELECT 语句的各个关键词的顺序及作用简解(这个我简略点写~) 1.SELECT 2.FROM 3.WHERE 4.GROUP BY ---对结果集进行分组,通常与聚合函数一起使用 5.H ...

随机推荐

  1. Quartz使用(3) - Quartz核心接口Trigger

    Trigger最常用的有两种SimpleTrigger和CronTrigger,首先介绍Trigger的一些基础的信息,然后会详细描述这两种Trigger. 1. 通用Trigger属性 quartz ...

  2. 谷歌添加百度翻译提示Google已将百度翻译标记为恶意程序并阻止安装,怎么办

    进入谷歌浏览器的设置, 显示高级设置——隐私设置下七个选项中的第四个选项(启用针对网上诱骗和恶意软件的防护功能)把勾去掉,然后将百度翻译的CRX拖动到chrome的安装插件页面, 修改chrome的限 ...

  3. git 摘要

    git使用摘记 git冲突的问题主要是在修改的部分而不是添加的部分, 如果merge的文件在同一个位置有不同的信息则git会报错 git push origin中的origin表示的是远程的仓库名为o ...

  4. Hibernate课程 初探一对多映射3-1 单向多对一简介

    多对一的关系和关系数据库中的外键参照关系最匹配,即在己方的表中的一个外键参照另一个表中的主键! 通过在多方持有一方的引用来实现,需要在多的一方使用<many-to-one>来配置

  5. Java中的各种锁

    .共享锁和排它锁的区别

  6. ZR国庆Round2解题报告

    心路历程 预计得分:100 + 10 - 20 + 10 = 120 实际得分:100 + 0 + 10 = 110 感觉这场打的挺稳的.开场秒掉A题,写+调差不多1h 然后刚T3暴力,刚完还有2h左 ...

  7. 缓存的set、getAndTouch一定要谨慎使用

    缓存的set.getAndTouch一定要谨慎使用. 很多人认为缓存在内存中性能良好,频繁更新,却不想机器的IO无法支撑,结果就是缓存成了系统的瓶颈.

  8. react组件生命周期过程

    实例化 首次实例化 getDefaultProps getInitialState componentWillMount render componentDidMount 实例化完成后的更新 getI ...

  9. 页面文本超出后CSS实现隐藏的方法

    text-overflow: ellipsis !important; white-space: nowrap !important; overflow: hidden !important; dis ...

  10. hiho 第135周 九宫

    题目链接:http://hihocoder.com/contest/hiho135/problem/1 由于是九宫格,全排列也就是9! (362880)种方式,我就直接暴力枚举排列好了. #inclu ...