plsql 过程化(procedure)sql

一.常见的访问oracle的技术
  plsql  过程化(procedure)sql    存储过程
  proc/proc++  使用c或者c++ 来访问oracle
  odbc/ado     vc中访问数据库的技术
  oci          oracle提供的底层接口
  sqlj/jdbc    java 访问数据库的技术
 
二.plsql 的特点
   结构化 模块化编程
   良好的可维护性
   良好的可移植性 (同类型)
   不便于向异构数据库移植
   提升系统性能
三.plsql 扩展了sql
   变量和类型
   控制语句
   函数和过程
   对象和方法
四.plsql 程序结构
   declare
       /* 申明区
          声明变量  定义类型 */
   begin
       /* 执行区
          执行sql 语句 或者 plsql语句 */
   exception
       /* 异常处理区
          处理异常   */
   end;
   /      
   
五.第一个plsql程序
   begin
       dbms_output.put_line('hello plsql!');
   end;
   /
   
   设置输出为打开状态
   set  serveroutput on
   
   开发工具:
   命令行:sqlplus
   图形化:windows  plsqldeveloper
                   sqlprogramer
   标示符:给变量  类型  游标 过程 函数 等命名的
                     
 六 变量
    6.1 如何声明变量
    declare
        变量名    类型;
    begin
      
    /* 如果一个变量没有赋值 则值为NULL */                  
    declare
        var_id    number;
        var_name  varchar2(30);
    begin
        DBMS_OUTPUT.PUT_LINE(var_id||':'
            ||var_name);
    end;
    /      
                   
   6.2 plsql如何给变量赋值 和 初始化都是
       用 :=
    declare
        var_id    number:=0;
        var_name  varchar2(30):='a';
    begin
        var_id:=100;
        var_name:='test';
        DBMS_OUTPUT.PUT_LINE(var_id||':'
            ||var_name);
    end;
    /                 
   6.3 变量的数据类型
    标量类型: number  char  varchar2 date
              binary_integer   boolean
                                
    组合类型:record   table  cursor
    参考类型:ref  cursor
    大类型:BLOB  CLOB   BFILE
    (存储数据的位置  varchar2)
  6.4  binary_integer   boolean
    declare
        var_ind   binary_integer;
        var_f     boolean;
    begin
        var_ind:=1000;
        /* var_f:=false; */
        var_f:=true;
        if   var_f  then
            dbms_output.put_line(var_ind);
        end if;
    end;
    /
  6.5 变量的修饰
     constant   类型   not null
    declare
        var_name   varchar2(30)  not null:='gg';
        var_salary constant number:=10000;
    begin
        var_name:='hello';
        -- var_salary:=10001;
        dbms_output.put_line(var_name||':'||
        var_salary);
    end;
    /  
  6.6  写一个plsql  定义两个变量  分别和s_emp
  表中 first_name 和salary字段的类型相同。然后
  把id=1 的first_name 和 salary 分别赋值给这
  两个变量。打印这两个变量的值。
  declare
      var_name   varchar2(25);
      var_sal    number(11,2);
  begin
      var_name:='Carmen';
      var_sal:=1600;
      dbms_output.put_line(var_name||':'
      ||var_sal);
  end;
  /
 6.7  表名.字段名%type  可以直接获取表的字段
      对应的类型。
      可以使用sql 语句 对变量进行赋值。
  declare
      var_name   s_emp.first_name%type;
      var_sal    s_emp.salary%type;
  begin
      select  first_name,salary
          into var_name,var_sal
          from  s_emp
              where id=25;
      dbms_output.put_line(var_name||':'
      ||var_sal);
  end;
  /         
 6.8  类似于c语言 结构体的类型  record类型
    6.8.1 语法
    type   类型名  is  record(
        字段名    类型,
        字段名    类型,
        字段名    类型
    );   
    变量名    类型名;
    6.8.2 把s_emp 表的id,first_name,salary
    包装成一个记录类型。然后把id=2 相关数据
    放入这个记录类型的变量中。然后输出这个
    变量的值。
    declare
        /* 定义一个记录类型 */
        type  emptype is record(
            id     s_emp.id%type,
            name   s_emp.first_name%type,
            salary s_emp.salary%type
        );
        var_emp   emptype;
    begin
        select  id,first_name,salary into var_emp
            from s_emp
                where  id=2;
        dbms_output.put_line(var_emp.id||':'||
        var_emp.name||':'||var_emp.salary);        
    end;
    /
    
   6.8.3 记录类型之间的赋值
    declare
        /* 定义一个记录类型 */
        type  emptype is record(
            id     s_emp.id%type,
            name   s_emp.first_name%type,
            salary s_emp.salary%type
        );
        var_emp    emptype;
        var_emp1   emptype;
    begin
        select  id,first_name,salary into var_emp1
            from s_emp
                where  id=2;
        /* 整体赋值        
        var_emp:=var_emp1;   */  
        /* 选择部分字段赋值 */
        var_emp.name:=var_emp1.name;
        var_emp.salary:=var_emp1.salary;     
        dbms_output.put_line(var_emp.id||':'||
        var_emp.name||':'||var_emp.salary);        
    end;
    /
   6.8.4  如果查询字段数据 少于记录类型字段数
    declare
        /* 定义一个记录类型 */
        type  emptype is record(
            id     s_emp.id%type,
            name   s_emp.first_name%type,
            salary s_emp.salary%type
        );
        var_emp   emptype;
    begin
        select  first_name,salary
            into var_emp.name,var_emp.salary
            from s_emp
                where  id=2;
        dbms_output.put_line(var_emp.id||':'||
        var_emp.name||':'||var_emp.salary);        
    end;
    /        
 6.9  思考如何把s_emp 表中 id=1 的所有信息放入
    一个记录类型的变量中?
    表名%rowtype  获得表的一行对应的类型
    s_dept%rowtype
    s_emp%rowtype
    %rowtype 获取的类型 和 表头中字段名 和 字段
    的顺序完全相同。
    declare
        var_emp   s_emp%rowtype;
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值