sql - Vertica 中的 Oracle 'GENERATED ALWAYS' 语法等价物?
问题描述
对于这个问题没有太多背景,我深表歉意,但我的任务是将我们的一些 Oracle 查询转换为 Vertica 语法,我无法理解与GENERATED ALWAYS
案例语句相关的 Oracle 命令的文档。
根据我的发现,GENERATED ALWAYS
Oracle 中的 似乎等于AUTO INCREMENT
Vertica 中的。
这是我需要在 Vertica 中重写的 case 语句示例。乍一看,它似乎只是在告诉它使用别名,但我不确定我是否理解正确。
FIELD_NAME varchar2(25) GENERATED ALWAYS as(
case "FIELD_NAME"
when 'ABC'
then 'ABC / Category_ABC'
when 'DEF'
then 'DEF / Category_DEF'
else 'Other'
end)
这基本上是一样的吗?只是简单地移除该GENERATED ALWAYS
部件是否安全?还是这里发生了更大的事情?
FIELD_NAME varchar2(25) as(
case "FIELD_NAME"
when 'ABC'
then 'ABC / Category_ABC'
when 'DEF'
then 'DEF / Category_DEF'
else 'Other'
end)
解决方案
这绝不是一个查询、上下文、phenderbender。这是一个数据定义上下文。GENERATED ALWAYS 或 GENERATED BY DEFAULT 是您在创建表或更改表以创建或修改列时定义的列属性。
Vertica 的语法是列定义的DEFAULT 子句。
如果我看一下 Oracle 文档,这里:
https://oracle-base.com/articles/11g/virtual-columns-11gr1
我会像这样在 Vertica 中编写他们的示例:
CREATE TABLE employees (
id INTEGER,
first_name VARCHAR(10),
last_name VARCHAR(10),
salary NUMERIC(9,2),
comm1 NUMERIC(3),
comm2 NUMERIC(3),
salary1 NUMERIC(9,2) DEFAULT (ROUND(salary*(1+comm1/100),2)),
salary2 NUMERIC(9,2) DEFAULT (ROUND(salary*(1+comm2/100),2)),
CONSTRAINT employees_pk PRIMARY KEY (id)
);
INSERT INTO employees (id, first_name, last_name, salary, comm1, comm2)
VALUES (1, 'JOHN', 'DOE', 100, 5, 10);
INSERT INTO employees (id, first_name, last_name, salary, comm1, comm2)
VALUES (2, 'JAYNE', 'DOE', 200, 10, 20);
COMMIT;
SELECT * FROM employees;
-- out id | first_name | last_name | salary | comm1 | comm2 | salary1 | salary2
-- out ----+------------+-----------+--------+-------+-------+---------+---------
-- out 1 | JOHN | DOE | 100.00 | 5 | 10 | 105.00 | 110.00
-- out 2 | JAYNE | DOE | 200.00 | 10 | 20 | 220.00 | 240.00
-- out (2 rows)
-- out
-- out Time: First fetch (2 rows): 182.567 ms. All rows formatted: 182.674 ms
推荐阅读
- angular - 我无法在 localStorage 中保存数组并在再次启动应用程序时重新加载它。(Ionic Angular)
- vba - 搜索大量文件并根据搜索字符串将某些行提取到单独的单个文件中
- html - 找出 CSS 行为背后原因的方法
- r - rlang::flatten() 的基本等价物是什么?
- java - 为什么在这种情况下 ExecutorService 返回正确答案 19 次?错误在哪里?
- c++ - ffmpeg:sws_scale 无法将图像从 YUV 转换为 RGB
- ssl-certificate - 将证书签名请求公钥从 ECDSA 转换为 RSA
- jquery - 禁用按钮在 IE 11 中不起作用,但它在 chrome 中起作用
- android - 即使设置环境变量后也无法识别颤振
- ios - 重构我的数组迭代的建议?