hive的语言元素

参考文档地址

http://www.hplsql.org/doc

数据类型

可以在HPL/SQL程序中使用以下数据类型:

数据类型描述
BIGINT / INT864位整数
BINARY_DOUBLE双精度浮点数
BINARY_FLOAT单精度浮点数
BINARY_INTEGER32位整数
BIT0、1或NULL
BOOL / BOOLEAN真或假
CHAR(n) / CHARACTER(n)固定长度字符串
DECIMAL(p,s)定点数
DATE日期(年、月和日)
DATETIME日期和时间
DOUBLE / DOUBLE PRECISION双精度浮点数
FLOAT单精度浮点数
INT / INTEGER / INT432位整数
NCHAR(n)固定长度字符串
NVARCHAR(n)变长字符串
NUMERIC(p,s)定点数
NUMBER(p,s)定点数
PLS_INTEGER32位整数
REAL单精度浮点数
RECORD任意记录
SIMPLE_DOUBLE双精度浮点数
SIMPLE_FLOAT单精度浮点数
SIMPLE_INTEGER32位整数
SMALLINT / INT216位整数
SYS_REFCURSOR游标变量
TIMESTAMP日期和时间
TINYINT8位整数
VARCHAR(n) / VARCHAR(max)变长字符串
VARCHAR2(n)变长字符串
UTL_FILE.FILE_TYPE文件句柄

数据类型转换

如果CREATE TABLE包含Hive不支持的数据类型,HPL/SQL会自动进行转换。

目前,HPL/SQL执行以下转换:

来源Hive SQL
BITTINYINT
DATETIMETIMESTAMP
INT(n)INT
INT2SMALLINT
INT4INT
INT8BIGINT
NCHAR(n)STRING
NVARCHAR(n)STRING
NUMBER(p,s)DECIMAL(p,s)
NUMERIC(p,s)DECIMAL(p,s)
TEXTSTRING
VARCHAR(MAX)STRING
VARCHAR2(n)STRING

语法声明

可以使用 DECLARE 块或语句来声明变量。

请注意,可以在单个程序中混合使用这两种语法。DECLARE 块和语句可以出现在程序的任何部分。

DECLARE 块

DECLARE 块具有以下语法:

DECLARE var 数据类型 [NOT NULL] [:= | = | 默认表达式];...
BEGIN...
END;

HPL/SQL 还允许定义一个常量:

  var 常量 数据类型 := | 默认表达式

示例:

DECLAREcode CHAR(10);status INT := 1;count SMALLINT = 0;limit INT 默认 100;  max_limit 常量 INT := 1000;
END;

兼容性: 声明块语法类似于 Oracle PL/SQL、PostgreSQL PL/pgSQL 和 Netezza NZPLSQL。

DECLARE 语句

DECLARE 语句具有以下语法:

DECLARE var [, var2, ...] [AS] 数据类型 [:= | = | 默认表达式] [, ...];

示例:

DECLARE code CHAR(10);
DECLARE status, status2 INT 默认 1;
DECLARE count SMALLINT, limit INT 默认 100;  

兼容性: 声明语句语法类似于 IBM DB2 SQL PL、Teradata、Microsoft SQL Server Transact-SQL 和 MySQL。

赋值

可以使用赋值运算符或语句在HPL/SQL中为变量设置新值。

如果在赋值之前没有明确声明变量,则会创建一个新变量,并且其数据类型将从赋值表达式中推导出来。

赋值运算符

可以使用赋值运算符 := 或 = 来设置值。

语法:

var [:= | = ] 表达式;

示例:

code := 'A';
status := 1;
count = 0;

兼容性: Oracle PL/SQL、PostgreSQL PL/pgSQL 和 Netezza NZPLSQL。

版本: PL/HQL 0.01

赋值语句

还可以使用 SET 语句为变量分配值。

语法:

SET var = 表达式 [, ...];
|
SET (var [, var2, ...]) = (表达式 [, 表达式2, ...])

示例:

SET code = 'A';
SET status = 1, count = 0;
SET (count, limit) = (0, 100);

兼容性: IBM DB2、Teradata、Microsoft SQL Server 和 MySQL。

版本: PL/HQL 0.01

从SELECT语句赋值

还可以使用 SET 语句从查询结果的第一行赋值:

语法:

SET var = (SELECTFROM ...);
|
SET (var [, var2, ...]) = (SELECT[,2, ... ] FROM ...);
|
SELECT var =[, var2 =2, ...] FROM ...  -- 自HPL/SQL 0.3.11以来

示例:

SET code = (SELECT code FROM conf WHERE name = 'A');
SET (count, limit) = (SELECT count, limit FROM conf WHERE name = 'A');
SELECT @count = count, @limit = limit FROM conf WHERE name = 'A';

兼容性: IBM DB2、Teradata、Microsoft SQL Server 和 MySQL。

版本: PL/HQL 0.3.7

Date的用法

DATE字面量允许使用’YYYY-MM-DD’格式的字符串来指定一个日期常量。然后,可以在任何需要DATE数据类型的表达式中使用这个日期值。

示例

DATE '2014-12-20'
DATE '2014-12-20' + 1    -- 结果:日期类型的2014-12-21
DATE '2014-12-20' - 1    --         2014-12-19 

兼容性: Oracle、IBM DB2 和 Teradata

版本: PL/HQL 0.01

TimeStamp的用法

TIMESTAMP字面量允许使用’YYYY-MM-DD HH:MI:SS.FFF’或’YYYY-MM-DD-HH.MI.SS.FFF’格式的字符串来指定一个时间戳常量。

可以在任何需要TIMESTAMP数据类型的表达式中使用这个时间戳值。

示例

TIMESTAMP '2015-03-03 11:39:31.123'TIMESTAMP '2015-03-03-11.39.31.123'   -- DB2语法

注意:

  • 小数部分是可选的

兼容性: Oracle、IBM DB2

版本: PL/HQL 0.03

间隔表达式

间隔表达式允许将间隔值添加或从DATE和TIMESTAMP值中减去。

语法

[INTERVAL] expression DAYS | DAY | MICROSECONDS | MICROSECOND

注意:

  • 由于Java的限制,MICROSECOND表达式会被转换为毫秒表达式。

示例1

将1天添加到DATE和TIMESTAMP值:

DATE '2015-03-12' + 1 DAY;
--
2015-03-13TIMESTAMP '2015-03-12' + 1 DAY;
--
2015-03-13 00:00:00

示例2

将表达式的结果添加到DATE和TIMESTAMP值:

DATE '2015-03-12' + NVL(NULL, 3) DAYS;
--
2015-03-15TIMESTAMP '2015-03-12' + NVL(NULL, 3) DAYS;
--
2015-03-15 00:00:00

示例3

从TIMESTAMP值中减去1毫秒(不支持微秒):

TIMESTAMP '2015-03-12 10:10:10.000' - 1 MICROSECOND; /* 被视为毫秒 */
--
2015-03-12 10:10:09.999

示例4

减去多个间隔字段:

TIMESTAMP '2015-03-12' - 1 DAY - 1 MICROSECOND;
--
2015-03-10 23:59:59

示例5

使用INTERVAL关键字:

date '2016-01-27' - interval '3' day;
--
2016-01-24

兼容性: IBM DB2、Oracle、Teradata

版本

  • INTERVAL关键字 - HPL/SQL 0.3.17
  • 引入 - HPL/HQL 0.3

Case表达式

CASE表达式允许在表达式中实现IF-THEN-ELSE逻辑。

语法

简单CASE表达式:

CASE 表达式WHEN 表达式 THEN 表达式...[ELSE 表达式] 
END

搜索CASE表达式:

CASE WHEN 布尔表达式 THEN 表达式...[ELSE 表达式] 
END

注意

  • 如果没有匹配任何WHEN表达式且未指定ELSE子句,则返回NULL。

示例

简单CASE表达式:

 CASE stateWHEN 'AZ' THEN '亚利桑那'WHEN 'CA' THEN '加利福尼亚'ELSE 'N/A'END 

搜索CASE表达式:

 CASE WHEN state = 'AZ' THEN '亚利桑那'WHEN state = 'CA' THEN '加利福尼亚'ELSE 'N/A'END 

兼容性: Oracle、IBM DB2、SQL Server、Teradata、MySQL、PostgreSQL 和 Netezza。

版本: PL/HQL 0.01

Type属性

以下是转换成Markdown格式的%TYPE属性部分,并将描述语句翻译成中文:

%TYPE属性

%TYPE属性允许声明一个变量,该变量具有与指定的引用列相同的数据类型。

语法

var_name [schema.]table.column_name%TYPE
  • 如果//table.column_name//找不到,数据类型将从第一个赋值表达式中推导出来。

示例

DECLARE i orders.item%TYPE;
BEGINSELECT item INTO i FROM orders LIMIT 1;DBMS_OUTPUT.PUT_LINE('物品: ' || i);
END;

兼容性: Oracle

版本: HPL/SQL 0.3.13

RowType属性

以下是转换成Markdown格式的%ROWTYPE属性部分,并将描述语句翻译成中文:

%ROWTYPE属性

%ROWTYPE属性允许声明一个记录变量,该变量具有与指定数据库表相同的列和数据类型。

语法

var_name [schema.]table_name%ROWTYPE

示例

DECLARE v orders%ROWTYPE;
BEGINSELECT * INTO v FROM orders LIMIT 1;DBMS_OUTPUT.PUT_LINE('物品: ' || v.name || ' - ' || v.description);
END;
DECLARE v orders%ROWTYPE;CURSOR c IS SELECT * FROM orders;
BEGINOPEN c1;FETCH c1 INTO v1;DBMS_OUTPUT.PUT_LINE('物品: ' || v.name || ' - ' || v.description);CLOSE c1;
END;
BEGINFOR v IN (SELECT * FROM orders)LOOPDBMS_OUTPUT.PUT_LINE('物品: ' || v.name || ' - ' || v.description);END LOOP;
END;
DECLAREv orders%ROWTYPE;
BEGINEXECUTE IMMEDIATE 'SELECT * FROM orders LIMIT 1' INTO v;DBMS_OUTPUT.PUT_LINE('物品: ' || v.name || ' - ' || v.description);
END;

兼容性: Oracle

版本: HPL/SQL 0.3.13

游标属性

以下是转换成Markdown格式的游标属性部分,并将描述语句翻译成中文:

游标属性

游标属性允许您获取有关当前游标状态的信息。

语法

cursor_name%ISOPENcursor_name%FOUNDcursor_name%NOTFOUND
  • //cursor_name// 是已声明的游标或游标变量的名称。

===== %ISOPEN 属性 =====

%ISOPEN 如果游标是打开状态,则返回//true//,否则返回//false//。

===== %FOUND 属性 =====

%FOUND 在从游标获取数据之前返回NULL,在最后一次获取时返回//true//,否则返回//false//。

===== %NOTFOUND 属性 =====

%NOTFOUND 在从游标获取数据之前返回NULL,在最后一次获取时返回//false//,否则返回//true//。

示例

DECLARE CURSOR c1 IS SELECT name FROM users LIMIT 1;v1 VARCHAR(30);
BEGINOPEN c1;IF c1%ISOPEN THENDBMS_OUTPUT.PUT_LINE('游标已打开');END IF; FETCH c1 INTO v1;IF c1%FOUND THENDBMS_OUTPUT.PUT_LINE('找到行');END IF;  FETCH c1 INTO v1;IF c1%NOTFOUND THENDBMS_OUTPUT.PUT_LINE('未找到行');END IF;  CLOSE c1; 
END;

兼容性: Oracle

版本: HPL/SQL 0.3.11

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/76816.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

postman token 请求头添加

思路: 1、登录成功后将 得到的token设置为集合变量 2、在需要携带Authorization的请求头上使用该集合变量 关键代码 const responseData pm.response.json(); if(responseData.code 1) {// 获取tokenconst {data:{token}} responseData// 设置为集合变量pm.colle…

编译OpenWrt内核驱动

编译OpenWrt内核驱动可以参考OpenWrt内部其它驱动的编写例程,来修改成自己需要的驱动 一、OpenWrt源代码获取与编译 1.1、搭建环境 下载OpenWrt的官方源码: git clone https://github.com/openwrt/openwrt.git1.2、安装编译依赖项 sudo apt update -…

vue中如何给特殊字段设置插槽

大纲: <template><div><div><span>卡号</span><el-input type"text" v-model"cardNo" clearable placeholder"请输入卡号" /><el-button type"primary" plain icon"el-icon-search"…

Python操作Excel实战:Excel行转列

# 1、原始数据准备 样例数据准备 地区1m2-5m6-10m11-20m21-40m地区单价计费单位费用最小值费用最大值北京13012011010090     天津13012011010090     石家庄13012011010090     保定140130120110100     张家口170150130120110     邢台1401201101…

我们如何在工作与生活中找到平衡点?

找到工作与生活中的平衡点是每个人都必须面对的问题。以下是一些建议&#xff0c;可以帮助你在工作和生活之间找到平衡&#xff1a; 制定时间表&#xff1a;确保你有足够的时间来处理工作和生活中的各种任务。为工作、学习和个人生活设定优先级&#xff0c;并确保时间分配合理…

玩转Mysql系列 - 第15篇:详解视图

这是Mysql系列第15篇。 环境&#xff1a;mysql5.7.25&#xff0c;cmd命令中进行演示。 需求背景 电商公司领导说&#xff1a;给我统计一下&#xff1a;当月订单总金额、订单量、男女订单占比等信息&#xff0c;我们啪啦啪啦写了一堆很复杂的sql&#xff0c;然后发给领导。 …

ElasticSearch第三讲:ES详解 - Elastic Stack生态和场景方案

ElasticSearch第三讲&#xff1a;ES详解 - Elastic Stack生态和场景方案 本文是ElasticSearch第三讲&#xff0c;在了解ElaticSearch之后&#xff0c;我们还要了解Elastic背后的生态 即我们常说的ELK&#xff1b;与此同时&#xff0c;还会给你展示ElasticSearch的案例场景&…

k8s配置ingress访问集群外部资源

使用ingress访问外部资源&#xff0c;首先需要创建service指向我们需要访问的资源 而每个service包含一个endpoint endpoint是k8s集群中的一个资源对象&#xff0c;存储在etcd中&#xff0c;用来记录一个service对应的所有pod的访问地址。service配置selector&#xff0c;endpo…

浅谈限流式保护器在高校防火工作的应用

安科瑞 华楠 【摘要】摘要&#xff1a;为了预防火灾和减少火灾带来的危害&#xff0c;保护校园和师生生命财产安全&#xff0c; 建和谐安宁的校园环境&#xff0c;保障学校安全稳定发展&#xff0c;我们必须要时刻拧紧消防安全这弦&#xff0c;时刻注意这根高压线。随着近年来…

el-select下拉框定位问题

1.当el-select所在页面滚动时或者el-select上面区域高度发生变化时&#xff0c;定位存在偏差 2.解决办法&#xff1a; 1. el-select自带属性popper-append-to-body&#xff1a;true&#xff0c;可能会无效 2.设置ref,监听高度变化或者滚动时&#xff0c;手动执行刷新方法&…

应用在汽车新风系统中消毒杀菌的UVC灯珠

在病毒、细菌的传播可以说是一个让人敏感而恐惧的事情。而对于车内较小的空间&#xff0c;乘坐人员流动性大&#xff0c;更容易残留细菌病毒。车内缺少通风&#xff0c;残留的污垢垃圾也会滋生细菌&#xff0c;加快细菌的繁殖。所以对于车内消毒就自然不容忽视。 那么问题又来…

php如何处理高并发请求

PHP 处理高并发请求的方法&#xff1a; 使用异步框架&#xff1a;通过使用异步处理方式&#xff0c;可以有效地降低 PHP 处理请求的响应时间&#xff0c;避免因为 IO 操作而导致的等待阻塞。常用的异步框架有ReactPHP和Swoole等。 使用缓存&#xff1a;使用缓存可以减少每个请求…

算法:贪心---跳一跳

1、题目&#xff1a; 给你一个非负整数数组 nums &#xff0c;你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标&#xff0c;如果可以&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 2…

【SpringMvc 丨跨域】

Spring MVC 支持跨域处理&#xff08;CORS&#xff09;。 CORS 简介处理CORS 过滤器CrossOrigin注解java配置xml配置 主页传送门&#xff1a;&#x1f4c0; 传送 简介 跨域是指在浏览器的同源策略下&#xff0c;不能执行其他网站的脚本。它是由浏览器的安全限制造成的&#xf…

每天40min,我们一起用70天稳扎稳打学完《JavaEE初阶》——32/70 第三十二天【JavaScript】

JavaScript JavaScript初识 JavaScript前置知识第一个程序JavaScript 的书写形式语法概览变量的使用基本数据类型number类型string 字符串类型强类型 和 动态类型boolean 布尔类型undefined 类型运算符\==\=和\=\=|| 和 && 的返回值条件,循环语句数组

C语言文件读写

C 文件读写介绍 一个文件&#xff0c;无论它是文本文件还是二进制文件&#xff0c;都是代表了一系列的字节。C 语言不仅提供了访问顶层的函数&#xff0c;也提供了底层&#xff08;OS&#xff09;调用来处理存储设备上的文件。本章将讲解文件管理的重要调用。 打开文件 您可…

Linux学习--MySQL学习之查询语句

所有实现基于mysql8.0.26实现&#xff0c;事例代码 1&#xff1a;常用函数 字符函数数学函数日期函数聚集函数数学计算if函数case函数 函数&#xff1a;MySQL服务内置命令 语法&#xff1a;函数名(表头名) select格式 SELECT 函数(表头名) FROM 库名.表名&#xff1b; SE…

2023-9-12 完全背包问题

题目链接&#xff1a;完全背包问题 初版(时间复杂度拉满) #include <iostream> #include <algorithm>using namespace std;const int N 1010;int n, m; int v[N], w[N]; int f[N][N];int main() {cin >> n >> m;for(int i 1; i < n; i ) cin >…

预防Dos攻击

Dos----拒绝服务攻击&#xff0c;一般是构造特殊的输入&#xff0c;使得后台的处理耗时远超正常水平&#xff0c;随着请求越来越多&#xff0c;后台服务越发疲于奔命&#xff0c;最后因资源耗尽&#xff0c;无法再接受新的请求&#xff0c;最终造成拒绝服务的效果。 特殊输入例…

欧洲汽车制造商押注电力合成燃料 | 2023中国可持续燃料峰会

欧洲几家汽车制造商表示&#xff0c;所谓的电力合成燃料(e-fuels&#xff0c;利用可再生电力合成的化石燃料&#xff0c;又称电子燃料)将在欧洲汽车行业的未来发挥关键作用&#xff0c;它们相信&#xff0c;布鲁塞尔方面在替代燃料问题上的让步&#xff0c;将使它们能够在未来1…