【问题标题】:Convert SQL Server code to Oracle将 SQL Server 代码转换为 Oracle
【发布时间】:2018-04-15 06:37:29
【问题描述】:

我尝试将 SQL Server 代码转换为 Oracle,但失败了。

这是我在 SQL Server 中的代码。有人可以帮忙吗?

CREATE TABLE [dbo].[DimCustomer]
(
     CustomerID INT IDENTITY(12,1) NOT NULL,
     CustomerAccountID VARCHAR(20),
     FirstName VARCHAR(50),
     LastName VARCHAR(50),
     FullName AS CONCAT(FirstName,' ',LastName),
     ContactNumber VARCHAR(20),
     EmailAddress VARCHAR(50),
     MemberShipType VARCHAR(50),
     MemberShipStartDatekey INT,
     MemberShipExpiryDateKey INT,

     CONSTRAINT pk_customer_id PRIMARY KEY (CustomerID)
)

【问题讨论】:

  • 将特定于版本的 SQL Server 标记添加到您的问题中。您的 DDL 在 SQL Server 2012 及更高版本中有效,但由于 CONCAT 功能,因此不适用于旧版本。
  • 这不是代码编写服务。 Oracle 和 sql server 有很多不同之处。身份是一个跳出页面的人。计算列的语法也非常不同。
  • Oracle 的哪个版本?
  • 对于初学者来说,oracle 没有 [dbo]
  • 谢谢大家。已经解决了。

标签: sql oracle database-migration ddl


【解决方案1】:

就像 (Oracle 12c) 一样简单:

CREATE TABLE DimCustomer
(
CustomerID INT   GENERATED BY DEFAULT AS IDENTITY NOT NULL  --IDENTITY
,CustomerAccountID VARCHAR2(20)                             --VARCHAR2
,FirstName VARCHAR2(50)
,LastName VARCHAR2(50)
,FullName AS (FirstName || ' ' ||LastName)                  --calculated column
,ContactNumber VARCHAR2(20)
,EmailAddress VARCHAR2(50)
,MemberShipType VARCHAR2(50)
,MemeberShipStartDatekey INT
,MemberShipExpiryDateKey INT
,CONSTRAINT pk_customer_id PRIMARY KEY (CustomerID)         --comma
);

使用序列和触发器的替代方案:

CREATE SEQUENCE DimCustomer_seq START WITH 12 INCREMENT BY 1;

CREATE OR REPLACE TRIGGER DimCustomer_seq_tr
 BEFORE INSERT ON DimCustomer FOR EACH ROW
BEGIN
 SELECT DimCustomer_seq.NEXTVAL INTO :NEW.CustomerID FROM DUAL;
END;

【讨论】:

    猜你喜欢
    • 2020-03-22
    • 1970-01-01
    • 1970-01-01
    • 2022-01-12
    • 2021-06-14
    • 2012-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多