• PL/SQL


    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系统内部自动完成的。

  • 相关阅读:
    【转】Linux admin 常用管理命令收集
    【转】Linux java CPU 100% 异常排查实践与总结
    【转】Building a Reactive RESTful Web Service
    HDFS的HA高可用资料
    Prometheus 资料
    用docker运行postgreSQL
    [转] 广州天河与南沙小学初中信息
    [转] 运维知识体系 -v3.1 作者:赵舜东(赵班长)转载请注明来自于-新运维社区:https://www.unixhot.com
    git 合并commit操作实例 merge --squash 选项 和 git rebase
    Ansible变量嵌套解析
  • 原文地址:https://www.cnblogs.com/cnblogs-qm/p/7076690.html
Copyright © 2020-2023  润新知