我需要通过两列连接两个表。
第一个表的主键为整数类型 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 开始,您可以使用虚拟列:
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/