• pl/sql简单执行记录个人学习记录


    set SERVEROUTPUT ON --运行这个才有结果,否则书写plsql代码没有输出结果
    --declare
      --声明的变量、类型、游标
    begin
      --程序执行部分(类似main()方法)
      dbms_output.put_line('hello word');--相当于Console.WriteLine
    --exception
      --针对于begin块中出现的异常,提供处理机制
      --when...then...
    end;
    declare
      --记录类型
      type a_record is record(
          v_col1_key1 varchar2(20),
          v_col1_key2 zzznew.key%type
      );
      v_col1_key1 varchar2(20):=0;--手动设置数据类型(默认取0)
      v_col1_key2 zzznew.key%type;--设置数据类型和某张表字段的数据类型相同
      v_a_record a_record;
    begin
      select col1 into v_col1_key1 from zzznew where key='1' ;
      select col1 into v_col1_key2 from zzznew where key='2';
      dbms_output.put_line(v_col1_key1||'<.>'||v_col1_key2);
       --使用记录类型
      select col1,col2 into v_a_record from zzznew where key='1';
      dbms_output.put_line(v_a_record.v_col1_key1||'<O>'||v_a_record.v_col1_key2);
    end;
    declare
      v_zzznew_record zzznew%rowtype;--整行记录
      v_key zzznew.key%type :='';
    begin
      select * into v_zzznew_record from zzznew where key='1';
      dbms_output.put_line(v_zzznew_record.col1||','||v_zzznew_record.col2);
    end;

    --pl/sql学习

    if... then ... elsif... then... else... en if;

     

    loop

     循环用while

    --2~100之间的质数
    declare
      v_i number(3):=2;
      v_j number(3):=2;
      v_flag number(1):=1;
    begin
      while v_i<=100 loop
        v_j:=2;
        while v_j<=sqrt(v_i) loop
          if v_i mod v_j=0 then v_flag:=0;
          end if;
          v_j:=v_j+1;
        end loop;
        if v_flag=1 then dbms_output.put_line(v_i);
        end if;
        v_i:=v_i+1;  
        v_flag:=1;
      end loop;
    end;

     

     goto

     

    游标

    declare
      --定义变量
      v_zzznew_key zzznew.key%type;
      --定义游标
      cursor zzznew_key_coursor is select key from zzznew;
    begin
      --打开游标
      open zzznew_key_coursor;
      --提取游标
      fetch zzznew_key_coursor into v_zzznew_key;--相当于迭代地的next
      while zzznew_key_coursor%found loop --found相当于迭代器中hasnext()
        dbms_output.put_line(v_zzznew_key);
        fetch zzznew_key_coursor into v_zzznew_key;
      end loop;
      --关闭游标
      close zzznew_key_coursor;
    end;

     

     游标推荐使用for循环,因为不需要打开、提取和关闭,在for里会自动的帮我们实现

     看来游标使用还是for循环好,非常简洁,但是使用while将更加清晰

     --按条件更新c

    update zzznew set c=c+(case when c>10 then 1 when c<=10 then -1 else null end)
    begin
      update zzznew set c=c+1 where c>10; 
      update zzznew set c=c-1 where c<=10; 
    end;
    begin
      update zzznew set c=c+(case when c>10 then 1 when c<=10 then -1 else null end);
    end;

    --游标其他的没记录,使用的时候去百度吧

    接下来记录存储过程(没有返回值)与存储函数(有返回值)

    --存储函数:

    create or replace function ceshi(nu number) return varchar2 
    is
      v_num number;
    begin
      if nu>10 then v_num:=1;
      else v_num:=0;
      end if;
      return to_char(v_num);
    end;
    select ceshi(11) from dual --方法一
    begin
      DBMS_OUTPUT.PUT_LINE(ceshi(11));  --方法二
    END;

     使用:select get_sal(101) from dual;--获取101部门工资总和

    OUT参数

    【in】【out】【in out】

    in相当于ref(默认)

    out相当于out

    in out相当于ref与o

     

     例子

     

     通过以上例子可以看出,out这种一般都是在pl/sql中可以输出,使用基本sql还找不出来

  • 相关阅读:
    设置光盘为yum源
    oracle11G的安装历程
    数据备份系统治理方案
    设置 MySql 数据同步
    让MySQL与OpenOffice共舞
    My SQL数据库引擎疾速指导1
    MySQL就事器知名网站中的运用量
    MySQL 5.0 新特征教程 存储历程:第三讲
    解决MySQL数据库作古掉以及谢绝任事的办法
    Sun公司将引进新的API对MySQL休止功能调停
  • 原文地址:https://www.cnblogs.com/ningxinjie/p/12786161.html
Copyright © 2020-2023  润新知