美文网首页
PL/SQL中的变量

PL/SQL中的变量

作者: 滴滴滴9527 | 来源:发表于2018-06-18 17:05 被阅读0次

在所有的编程语言中,变量的使用是肯定都会有的,PL/SQL作为面向过程的数据库编程语言同样少不了变量,利用变量可以把PL/SQL块需要的参数传递进来,做到动态执行程序,同时也可以把值传递出去返回给用户.

product表

一、语法结构

1、变量声明语法结构

variable_name  datatype
[
    [not null]
    { := default | expr}
]

variable_name:变量名
datatype:变量数据类型,PL/SQL是一门强类型语言,使用变量、常量时必须先声明类型
not null:非空约束,使用之后必须为变量赋初始值
:= default | expr:指定变量的初始值,或者指定变量初始值的表达式(可以是文本值、其它变量、函数等)

2、常量声明语法结构

const_name  constant datatype
[
    [not null]
    { := default | expr}
]

常量定义和变量很相似,主要是通过关键字constant表明这是一个常量.
const_name:常量名
constant :表示是常量

二、变量和常量的数据类型

变量和常量的数据类型可以概括为三类:
标量类型:单一类型,不存在组合
复合类型:由几种单一类型组合而成的
参照类型:主要有游标、对象类型

1、标量类型

标量类型是我们最常用的,主要有下面几个:

数字类型
number(p,s)
                          
字符类型
char、varchar2、nchar、nvarchar2、long

日期类型
date、timestamp

布尔类型 (表中的字段不能使用布尔类型,但是PL/SQL中可以)
boolean

%type类型     
根据已有的变量数据类型或者数据库表中字段的类型

这里只列出常用的一些标量类型,下面举例演示:

declare 
  v_pid       product.pid%type;
  v_name      varchar2(20);
  v_price     number(8,2);
  v_num       number(10);
  v_address   v_pid%type;
  v_cid       varchar(36); 

  c_desc      constant varchar2(20) := '测试常量';
  v_date      date  := sysdate;
  
begin
  select p.pid, p.name, p.price, p.num, p.address, p.cid
    into v_pid, v_name, v_price, v_num, v_address, v_cid
    from product p
    where p.pid = '1';
  
  DBMS_OUTPUT.PUT_LINE('商品id:'   || v_pid);
  DBMS_OUTPUT.PUT_LINE('商品名称:' || v_name);
  DBMS_OUTPUT.PUT_LINE('商品价格:' || v_price);
  DBMS_OUTPUT.PUT_LINE('商品数量:' || v_num);
  DBMS_OUTPUT.PUT_LINE('商品生产地址:' || v_address);
  DBMS_OUTPUT.PUT_LINE('商品分类id:'   || v_cid);
  DBMS_OUTPUT.PUT_LINE('常量:' || c_desc);
  DBMS_OUTPUT.PUT_LINE('时间:' || v_date);
end;
/

2、复合类型

复合类型主要有:记录类型、表类型、varray类型
1)记录类型

形式1:
TYPE  type_name IS RECORD   --声明记录类型
(   
  variable_name1  datatype1,
  variable_name2  datatype2,
  ...
);
variable_name  type_name;   --记录类型变量
示例:
declare
    TYPE product_rec IS RECORD  
    (
        v_name  varchar2(20),
        v_price number(8,2)
    );
    v_product   product_rec;         
                        
begin
    select p.name, p.price
        into v_product
        from product p
        where p.pid = '1';
    
        DBMS_OUTPUT.PUT_LINE('商品名称:' || v_product.v_name);
        DBMS_OUTPUT.PUT_LINE('商品价格:' || v_product.v_price);
end;
/




形式2:利用 %rowtype 声明记录类型
示例:
declare
  v_product product%rowtype;
                        
begin
    select *
        into v_product
        from product p
        where p.pid = '1';
            
      DBMS_OUTPUT.PUT_LINE('商品名称:' || v_product.name);
      DBMS_OUTPUT.PUT_LINE('商品价格:' || v_product.price);
      DBMS_OUTPUT.PUT_LINE('商品数量:' || v_product.num);
      DBMS_OUTPUT.PUT_LINE('生产地址:' || v_product.address);
      DBMS_OUTPUT.PUT_LINE('商品分类:' || v_product.cid);
end;
/

2)表类型
表类型类似其它语言中的数组类型,不过PL/SQL中的表类型下标可以为负值,也可以为字符串,并且元素个数没有限制.

示例1:
declare
  TYPE name_table_type IS TABLE OF product.name%type     --声明表类型 
    INDEX BY BINARY_INTEGER;   --表明索引是数字
  name_table  name_table_type;               --定义表类型变量 
  
begin
    select name
        into name_table(-1)
        from product
        where pid = '1';
        
        DBMS_OUTPUT.PUT_LINE('商品名称:' || name_table(-1));
end;
/


示例2:
declare
  TYPE name_table_type IS TABLE OF product%rowtype     --声明表类型 
    INDEX BY BINARY_INTEGER;
  name_table  name_table_type;    --定义表类型变量 
  
begin
    select *
        into name_table(-1)
        from product
        where pid = '1';
            
      DBMS_OUTPUT.PUT_LINE('商品名称:' || name_table(-1).name);
      DBMS_OUTPUT.PUT_LINE('商品价格:' || name_table(-1).price);
      DBMS_OUTPUT.PUT_LINE('商品数量:' || name_table(-1).num);
      DBMS_OUTPUT.PUT_LINE('生产地址:' || name_table(-1).address);
      DBMS_OUTPUT.PUT_LINE('商品分类:' || name_table(-1).cid);
end;
/

示例3:
declare
  TYPE str_table_type IS TABLE OF varchar2(20)       --声明表类型 
    INDEX BY varchar2(20);          --表明索引是字符
  str_table  str_table_type;        --定义表类型变量 
  
begin
    str_table('name')  := 'GTX1080Ti';
    str_table('price') := 6000; 
    str_table('num')   := 99;    
            
      DBMS_OUTPUT.PUT_LINE('商品名称:' || str_table('name'));
      DBMS_OUTPUT.PUT_LINE('商品价格:' || str_table('price'));
      DBMS_OUTPUT.PUT_LINE('商品数量:' || str_table('num'));
end;
/

3)varray类型
该类型和数组也很相似,它的元素个数需要限制,下标是从1开始的,适合较少的数据时使用.

declare
  TYPE varr IS VARRAY(100) OF varchar2(20);    --声明varray类型
  str_array varr := varr('1','2');       --定义varray类型变量
  
begin
    str_array(1) := 'A';
    str_array(2) := 'B';     
            
        DBMS_OUTPUT.PUT_LINE(str_array(1));
    DBMS_OUTPUT.PUT_LINE(str_array(2));
end;
/

3、参照类型

1)REF CURSOR
2)REF obj_type
这两个在后面会介绍到.

相关文章

  • 引用型变量和记录型变量的使用

    PL/SQL的记录型变量和引用型变量 PL/SQL的记录型变量 举例: emp_rec emp%rowtype (...

  • PL/SQL中的变量

    在所有的编程语言中,变量的使用是肯定都会有的,PL/SQL作为面向过程的数据库编程语言同样少不了变量,利用变量可以...

  • PL/SQL数据类型——NUMBERS

    官方教程中的Working with Numbers in PL/SQL篇。 PL/SQL中的NUMBERS NU...

  • PL/SQL程序块

    最近接触到oracle的pl/sql程序块的书写,对pl/sql的语法做一些总结。它是可扩展性的SQL语言,将变量...

  • pl/sql

    PL/SQL 特点: PL/SQL是过程语言。 PL/SQL中存在过程构造和数据库访问。 在Oracle服务器和客...

  • PL/SQL

    1.什么是PL/SQL PL/SQL(Procedure Language/SQL)PL/SQL是Oracle对s...

  • 数据库Oracle常用操作

    工具: PL/SQL Developer数据库字符集: 设置系统环境变量:

  • JAVA学习笔记(PL/SQL)

    1.1什么是PL/SQL PL/SQL(ProceduralLanguage/SQL)是Oracle在标准SQL的...

  • oracle工具PL/SQL快速入门1简介

    什么是PL/SQL? PL/SQL是Oracle中使用的结构化查询语言(SQL)的扩展。 与SQL不同,PL/SQ...

  • 使用执行计划优化SQL语句

    在PL/SQL Developer中写好一段SQL代码,按F5,或者点击“执行执行计划”图标,PL/SQL Dev...

网友评论

      本文标题:PL/SQL中的变量

      本文链接:https://www.haomeiwen.com/subject/wgjgeftx.html