sql - 我可以在 Oracle SQL 中组合多列的一部分吗
问题描述
我是一名大学生,我正在使用 Oracle DB 开展一个项目。我想知道当我插入一行并将该列用作 PK 时,是否可以使列值显示为其他列的连接部分?
所以在这样的桌子上:
CREATE TABLE Cellphone (
id VARCHAR (8) PRIMARY KEY,
maker VARCHAR (20) NOT NULL,
range VARCHAR (20) NOT NULL,
model VARCHAR (10) NOT NULL,
ram NUMBER (2) NOT NULL,
color VARCHAR (5) NOT NULL,
quantity NUMBER (3) DEFAULT 0
);
因此,当我插入一行时,我希望将 id 自动设置为制造商的前 3 个字符、范围的前 3 个字符、模型的前 3 个字符、ram 和颜色的连接值。
例如 :
INSERT INTO Cellphone (id, maker, range, model, ram, color, quantity)
VALUES (*The code I am looking for*, "SAMSUNG", "GALAXY", "S10",32,"BLK",56);
将id
生成的是SAMGALS1032BLK
.
有可能这样做吗?如果没有,是否有可能看起来像这样的东西,当我想显示表格时可能使用 SELECT 语句?
解决方案
你可以试试这个:
CREATE TABLE Cellphone (
id AS (substr(maker,0,3)||substr(range,0,3)||model||ram||color) PRIMARY KEY,
maker VARCHAR (20) NOT NULL,
range VARCHAR (20) NOT NULL,
model VARCHAR (10) NOT NULL,
ram NUMBER (2) NOT NULL,
color VARCHAR (5) NOT NULL,
quantity NUMBER (3) DEFAULT 0
);
INSERT INTO Cellphone (maker, range, model, ram, color, quantity)
VALUES ('SAMSUNG', 'GALAXY', 'S10',32,'BLK',56);
select * from Cellphone;
https://dbfiddle.uk/?rdbms=oracle_11.2&fiddle=954fb222fba8a2b49c3937c47e9f4726
推荐阅读
- javascript - D3中的垂直冰柱
- prolog - 是否有 atom/1 或 stream/1 等的 Prolog 名称(SWI-Prolog)
- actions-on-google - 令牌有效负载为空
- javascript - present : past[past.length - 1] ,这应该返回一个值,但它返回一个完整的数组,就像 slice 方法一样
- node.js - 将文件从 /tmp 下载到 Google Cloud Function 中的客户端
- python - 为 LightGBM 提供额外的自定义指标以提前停止
- sql - SQL:创建过程和调用过程
- f# - 将字符匹配到有区别的联合
- selenium - 使用 selenium 自动化创建 Drupal 小部件
- date - 如何在 Power BI 中正确格式化日期