PL/SQL

摘要:
=|default}param_ Value]过程控制语句IFif<条件表达式1>条件表达式2>表达式_2>表达式_n>[elseplsql_sentence;exitwhenend_condition_exp;
Procedural Language/SQL 过程化编程语言
 

PL/SQL块
[DECLARE]
  -- 声明部分
BEGIN
  -- 执行部分
[EXCEPTION]
  -- 异常处理部分
END
变量
-- 参数
param_name datatype [{:=|default} param_value]
-- 输入参数
param_name [in] datatype [{:=|default} param_value]
-- 输出参数
param_name out datatype [{:=|default} param_value]

流程控制语句
IF
if <condition_expression1> then
  plsql_sentence_1;
elsif <condition_expression2> then
  plsql_sentence_2;
...
else
  plsql_sentence_n;
end if;

注:是“elsif”,不是“elseif”,木有“e” 

CASE
case <selector>
  when <expression_1> then plsql_sentence_1;
  when <expression_2> then plsql_sentence_2;
  ...
  when <expression_n> then plsql_sentence_n;
  [else plsql_sentence;]
end case;

循环语句
LOOP
loop
  plsql_sentence;
  exit when end_condition_exp;
end loop;
 1 -- 计算前100个自然数之和
 2 set serveroutput on
 3 declare
 4   sum_i int := 0;
 5   i int := 0;
 6 begin
 7   loop
 8     i := i + 1;
 9     sum_i := sum_i + i;
10     exit when _i = 100;
11   end loop;
12   dbms_output.put_line('前100个自然数之和:' || sum_i);
13 end;
14 /
WHILE
while condition_expression loop
  plsql_sentence;
end loop;
 1 -- 计算前100个自然数之和
 2 set serveroutput on
 3 declare
 4   sum_i int := 0;
 5   i int := 0;
 6 begin
 7   while 1<=99 loop
 8     i := i + 1;
 9     sum_i := sum_i + i;
10   end loop;
11   dbms_output.put_line('前100个自然数之和:' || sum_i);
12 end;
13 /
FOR
for variable_counter_name in [reverse] lower_limit..upper_limit loop
  plsql_sentence;
end for;
 1 -- 计算前100个自然数之和
 2 declare
 3   sum_i int := 0;
 4 begin
 5   for i in 1..100 loop
 6     sum_i := sum_i + i;
 7   end loop;
 8   dbms_output.put_line('前100个自然数之和:' || sum_i);
 9 end;
10 /

游标
      游标提供了一种从表中检索数据并进行操作的灵活手段,它主要用在服务器上,处理由客户端发送给服务器端的SQL语句,或是批处理、存储过程、触发器中的数据处理请求。
      游标的作用相当于指针,通过它PL/SQL程序可以一次处理查询结果集中的一行,并可以对该行数据执行特定操作。
 
 
显示游标
      它是由用户声明、操作的一种游标,通常用于操作查询结果集,使用它处理数据的步骤包括:声明、打开、读取、关闭4个步骤。其中读取游标可能是个反复操作的步骤,因为游标每次只能读取一行数据,所以对于多条记录,需要反复读取,直到游标读取不到数据为止。
 
-- 声明游标
cursor cur_name[(input_param1[, input_param2]...)]
[return ret_type]
is select_sentence;
 
-- 打开游标
open cur_name[(param_value1[, param_value2]...)];
 
-- 读取游标
fetch cur_name into {variable};
 
-- 关闭游标
close cur_name;
 1 -- 
 2 set serveroutput on
 3 declare
 4   -- 声明游标
 5   cursor cup_demo(var_valid in SMALLINT := '0')
 6   is select id, name, type
 7      from t_demo
 8      where valid = var_valid;
 9   -- 声明一个RECORD类型
10   type record_demo is record
11   (
12     id   t_demo.id%type,
13     name t_demo.name%type,
14     type t_demo.type%type
15   );
16   -- 声明一个record_demo类型的变量
17   v_row record_demo;
18 begin
19   -- 打开游标
20   open cur_demo('1');
21   -- 读取游标
22   fetch cur_demo into v_row;
23   while cur_demo%found loop
24     dbms_output.putline(v_row.name || ':' || v_row.type);
25     fetch cur_demo into v_row;
26   end loop;
27   -- 关闭游标
28   close cur_demo;
29 end;
30 /

使用FOR语句循环游标

 1 --
 2 set serveroutput on
 3 declare
 4   -- 声明游标
 5   cursor cup_demo(var_valid in SMALLINT := '0')
 6   is select id, name, type
 7      from t_demo
 8      where valid = var_valid;
 9 begin
10   -- 循环游标
11   for v_row in cur_demo loop
12     dbms_output.put_line(v_row.name || ':' || v_row.type);
13   end loop;
14 end;
15 /

注:在使用游标(包括显示、隐式)的FOR循环中,可以声明游标,但不用打开游标、读取游标、关闭游标,这些是由Oracle系统内部自动完成的。

免责声明:文章转载自《PL/SQL》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇python模块整理6tarfile模块第十一届机械设计大赛省赛总结下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

试试SQLServer 2014的内存优化表

试试SQLServer 2014的内存优化表 SQL Server2014存储引擎:行存储引擎,列存储引擎,内存引擎 SQL Server 2014中的内存引擎(代号为Hekaton)将OLTP提升到了新的高度。 现在,存储引擎已整合进当前的数据库管理系统,而使用先进内存技术来支持大规模OLTP工作负载。 就算如此,要利用此新功能,数据库必须包含“内存优化...

mysql如何存储过程返回记录的更新条数

#ROW_COUNT()返回被前面语句升级的、插入的或删除的行数。 #这个行数和 mysql 客户端显示的行数及 mysql_affected_rows() C API 函数返回的值相同。 use test; create table t(id int,NAME varchar(200),addr varchar(200)); INSERT INTO t...

安装完SAP后BASIS的配置流程

安装完SAP后BASIS配置流程 安装完SAP后,配置流程. 1.升级kernel。 2.TCD SLICENSE: License Administration install > System Num. & license key 3.TCD STMS: Transport Management System 4.DDIC登录,密码为:1...

阅读glibc源码

GNU C - Using GNU GCC __attribute__ mechanism 01  近来阅读glibc源码的时候遇到很多关于__attribute__的问题,索性就查找了相关的资料,学习了一下. 要是不解决了这个问题,有的时候还真的是比较难下手.就拿glibc来说,使用xcscope搜索POSIX pthread 函数: pthread...

最终大赛作品——VGA简单显示、简单视力检测

最终的功能怎么说呢。。一个字——怂!(PS:此时此刻只想默默地发个笑不出的表情。。。) 算个半成品吧,不过还是记录一下,中间对Verilog有了很多新的理解 其实其中的一部分代码是借鉴网上的,比如PLL.v,比如VGA驱动时序,比如按键消抖。。 1. PLL.v   这个据说是可以自动生成的,还有待学习—— // synopsys translate_of...

Oracle 通过触发器 来创建 同步临时表 及处理 通过 自治事务 来解决 查询 基表的问题

// 触发器 create or replace trigger tr_sync_BD_MARBASCLASS after INSERT or UPDATE on BD_MARBASCLASS for each row declare v_cnt integer; PRAGMA AUTONOMOUS_TRANSACTION; -- 自治事务...