如何将 MySQL 查询转换为等效的 Oracle sql 查询
Posted
技术标签:
【中文标题】如何将 MySQL 查询转换为等效的 Oracle sql 查询【英文标题】:How to convert MySQL query to equivalent Oracle sql Query 【发布时间】:2020-07-09 21:55:19 【问题描述】:我想将下面的 MY SQL 查询转换为 Oracle SQL 查询,有人可以帮忙吗?
instructor 表下面是父实体,instructor_detail 表是子实体。
CREATE TABLE `instructor_detail` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`youtube_channel` varchar(128) DEFAULT NULL,
`hobby` varchar(45) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;
CREATE TABLE `instructor` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`first_name` varchar(45) DEFAULT NULL,
`last_name` varchar(45) DEFAULT NULL,
`email` varchar(45) DEFAULT NULL,
`instructor_detail_id` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `FK_DETAIL_idx` (`instructor_detail_id`),
CONSTRAINT `FK_DETAIL` FOREIGN KEY (`instructor_detail_id`) REFERENCES `instructor_detail` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;
我在下面尝试过,但没有工作
CREATE TABLE instructor (
id numeric(11) NOT NULL PRIMARY KEY,
first_name varchar(45) DEFAULT NULL,
last_name varchar(45) DEFAULT NULL,
email varchar(45) DEFAULT NULL,
instructor_detail_id numeric(10) not null
);
CREATE TABLE instructor_detail (
id NUMERIC(11) NOT NULL PRIMARY KEY,
youtube_channel varchar(128) DEFAULT NULL,
hobby varchar(45) DEFAULT NULL,
CONSTRAINT fk_instructor
FOREIGN KEY (instructor_detail_id)
REFERENCES instructor(instructor_detail_id)
);
error : Error report -
ORA-00904: "INSTRUCTOR_DETAIL_ID": invalid identifier
00904. 00000 - "%s: invalid identifier"
*Cause:
*Action:
赞赏
【问题讨论】:
【参考方案1】:Oracle 11 不支持自动生成的主键,因此您需要一个触发器。还有一些关于级联约束的不同规则。
除此之外:
CREATE TABLE instructor_detail (
id int PRIMARY KEY,
youtube_channel varchar2(128) DEFAULT NULL,
hobby varchar2(45) DEFAULT NULL
) ;
CREATE TABLE instructor (
id int NOT NULL PRIMARY KEY,
first_name varchar2(45) DEFAULT NULL,
last_name varchar2(45) DEFAULT NULL,
email varchar2(45) DEFAULT NULL,
instructor_detail_id int,
CONSTRAINT FK_DETAIL FOREIGN KEY (instructor_detail_id) REFERENCES instructor_detail (id)
) ;
CREATE INDEX idx_instructor_instruct_detail_id ON instructor(instructor_detail_id);
Here 是一个 dbfiddle。
【讨论】:
非常感谢您的回复!以上是关于如何将 MySQL 查询转换为等效的 Oracle sql 查询的主要内容,如果未能解决你的问题,请参考以下文章
如何将任何给定的 SQL/HQL 选择查询动态转换为等效计数查询?
将 Oracle 合并查询转换为 mysql mySQL 查询
如何将 MS-SQL Server SELECT 查询转换/迁移到 Oracle 和 MySQL?