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;
原文地址:https://www.cnblogs.com/64Byte/p/12709232.html