欢迎投稿

今日深度:

Oracle数据中的PL/SQL介绍

Oracle数据中的PL/SQL介绍


什么是Pl/SQL:

  • --PL/SQL的写法
    declare
      /*申明部分:在此申明PL/SQL用到的变量,类型及游标,以及局部存储过程和函数*/
      str varchar2(20);
      i number;
    begin
      /*执行部分:过程及SQL语句,即程序的主要部分*/
      str :='Hello Oracle';
      i:='aa';
      dbms_output.put_line(str);
    exception
     /*执行异常部分:错误处理*/
     when others then
     dbms_output.put_line('错误');
    end;

  • declare
     str varchar2(10):='Hello ';/*定义时赋值*/
     str2 varchar2(10);
     i constant number:=100;/*定义常量,但是必须在申明时赋值*/
    begin
      
      str2:= 'Oracle';/*在begin中赋值*/
      dbms_output.put_line(str||str2);/*\\是Oracle的连接符*/
      dbms_output.put_line(i);
    exception 
      when others then
        dbms_output.put_line('出错了');
    end;

    • declare
       v_stu_id number;
       v_stu_name varchar2(10);
       v_stu_age number;
      begin
       select stu_id,stu_name,stu_age 
        into v_stu_id,v_stu_name,v_stu_age/*这里查询出来要赋值给变量*/
       from tab_stu; 
      end;

    • declare
       v_stu_id number;
       v_stu_name varchar2(10);
       v_stu_age number;
      begin
       select stu_id,stu_name,stu_age 
        into v_stu_id,v_stu_name,v_stu_age
       from tab_stu
       where stu_id=1;
       dbms_output.put_line('stu_id:'||v_stu_id);
       dbms_output.put_line('stu_name:'||v_stu_name);
       dbms_output.put_line('stu_age:'||v_stu_age);
       end;
      stu_id:1
      stu_name:张三
      stu_age:21

    •  --插入
       declare
       
       begin
            insert into tab_stu(stu_id,stu_name,stu_age) values(4,'赵六','22');  
            commit;/*记得提交*/
       end;

      • --%type的使用
        declare
        v_stu_id tab_stu.stu_id%type;
        v_stu_name tab_stu.stu_name%type;
        v_stu_age tab_stu.stu_age%type;
        begin
            select stu_id,stu_name,stu_age
            into v_stu_id,v_stu_name,v_stu_age
            from tab_stu
            where stu_id=1;
            dbms_output.put_line('stu_id:'||v_stu_id);
            dbms_output.put_line('stu_name:'||v_stu_name);
            dbms_output.put_line('stu_age:'||v_stu_age);
        end; 

      • --%rowtype的使用
        
        declare
        v_tab_stu_row tab_stu%rowtype;
        begin
            select stu_id,stu_name,stu_age
            into v_tab_stu_row.stu_id,v_tab_stu_row.stu_name,v_tab_stu_row.stu_age
            from tab_stu
            where stu_id=2;
            dbms_output.put_line('stu_id:'||v_tab_stu_row.stu_id);
            dbms_output.put_line('stu_name:'||v_tab_stu_row.stu_name);
            dbms_output.put_line('stu_age:'||v_tab_stu_row.stu_age); 
        end;
        
        第二种用法
        --%rowtype的使用
        declare 
        v_tab_stu_row tab_stu%rowtype;
        begin
          select * 
          into v_tab_stu_row
          from tab_stu
          where stu_id=3;
          dbms_output.put_line('stu_id:'||v_tab_stu_row.stu_id);
          dbms_output.put_line('stu_name:'||v_tab_stu_row.stu_name);
          dbms_output.put_line('stu_age:'||v_tab_stu_row.stu_age); 
        end;

  • --可变数组的使用varray
    declare
     type strings is varray(6) of varchar(10);--这里其实就像定义了一个对象
     var_array strings:=strings('张三','孙八','孙七','赵六','王五','李四');--这里就是这个对象的具体实现,和定义
    begin
      dbms_output.put_line(var_array(1));
      dbms_output.put_line(var_array(2));
      dbms_output.put_line(var_array(3));
      dbms_output.put_line(var_array(4));
      dbms_output.put_line(var_array(5));
      dbms_output.put_line(var_array(6));
    end;
    输出
    张三
    孙八
    孙七
    赵六
    王五
    李四

  • --可变数据类型table
    declare 
      type tableStrings is table of varchar2(10)
      index by binary_integer;--定义table类型的下标是二进制类型的无限增长的
      var_table tableStrings;--为定义好的类型,定义一个变量
    begin
      var_table(1):='Hello';--为变量的索引赋值
      var_table(999):='Word';--为变量的索引赋值
      dbms_output.put_line(var_table(1)||' '||var_table(999));
    end;
    输出:Hello Word
  • --可变数据类型table的使用2
    declare
     type table_row is table of tab_stu%rowtype
     index by binary_integer;
     var_tab_stu table_row;
    begin
      select stu_id,stu_name 
      into var_tab_stu(100).stu_id,var_tab_stu(100).stu_name
      from tab_stu
      where stu_id=2;
      dbms_output.put_line(var_tab_stu(100).stu_id ||' '|| var_tab_stu(100).stu_name);
    end;
    输出:2 李四
  • --record理解为Java中的集合
    declare
     type v_record is record(
          re_id number,--可以是普通变量
          re_name tab_stu.stu_name%type,--可以是表中的一个字段的变量
          r_tab_stu tab_stu%rowtype--也可以是表中的一行
     );
     v_r v_record;--需要赋给变量在使用时
    begin
      select stu_id,stu_name,stu_age
      into v_r.re_id,
      v_r.re_name,
      v_r.r_tab_stu.stu_age
      from tab_stu
      where stu_id=1;
      dbms_output.put_line(v_r.re_id);
      dbms_output.put_line(v_r.re_name);
      dbms_output.put_line(v_r.r_tab_stu.stu_age);
    end;



www.htsjk.Com true http://www.htsjk.com/shujukunews/91.html NewsArticle Oracle数据中的PL/SQL介绍 什么是Pl/SQL: --PL/SQL的写法declare /*申明部分:在此申明PL/SQL用到的变量,类型及游标,以及局部存储过程和函数*/ str varchar2(20); i number;begin /*执行部分:过程及...
评论暂时关闭