sql - 有没有办法在oracle sql中使用varchar2字符串的一部分作为主键?

标签 sql oracle

我需要通过两列连接两个表。

第一个表的主键为整数类型 id。

第二个表具有 varchar2 类型列,该列包含相同的主键,但位于字符串的中间。

For example in first table I have column called integer ID with ID like 1234. In the second table I have column with string like 'abcdefgh - 1234 (ijklmno)'.

有没有办法使用该嵌套键?

最佳答案

从 Oracle 11g 开始,您可以使用虚拟列:

SQL Fiddle

Oracle 11g R2 架构设置:

CREATE TABLE TableA (
  id NUMBER(4,0) PRIMARY KEY
);

INSERT INTO TableA VALUES ( 1234 );

CREATE TABLE TableB (
  data VARCHAR2(25) NOT NULL
                    CHECK ( REGEXP_LIKE( data, '\w+ - (0|[1-9]\d{0,3}) \(\w+\)' ) ),
  id   NUMBER(4,0)  GENERATED ALWAYS AS ( TO_NUMBER( REGEXP_SUBSTR( data, '\w+ - (0|[1-9]\d{0,3}) \(\w+\)', 1, 1, null, 1 ) ) ) VIRTUAL,
  CONSTRAINT TableB__ID__FK FOREIGN KEY ( id ) REFERENCES TableA ( id )
);

INSERT INTO TableB ( data ) VALUES ( 'abcdefgh - 1234 (ijklmno)' );

查询 1:

SELECT * FROM TableB

<强> Results :

|                      DATA |   ID |
|---------------------------|------|
| abcdefgh - 1234 (ijklmno) | 1234 |

关于sql - 有没有办法在oracle sql中使用varchar2字符串的一部分作为主键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32497466/

相关文章:

java - 如何避免将空值插入主键或非空列?

mysql - 创建表时根据其他两列计算第三列

sql - :OLD and :NEW variables in a trigger? 属于什么数据类型

java - Oracle 驱动程序可能不在使用任务 "gradle jar"的类路径中

mysql - 单表中的简单选择查询

sql - 在 where 子句中使用 Oracle SQL 变量时出现问题

php sql将来自不同数据库的多个表连接在一起

sql - 如何用 • 替换单词但仅显示第一个和最后一个字符

mysql - MVC 将数据输入到 SQL 表中。网站工作没有错误,但当我单击 ShowTableData 时,一切都是 Null

c++ - 连接到数据库