首页 > 数据库 >无涯教程-PL/SQL - 变量声明

无涯教程-PL/SQL - 变量声明

时间:2023-12-22 13:31:28浏览次数:42  
标签:CUSTOMERS 变量 INTO 无涯 SQL NULL PL

在本章中,无涯教程将讨论Pl/SQL中的变量,变量不过是无涯教程程序可以操作的存储区域的名称。

变量声明

PL/SQL变量必须在声明部分或程序包中声明为全局变量,声明变量时,PL/SQL为变量的值分配内存,并且存储位置由变量名标识。

variable_name [CONSTANT] datatype [NOT NULL] [:= | DEFAULT initial_value] 

其中, variable_name 是PL/SQL中的有效标识符, datatype 必须是有效的PL/SQL数据类型,一些有效的变量声明及其定义如下所示-

sales number(10, 2); 
pi CONSTANT double precision := 3.1415; 
name varchar2(25); 
address varchar2(100);

当您为数据类型提供大小,比例或精度限制时,它称为约束声明,约束声明比无约束声明需要更少的内存。如-

sales number(10, 2); 
name varchar2(25); 
address varchar2(100); 

初始化变量

每当您声明变量时,PL/SQL都会为其分配默认值NULL,如果要使用非NULL值初始化变量,则可以在声明期间使用以下任一方法进行初始化-

  • DEFAULT 关键字

  • assignment 运算符

counter binary_integer := 0; 
greetings varchar2(20) DEFAULT 'Have a Good Day';

您还可以使用 NOT NULL 约束指定变量不应具有 NULL 值,如果使用NOT NULL约束,则必须为该变量显式分配一个初始值。

尝试以下示例,该示例利用各种类型的变量-

DECLARE 
   a integer := 10; 
   b integer := 20; 
   c integer; 
   f real; 
BEGIN 
   c := a + b; 
   dbms_output.put_line('Value of c: ' || c); 
   f := 70.0/3.0; 
   dbms_output.put_line('Value of f: ' || f); 
END; 
/

执行以上代码后,将产生以下输出-

Value of c: 30 
Value of f: 23.333333333333333333  

PL/SQL procedure successfully completed. 

变量范围

PL/SQL允许嵌套块,即每个程序块可以包含另一个内部块,如果在内部块中声明了变量,那么外部块将无法访问该变量。可变范围有两种类型-

  • Local variables   - 在内部块中声明且外部块无法访问的变量。

  • Global variables - 在最外面的块或包中声明的变量。

以下示例以简单形式显示了 Local 和 Global 变量的用法-

DECLARE 
   -- Global variables  
   num1 number := 95;  
   num2 number := 85;  
BEGIN  
   dbms_output.put_line('Outer Variable num1: ' || num1); 
   dbms_output.put_line('Outer Variable num2: ' || num2); 
   DECLARE  
      -- Local variables 
      num1 number := 195;  
      num2 number := 185;  
   BEGIN  
      dbms_output.put_line('Inner Variable num1: ' || num1); 
      dbms_output.put_line('Inner Variable num2: ' || num2); 
   END;  
END; 
/

执行以上代码后,将产生以下输出-

Outer Variable num1: 95 
Outer Variable num2: 85 
Inner Variable num1: 195 
Inner Variable num2: 185  

PL/SQL procedure successfully completed. 

赋值给变量

您可以使用SQL的 SELECT INTO 语句将值分配给PL/SQL变量,对于 SELECT列表中的每个项目,在 INTO列表中必须有一个对应的,类型兼容的变量,以下示例说明了该概念。让无涯教程创建一个名为CUSTOMERS的表-

(有关SQL语句,请参阅SQL教程 )

CREATE TABLE CUSTOMERS( 
   ID   INT NOT NULL, 
   NAME VARCHAR (20) NOT NULL, 
   AGE INT NOT NULL, 
   ADDRESS CHAR (25), 
   SALARY   DECIMAL (18, 2),        
   PRIMARY KEY (ID) 
);  

Table Created  

现在让无涯教程在表中插入一些值-

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) 
VALUES (1, 'Ramesh', 32, 'Ahmedabad', 2000.00 );  

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) 
VALUES (2, 'Khilan', 25, 'Delhi', 1500.00 );  

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) 
VALUES (3, 'kaushik', 23, 'Kota', 2000.00 );
  
INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) 
VALUES (4, 'Chaitali', 25, 'Mumbai', 6500.00 ); 
 
INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) 
VALUES (5, 'Hardik', 27, 'Bhopal', 8500.00 );  

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) 
VALUES (6, 'Komal', 22, 'MP', 4500.00 ); 

以下程序使用SQL的 SELECT INTO子句将上表中的值分配给PL/SQL变量-

DECLARE 
   c_id customers.id%type := 1; 
   c_name  customers.name%type; 
   c_addr customers.address%type; 
   c_sal  customers.salary%type; 
BEGIN 
   SELECT name, address, salary INTO c_name, c_addr, c_sal 
   FROM customers 
   WHERE id = c_id;  
   dbms_output.put_line 
   ('Customer ' ||c_name || ' from ' || c_addr || ' earns ' || c_sal); 
END; 
/

执行以上代码后,将产生以下输出-

Customer Ramesh from Ahmedabad earns 2000  

PL/SQL procedure completed successfully

参考链接

https://www.learnfk.com/plsql/plsql-variable-types.html

标签:CUSTOMERS,变量,INTO,无涯,SQL,NULL,PL
From: https://blog.51cto.com/u_14033984/8934817

相关文章

  • (亲测)CENTOS 7.9 yum 安装mysql
    CENTOS7安装mysql1、下载MySQL官方的YumRepositorywget-i-chttp://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm2、安装Repositoryyum-yinstallmysql57-community-release-el7-10.noarch.rpm3、更新过期的证书rpm--importhttps://repo.mysq......
  • 无涯教程-PL/SQL - 环境设置
    在本章中,无涯教程将讨论PL/SQL的环境设置,PL/SQL不是独立的编程语言,它是Oracle编程环境中的工具,SQL*Plus是一个交互式工具,可让您在命令提示符下键入SQL和PL/SQL语句,然后将这些命令发送到数据库进行处理,处理完语句后,输出将发送回并显示在屏幕上。要运行PL/SQL程序,您应该在计......
  • 无涯教程-PL/SQL - 简介
    PL/SQL(ProceduralLanguage/SQL)是甲骨文公司专有的SQL扩展语言,应用在甲骨文公司的Oracle数据库系统。一些的SQL数据库管理系统也提供了类似的扩展SQL语言。PL/SQL的的语法非常类似于Ada,而且像1980年代的Ada编译器一样,PL/SQL的运作系统使用Diana作为中介语言。重要的是PL/SQL紧密......
  • Centos中安装Python3的mysqlclient库
    问题系统是centos7需要在python3中安装mysqlclient库使用pip3installmysqlclient然后无法安装报错Lookinginindexes:https://pypi.douban.com/simple/CollectingmysqlclientUsingcachedhttps://mirrors.cloud.tencent.com/pypi/packages/37/fb/d9a8f763c84f1e7......
  • 本地安装mysql (zip)
    下载https://downloads.mysql.com/archives/community/解压到文件夹且添加系统环境变量C:\Dinstall\Dmysql\mysql-8.2.0-winx64C:\Dinstall\Dmysql\mysql-8.2.0-winx64\bin在安装目录下创建并配置初始化的my.ini[mysqld]#skip-grant-tables#密码错误就用这个,不用密码......
  • MYSQL优化之索引(index)
    MYSQL优化之索引(index)-语法认知篇一、索引概述1.什么是索引索引是一种单独的、存储在磁盘上的数据库结构,包含对数据表中所有记录的引用指针。它的作用就相当于书籍的目录,可以加快对数据的查询速度2.索引的优点可以大大加快数据的检索速度可以保证数据库表中每行数据的唯......
  • SQLAlchemy scoped_session
    SQLAlchemyscoped_session本身session不是线程安全的。 https://docs.sqlalchemy.org/en/14/orm/contextual.htmlTheobjectisthescoped_sessionobject,anditrepresentsaregistryofSessionobjects.Ifyou’renotfamiliarwiththeregistrypattern,ago......
  • (六)Playwright
    what微软产品前身是puppewhy支持移动端快速可靠运行自定义运行异步运行支持CDP协议(selenium支持https协议) Howtoinstallplaywright 环境 pip install playwright【相当于各个浏览的驱动】#ffmeg playwright installchromium  pla......
  • element-plus的type类型为daterange的时候限制时间选择
    对于ElementPlus的日期时间范围选择组件(el-date-picker的type设置为"daterange"),你可以使用:picker-options属性来设置选项,通过disabledDate函数来禁止选择当前时间之前的日期。下面是一个el-date-picker(type为"daterange")的示例,它禁止选择今天之前的日期:<el-date-......
  • 无涯教程-Haskell - Nested if-else 语句函数
    以下代码显示了如何在Haskell中使用嵌套的if-else语句-main=doletvar=26ifvar==0thenputStrLn"Numberiszero"elseifvar`rem`2==0thenputStrLn"NumberisEven"elseputStrLn"NumberisOdd"在上面的示例中......