Я недавно начал использовать Oracle.До этого я работал с SQL Server 2008/2012.Я заметил некоторые различия между Oracle и SQL Server.Я создал таблицы в SQL Server с некоторыми базовыми столбцами, такими как Имя, Фамилия, адрес электронной почты и т. Д. Вот пример структуры моей таблицы:
Name Data Type Size Not Null
RECORDID NUMBER true //This is primary key (auto increment)
FIRST VARCHAR2 50 true
LAST VARCHAR2 50 true
EMAIL VARCHAR2 320 true
PHONE CHAR 10 true
FILEPATH VARCHAR2 1000 false
TYPE CHAR 1 true
SUBJECT VARCHAR2 100 true
DESCRIPTION VARCHAR 4000 true // This should be varchar(max)
ACTIONDATE DATE true
Я использовал параметр Identity Column
в Oracle SQL Developer, чтобы установитьRecordID
к последовательности столбцов.Это отличается от SQL Server, и я ищу такое же поведение.Этот столбец должен автоматически увеличиваться для каждой новой строки, добавляемой в таблицу.
Это правильный способ установки столбца идентификаторов в Oracle?Вот пример моего оператора вставки:
<cfquery name="insertRec" datasource="test">
INSERT INTO Table1 (
RecordID, First, Last, Email, Phone,
FilePath, Type, Subject, Description, ActionDate
)VALUES(
RecID_SEQ1.NEXTVAL,
<cfqueryparam cfsqltype="cf_sql_varchar" value="trim(#form.first#)" maxlength="50">,
<cfqueryparam cfsqltype="cf_sql_varchar" value="trim(#form.last#)" maxlength="50">,
<cfqueryparam cfsqltype="cf_sql_varchar" value="trim(#form.email#)" maxlength="50">,
<cfqueryparam cfsqltype="cf_sql_char" value="trim(#form.phone#)" maxlength="10">,
<cfqueryparam cfsqltype="cf_sql_varchar" value="trim(#form.file#)" maxlength="1000">,
<cfqueryparam cfsqltype="cf_sql_char" value="trim(#form.type#)" maxlength="1">,
<cfqueryparam cfsqltype="cf_sql_varchar" value="trim(#form.subject#)" maxlength="100">,
<cfqueryparam cfsqltype="cf_sql_varchar" value="trim(#form.appdescr#)" maxlength="4000">,
CURRENT_TIMESTAMP
)
</cfquery>
В транзакции выше, как установить идентификатор автоматического увеличения?Также я хотел бы вернуть идентичность области так же, как в SQL Server.Есть ли способ добиться этого в Oracle?Если у кого-то есть какие-либо предложения относительно того, как этого можно достичь или как улучшить мой код выше, пожалуйста, дайте мне знать.Я только начал с Oracle, и это ново для меня.
CREATE TABLE "MYDB"."MYTABLE"
( "RECORDID" NUMBER,
"FIRST" VARCHAR2(20 BYTE),
"LAST" VARCHAR2(20 BYTE),
"EMAIL" VARCHAR2(20 BYTE),
"PHONE" CHAR(10 BYTE),
"FILEPATH" VARCHAR2(20 BYTE),
"TYPE" CHAR(1 BYTE),
"SUBJECT" VARCHAR2(20 BYTE),
"DESCRIPTION" VARCHAR2(20 BYTE),
"ACTIONDATE" DATE,
"PRIORITY" CHAR(1 BYTE)
) SEGMENT CREATION DEFERRED
PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
TABLESPACE "MYDB" ;
--------------------------------------------------------
-- DDL for Index MYTABLE_PK
--------------------------------------------------------
CREATE UNIQUE INDEX "MYDB"."MYTABLE_PK" ON "MYDB"."MYTABLE" ("RECORDID")
PCTFREE 10 INITRANS 2 MAXTRANS 255 NOCOMPRESS LOGGING
TABLESPACE "MYDB" ;
--------------------------------------------------------
-- DDL for Trigger MYTABLE_TRG
--------------------------------------------------------
CREATE OR REPLACE TRIGGER "MYDB"."MYTABLE_TRG"
BEFORE INSERT ON MYTABLE
FOR EACH ROW
BEGIN
<<COLUMN_SEQUENCES>>
BEGIN
NULL;
END COLUMN_SEQUENCES;
END;
/
ALTER TRIGGER "MYDB"."MYTABLE_TRG" ENABLE;
--------------------------------------------------------
-- DDL for Trigger MYTABLE_TRG1
--------------------------------------------------------
CREATE OR REPLACE TRIGGER "MYDB"."MYTABLE_TRG1"
BEFORE INSERT ON MYTABLE
FOR EACH ROW
BEGIN
<<COLUMN_SEQUENCES>>
BEGIN
IF INSERTING AND :NEW.RECORDID IS NULL THEN
SELECT ADPR_SEQ1.NEXTVAL INTO :NEW.RECORDID FROM SYS.DUAL;
END IF;
END COLUMN_SEQUENCES;
END;
/
ALTER TRIGGER "MYDB"."MYTABLE_TRG1" ENABLE;