• oracle 11g 学习笔记 11_4


    pl/sql基础
    1、pl/sql概念
    pl/sql(procedural language/sql)是oracle在标准的sql语言上的扩展。pl/sql不仅允许嵌入sql语言,还可以定义变量和常量,允许使用条件语句和循环语句,允许使用例外处理各种错误,这样使得它的功能变得更加强大。


    .编写一个存储过程,该过程可以向某表中添加记录
    1. 创建一个简单表
    create table mytest(name varchar2(30),passwd varchar2(30));
    2. 创建存储过程
    create or replace procedure sp_pro2 is 
    begin
    --执行部分
    insert into mytest values('pangzi','m123');
    end;


    replace:
    如何查看错误信息:show error;
    如何调用
    1)exec 过程名(参数值1,参数值2...)
    2)call 过程名(参数值1,参数值2...)
    二、变量,复合类型
    1、变量
    1.标量(scalar)
    pl/sql块为变量赋值不同于其它编程语言,需要在等号前加冒号( := );
    --案例
    --输入员工号,显示雇员姓名、工资、个人所得税(税率为0.03)
    declare
    v_name emp.ename%type;
    v_sal emp.sal%type;
    v_tax_sal number(7,2);--个人所得税
    c_tax_rate number(7,2) :=0.03; --给税率赋值
    begin 
    select ename, sal into v_name, v_sal from emp where empno=&no;
    --计算所得税
    v_tax_sal :=v_sal*c_tax_rate;
    --打印
    dbms_output.put_line('雇员姓名:'||v_name ||' 工资:'||v_sal ||' 个人所得税:' ||v_tax_sal);
    end;

    2。复合变量
    符合变量用于存放多个值的变量,主要包括这几种:
    pl/sql 记录
    pl/sql 表
    嵌套表

    i.记录
    记录类似于高级语言中的结构体,当引用pl/sql记录成员时,引用的规则是:记录变量.记录成员
    --案例2
    --定义一个记录类型,用来存放雇员姓名,工资,工作
    --
    eclare 
    type emp_record_type is record(
            name emp.ename%type,
            salary emp.sal%type,
            myJob emp.job%type
    );
    --定义一个是emp_record_type 类型的变量sp_record
    sp_record emp_record_type;
    begin
      --执行
      select ename,sal,job into sp_record from emp where empno =&no;
      --打印信息
      dbms_output.put_line(
           '雇员姓名:' ||sp_record.name ||' 工资:'||sp_record.salary ||' 工作是:'||sp_record.myJob);
    end;

    2.表
    表类似于高级语言中的数组,但是需要注意的是在高级语言中数组的下表不能为负,而pl/sql是可以为负数的,并且表元素的下表没有限制.
    --案例3
    --定义一个pl/sql表类型sp_table_type
    declare 
    type sp_table_type is table of emp.ename%type
    index by binary_integer;--表的下标是正数
    --定义一个sp_table 类型是sp_table_type
    sp_table sp_table_type;
    begin 
      select ename into sp_table(-1) from emp where empno =7788;
      --输出
      dbms_output.put_line('雇员姓名:' ||sp_table(-1));
    end;

    3.参照变量--ref cursor 游标变量
    使用游标时,当定义游标时不需要指定的select语句,但是当使用游标时(open时)需要指定select语句,这样一个游标就与一个select语句结合了。
    --实例4
    --编写一个块,可以输入部门号,并显示该部门所有员工姓名和他的工资
    --如果某个员工的工资低于200元,就添加100元
    declare
    --定义游标sp_emp_cursor
    type sp_emp_cursor is ref cursor;
    --定义一个游标变量
    test_cursor sp_emp_cursor;
    --定义变量,用于存储员工姓名和工资
    v_ename emp.ename%type;
    v_sal emp.sal%type;
    --emp.sal%type 表示的是v_sal的类型和emp表的sal的类型一样.
    begin 
    --执行部分
    open test_cursor for select ename,sal from emp where deptno =&no;
    --循环取出
    loop
    --取出并放入变量
    fetch test_cursor into v_ename,v_sal;
    --循环结束条件是
    exit when test_cursor%notfound;
    --输出
    dbms_output.put_line('雇员姓名:'||v_ename||'工资:'||v_sal);
    end loop;
    end;

    
    
    
    
    
    
    
    
    
    
    
    
    
  • 相关阅读:
    C语言之逻辑运算符
    iOS:实现图片的无限轮播---之使用第三方库SDCycleScrollView
    Mac 环境下svn服务器的配置
    ld: warning: directory not found for option 去掉警告的方法
    Mac怎么设置wifi热点
    如何获取AppStore软件安装包的路径
    四种卸载Mac软件的方法
    UIAlertController
    uiview关联xib
    OC学习篇之---文件的操作
  • 原文地址:https://www.cnblogs.com/tgxblue/p/4217428.html
Copyright © 2020-2023  润新知