zoukankan      html  css  js  c++  java
  • Oracle--pl/sql编程-语法

    pl/sql编程: 只适用于Oracle

    标准sql: insert, update,delete,select 不能进行分支, 循环,变量...
     Oracle在标准SQL基础上,扩展, 扩展的叫做PLSQL,
    一个PL/SQL 包含一组SQL语句, 简单的理解: 类似于java的方法, 进行异常处理
    跨数据库,移植不好

        效率高, 推荐使用PL/SQL( 存储过程), 跨数据库,移植性不好
        SQL 语句, 效率相对于PL/SQL 低, 跨数据库的移植性好


    PL/SQL 分类:
      1. 匿名PL/SQL 没有名字, 这个PL/SQL不会保存到数据库
      2. 存储过程: 有名称, 存储过程保存到数据库, 没有返回值
      3. 函数: 有名称, 存储过程保存到数据库, 有返回值

    *默认关闭显示输出结果, 使用下面sql语句打开(set serveroutput on;)

    匿名的PL/SQL块

    /*
      语法:
          [declare]     
              --声明部分,声明变量,类型,游标,以及局部存储过程和函数   可选
           begin    --相当于java方法的左大括号, 开始
               --  执行部分,   过程,sql语句
          [exception]      
                --异常处理部分, 异常处理  可选
          end; -- 相当于java方法的右大括号 ,结束
    */
    
    -- 编写一个输出helloworld的pl/sql
    --不使用变量,begin
       --输出:   dbms_output.put_line('')   
       dbms_output.put_line('hello world');
    end;

    变量

    定义变量的语法:
      变量名 数据类型 [:= 值];

    注意:

    1. 变量的赋值符号是 :=
    2. 数据类型: char,varchar2 一定要写长度, char(20)
    3. 变量名使用: 字母,数字, 下划线,$,#
    4. 变量名只能使用字母开头 name name# name$ $name(错误)
    5. 变量名最大长度30
    6. 变量名不能使用关键字
    7. 变量声明只能在declare中声明,不能再begin中

    实际返回的行数超出请求的行数:   变量只能存储一行结果,  查询返回的多行数据,使用游标

    输入&   ( 变量名 := '&请输入员工部门编号';)

    declare
       str varchar2(30) := 'hello world';
    begin
       --输出:   dbms_output.put_line('')   
       dbms_output.put_line(str);
       
       --修改变量的值
       str := 'hello  PL/SQL';
       dbms_output.put_line(str);
    end;

    变量的赋值

       1) := 值; 固定值 

       2) select 列名 into 变量名 from  表 .....  从表查询到数据赋值给变量

    -- 根据员工编号, 打印员工的姓名
    --使用select  into
    declare 
       v_name varchar2(30);
       v_empno number;
    begin
        --查询表赋值
        -- 输入
        v_empno := '&请输入员工编号';
        select ename into v_name from emp where empno = v_empno ;
        dbms_output.put_line('编号为'||v_empno||'的员工姓名:' || v_name);
    
    end;

    变量的高级数据类型:

    %type: 定义变量的数据类型与表某一列的数据类型一样
    表名.列名%type;

    declare 
       v_name emp.ename%type;  --v_name变量的数据类型与emp表的ename列的数据类型一样
       v_empno emp.empno%type;
    begin
        --查询表赋值
        -- 输入
        v_empno := '&请输入员工编号';
        select ename into v_name from emp where empno = v_empno ;
        dbms_output.put_line('编号为'||v_empno||'的员工姓名:' || v_name);
    end;

    %rowtype  行数据类型

    --根据员工编号,打印员工的所有信息
    --行数据类型:  这个变量存放一行数据,类似于map集合,  js中对象
    --%rowtype用于定义不确定的类型的变量,%rowtype可以理解成对数据库中表的某一行记录的一个拷贝,使用方式
    --  表名%rowtype;
    
    declare 
       v_empno emp.empno%type;
       v_emp emp%rowtype;
    begin
        --查询表赋值
        -- 输入
        v_empno := '&请输入员工编号';
        select * into v_emp from emp where empno = v_empno ;
        --dbms_output.put_line('编号为'||v_empno||'的员工姓名:' || v_name);
        -- 获取行中某一列的数据,   行变量.列名
        dbms_output.put_line('编号为'||v_empno||'的员工姓名:' || v_emp.ename 
                            ||',薪水:'||v_emp.sal);
    end;
  • 相关阅读:
    [Tips] Resolve error: server certificate verification failed.
    [Tips] bzr Import error
    NPAPI命休矣
    [Buzz Today]2013.08.18
    [Tips]Fix node.js addon build error: "gyp: binding.gyp not found"
    The.first.glance.at.linux.commands
    [Idea Fragments]2013.08.08
    Linux利器:WinSCP,Putty,pscp和psftp
    本博客已经迁移去http://blog.brightwang.com/
    将博客搬至CSDN
  • 原文地址:https://www.cnblogs.com/64Byte/p/12709232.html
Copyright © 2011-2022 走看看