কীভাবে ওরাকলে AUTO_INCREMENT দিয়ে আইডি তৈরি করবেন?


422

এটি প্রদর্শিত হয় যে ওরাচলে AUTO_INCREMENT এর কোনও ধারণা নেই, সংস্করণ 11g অবধি এবং পর্যন্ত।

আমি কীভাবে একটি কলাম তৈরি করতে পারি যা ওরাকল 11 জি-তে অটো বর্ধনের মতো আচরণ করে?


3
আপনি BEFORE INSERTটেবিলটিতে একটি ট্রিগার তৈরি করতে এবং
স্বতঃবৃদ্ধি

7
সনাক্তকরণ কলামগুলি এখন ওরাকল
ডেভিড


আপনি কি ওরাকল আরএসি ব্যবহার করছেন? বিবৃতি শেষে CACHED ব্যবহার করা পারফরম্যান্সে উন্নতি করতে পারে। আপনি যদি অল্প সময়ের মধ্যে অনেকগুলি সন্নিবেশ করান (এবং ক্রমটি অর্ডার করা আপনার পক্ষে গুরুত্বপূর্ণ নয়), অতিরিক্ত কর্মক্ষমতা সুবিধার জন্য স্তম্ভিত ক্রম সন্নিবেশ ট্রিগার বিবেচনা করুন। দেখুন: dba-oracle.com/t_rac_proper_sequence_usage.htm
পিটার কোক

উত্তর:


596

"Auto_increment" বা "পরিচয়" ওরাকল কলাম যেমন জিনিস নেই ওরাকল 11g হিসাবে । তবে, আপনি এটি একটি ক্রম এবং ট্রিগার দিয়ে সহজেই মডেল করতে পারেন:

সারণির সংজ্ঞা:

CREATE TABLE departments (
  ID           NUMBER(10)    NOT NULL,
  DESCRIPTION  VARCHAR2(50)  NOT NULL);

ALTER TABLE departments ADD (
  CONSTRAINT dept_pk PRIMARY KEY (ID));

CREATE SEQUENCE dept_seq START WITH 1;

ট্রিগার সংজ্ঞা:

CREATE OR REPLACE TRIGGER dept_bir 
BEFORE INSERT ON departments 
FOR EACH ROW

BEGIN
  SELECT dept_seq.NEXTVAL
  INTO   :new.id
  FROM   dual;
END;
/

হালনাগাদ:

IDENTITY কলামটি এখন ওরাকল 12 সি তে উপলভ্য:

create table t1 (
    c1 NUMBER GENERATED by default on null as IDENTITY,
    c2 VARCHAR2(10)
    );

বা শুরুর এবং বর্ধিত মান নির্দিষ্ট করুন, সনাক্তকরণ কলামে কোনও সন্নিবেশ রোধ করে ( GENERATED ALWAYS), আবার কেবল ওরাকল 12 সি +)

create table t1 (
    c1 NUMBER GENERATED ALWAYS as IDENTITY(START with 1 INCREMENT by 1),
    c2 VARCHAR2(10)
    );

বিকল্পভাবে, ওরাকল 12 এছাড়াও একটি সিক্যুয়েন্সটিকে ডিফল্ট মান হিসাবে ব্যবহার করতে দেয়:

CREATE SEQUENCE dept_seq START WITH 1;

CREATE TABLE departments (
  ID           NUMBER(10)    DEFAULT dept_seq.nextval NOT NULL,
  DESCRIPTION  VARCHAR2(50)  NOT NULL);

ALTER TABLE departments ADD (
  CONSTRAINT dept_pk PRIMARY KEY (ID));

5
আমি একটি n00b, আপনি আমাকে বলতে পারেন dept_seqকোথা থেকে এসেছেন!
J86

3
সিকোয়েন্স তৈরি করুন ডিপ্ট_সেক; ডিপ্ট_সেক ... একটি টেবিলের মতো তৈরি করে .. তবে এই ক্ষেত্রে এটি কেবলমাত্র একটি সংখ্যা যা আপনি ডিপ্ট_সেক.নেক্সটভাল দিয়ে বাড়িয়ে নিতে পারেন ... ট্রিগারটি দেখুন।
বেনিয়ামিন একস্টাইন

যেমনটি উল্লেখ করা হয়েছিল, নির্দিষ্ট আইডির সাথে কোনও লাইনের মুখোমুখি হওয়ার সময় মূল কোডটি ব্যর্থ হবে। তবে কীভাবে এই কেসটি সম্পর্কে: ইনসার্টে স্পষ্টভাবে কোনও আইডি নির্দিষ্ট না করা থাকলে ট্রিগারটি আইডিটি স্বয়ংক্রিয়ভাবে সরবরাহ করবে (স্বয়ংক্রিয়ভাবে)। এই ব্যর্থ হবে, তাই না? এবং এটি করার উপযুক্ত উপায় কী?
FanaticD

10
আমার মতো ওরাকল newbies জন্য, 'new.id' এর 'আইডি' অংশটি উপরের টেবিলের কলাম 'আইডি' বোঝায়। 'নতুন' একটি সংরক্ষিত শব্দ যা তৈরি করা নতুন সারিটির উল্লেখ করে
হপ্পে

2
আপনি ঠিক করতে পারেন SELECT .. INTOএমন ট্রিগারটি ব্যবহার করার দরকার নেই :new.id := dept_seq.NEXTVAL;
এমটি0

90

SYS_GUIDএকটি GUID-- একটি বিশ্বব্যাপী অনন্য আইডি প্রদান করে। ক SYS_GUIDহয় ক RAW(16)। এটি একটি বর্ধিত সংখ্যাসূচক মান উত্পন্ন করে না।

আপনি যদি একটি ইনক্রিমেন্টিং সংখ্যার কী তৈরি করতে চান তবে আপনি একটি ক্রম তৈরি করতে চাইবেন।

CREATE SEQUENCE name_of_sequence
  START WITH 1
  INCREMENT BY 1
  CACHE 100;

এরপরে আপনি আপনার INSERTবিবৃতিতে সেই ক্রমটি ব্যবহার করবেন

INSERT INTO name_of_table( primary_key_column, <<other columns>> )
  VALUES( name_of_sequence.nextval, <<other values>> );

অথবা আপনি একটি ট্রিগার সংজ্ঞায়িত করতে পারেন যা ক্রমটি ব্যবহার করে স্বয়ংক্রিয়ভাবে প্রাথমিক কী মানকে পপুলেট করে

CREATE OR REPLACE TRIGGER trigger_name
  BEFORE INSERT ON table_name
  FOR EACH ROW
BEGIN
  SELECT name_of_sequence.nextval
    INTO :new.primary_key_column
    FROM dual;
END;

যদি আপনি ওরাকল 11.1 বা তার বেশি ব্যবহার করে থাকেন তবে আপনি ট্রিগারটি কিছুটা সহজ করতে পারেন

CREATE OR REPLACE TRIGGER trigger_name
  BEFORE INSERT ON table_name
  FOR EACH ROW
BEGIN
  :new.primary_key_column := name_of_sequence.nextval;
END;

আপনি যদি সত্যিই ব্যবহার করতে চান SYS_GUID

CREATE TABLE table_name (
  primary_key_column raw(16) default sys_guid() primary key,
  <<other columns>>
)

1
কি করে CACHE 100; in CREATE SEQUENCE name_of_sequence START WITH 1 INCREMENT BY 1 CACHE 100;?
অ্যাঞ্জেলিনা

3
ক্যাচ 100: কীওয়ার্ডটি মেমোরিতে পরবর্তী 100 নম্বরগুলি নিয়ে আসে। সাধারণত যখন একটি সিকোয়েনস ডাটাবেজে সংরক্ষণ করা হয় যখনই এর মান পরিবর্তন হয়, আপনি যদি এটি ক্যাশে করেন তবে এটি সংরক্ষণ করা হবে এবং কেবল ক্যাশেড অবসন্ন হলেই এটি পুনরুদ্ধার করা হবে। আপনাকে একটি উল্লেখযোগ্য পারফরম্যান্স লাভ দেয়, তবে যদি ডাটাবেস ব্যর্থ হয় তবে আপনি ব্যবহার না করা সমস্ত ক্যাশেড মান হারাবেন।
রমজান পোলাট

2
একটি SYS_GUID()একটি হল RAW(16)32, না
turbanoff

2
@ তুরবানফ - ভাল ক্যাচ আমার উত্তর আপডেট। SYS_GUIDডকুমেন্টেশন একটি ঘোষণা raw(32)যা আমাকে বিভ্রান্ত।
জাস্টিন গুহ

@ জাস্টিনক্যাভ আমি আপনার ক্রমটি ক্রম এবং ট্রিগার তৈরিতে ব্যবহার করেছি। আমি যদি প্রোগ্রামটিমেটিকভাবে (জাভা) একটি সারি মুছি, আইডি (প্রাথমিক কী) পাশাপাশি সামঞ্জস্য হবে?
কিট্টু

52

ওরাকল 12 সি এর পরে আপনি এমন কিছু করতে পারেন,

CREATE TABLE MAPS
(
  MAP_ID INTEGER GENERATED ALWAYS AS IDENTITY (START WITH 1 INCREMENT BY 1) NOT NULL,
  MAP_NAME VARCHAR(24) NOT NULL,
  UNIQUE (MAP_ID, MAP_NAME)
);

এবং ওরাকলে (প্রাক 12 সি)

-- create table
CREATE TABLE MAPS
(
  MAP_ID INTEGER NOT NULL ,
  MAP_NAME VARCHAR(24) NOT NULL,
  UNIQUE (MAP_ID, MAP_NAME)
);

-- create sequence
CREATE SEQUENCE MAPS_SEQ;

-- create tigger using the sequence
CREATE OR REPLACE TRIGGER MAPS_TRG 
BEFORE INSERT ON MAPS 
FOR EACH ROW
WHEN (new.MAP_ID IS NULL)
BEGIN
  SELECT MAPS_SEQ.NEXTVAL
  INTO   :new.MAP_ID
  FROM   dual;
END;
/

2
@ জনহেলার আমি ব্যক্তিগতভাবে বলছি IDENTITYউদাহরণটি এই উত্তরে আরও পরিষ্কার।
এপিকপান্ডাফোরস

5
WHEN (new.MAP_ID IS NULL)গৃহীত উত্তর নেই। সম্মত।
dcsohl

1
@ ডিসিএসএইচএল, WHEN ( new.MAP_ID is null)এই ক্ষেত্রে একটি ভাল কোড নয় এবং এটি ইতিমধ্যে @AbCade দ্বারা গৃহীত উত্তরের অধীনে মন্তব্য বিভাগে ব্যাখ্যা করা হয়েছে .. একটি পড়ুন;)
আজমল্মেহদ04

আমি যখন থেকে এই চালানো CREATE OR REPLACE TRIGGERথেকে END;, আমি একটি "binds লিখুন" উইন্ডো পান। যদি আমি "প্রয়োগ করুন" এ ক্লিক করি এবং সেই উইন্ডোতে অন্য কিছু না করি এবং ALTER TRIGGERকমান্ডটি চালিত করি তবে সব ভাল, তবে ইচ্ছুক যে পপ-আপ থেকে প্রোগ্রামিয়েটিকভাবে মুক্তি পাওয়ার এবং সমস্ত কিছু একসাথে চালানোর কোনও উপায় ছিল। আপনি যদি এটি পুরোপুরি চেষ্টা করেন তবে আপনি পেয়েছেন PLS-00103: Encountered the symbol 'ALTER'এবং এটি পছন্দ করে না EXECUTE IMMEDIATE, হয় (একই ত্রুটি, Encountered the symbol 'EXECUTE'পরিবর্তে কেবল এটি বলে )।
vapcguy

[42000][907] ORA-00907: missing right parenthesisওরাকল 12 সি এর জন্য সংস্করণটি চালানোর সময় আমি পেয়েছি । কোন ধারণা ?
বেলগোরোস

32

এখানে তিনটি স্বাদ:

  1. সাংখ্যিক । সাধারণ ক্রমবর্ধমান সংখ্যার মান, উদাহরণস্বরূপ 1,2,3, ....
  2. জিইউডিRAWডেটাটাইপ হিসাবে বিশ্বব্যাপী ইউনিভেরাল শনাক্তকারী
  3. জিইউডি (স্ট্রিং) । উপরের মতো একই, তবে একটি স্ট্রিং যা কোনও কোনও ভাষায় হ্যান্ডেল করা সহজ হতে পারে।

xএটি পরিচয় কলাম। FOOউদাহরণগুলির প্রতিটিতে আপনার টেবিলের নামের সাথে প্রতিস্থাপন করুন ।

-- numerical identity, e.g. 1,2,3...
create table FOO (
    x number primary key
);
create sequence  FOO_seq;

create or replace trigger FOO_trg
before insert on FOO
for each row
begin
  select FOO_seq.nextval into :new.x from dual;
end;
/

-- GUID identity, e.g. 7CFF0C304187716EE040488AA1F9749A
-- use the commented out lines if you prefer RAW over VARCHAR2.
create table FOO (
    x varchar(32) primary key        -- string version
    -- x raw(32) primary key         -- raw version
);

create or replace trigger FOO_trg
before insert on FOO
for each row
begin
  select cast(sys_guid() as varchar2(32)) into :new.x from dual;  -- string version
  -- select sys_guid() into :new.x from dual;                     -- raw version
end;
/

হালনাগাদ:

ওরাকল 12 সি এই দুটি ভেরিয়েন্টগুলি প্রবর্তন করে যা ট্রিগারগুলির উপর নির্ভর করে না:

create table mytable(id number default mysequence.nextval);
create table mytable(id number generated as identity);

প্রথমটি প্রথাগত উপায়ে একটি ক্রম ব্যবহার করে; দ্বিতীয়টি অভ্যন্তরীণভাবে মান পরিচালনা করে।


7

ধরে নিচ্ছি আপনার কি এসকিউএল সার্ভার পরিচয় কলামের মতো একটি কলাম বোঝাচ্ছে?

ওরাকলে, আপনি একই কার্যকারিতা অর্জনের জন্য একটি সিকিউএনসিইএস ব্যবহার করেন। আমি দেখতে পাচ্ছি যে আমি কোনও ভাল লিঙ্ক খুঁজে পেতে এবং এটি এখানে পোস্ট করতে পারি।

আপডেট: দেখে মনে হচ্ছে আপনি এটি নিজে খুঁজে পেয়েছেন। এখানে লিঙ্কটি যাইহোক: http://www.techonthenet.com/oracle/sequences.php


7

ওরাকল ডেটাবেস 12 সি পরিচয়, একটি স্বয়ং-বর্ধিত (সিস্টেম-উত্পন্ন) কলাম প্রবর্তন করেছিল। পূর্ববর্তী ডাটাবেস সংস্করণগুলিতে (11 গ্রাম অবধি), আপনি সাধারণত একটি সিকোয়েন্স এবং একটি ট্রিগার তৈরি করে একটি পরিচয় প্রয়োগ করেন। 12 সি এর পরে, আপনি নিজের টেবিল তৈরি করতে পারেন এবং কলামটি সনাক্ত করতে পারেন যা পরিচয় হিসাবে উত্পন্ন করতে হবে।

নিম্নলিখিত নিবন্ধটি কীভাবে এটি ব্যবহার করবেন তা ব্যাখ্যা করে:

পরিচয় কলাম - ওরাকল ডাটাবেস 12 সি তে একটি নতুন এন্ট্রি


5
যদিও এই লিঙ্কটি প্রশ্নের উত্তর দিতে পারে, উত্তরের প্রয়োজনীয় অংশগুলি এখানে অন্তর্ভুক্ত করা এবং রেফারেন্সের জন্য লিঙ্কটি সরবরাহ করা ভাল। লিঙ্কযুক্ত পৃষ্ঠাগুলি পরিবর্তিত হলে লিঙ্ক-শুধুমাত্র উত্তরগুলি অবৈধ হতে পারে।
সেতু

5

Triggerএবং Sequenceআপনি ক্রমিক নম্বর চাইলে ব্যবহার করা যেতে পারে যা যে কেউ সহজেই পড়তে / মনে রাখতে / বুঝতে পারে। তবে আপনি যদি এইভাবে আইডি কলামটি পরিচালনা করতে না চান (এমপআইডের মতো) এবং এই কলামটির মান খুব বেশি বিবেচ্য নয় তবে আপনি এটির মতো SYS_GUID()অটো বৃদ্ধি পেতে সারণী তৈরিতে ব্যবহার করতে পারেন ।

CREATE TABLE <table_name> 
(emp_id RAW(16) DEFAULT SYS_GUID() PRIMARY KEY,
name VARCHAR2(30));

এখন আপনার emp_idকলামটি "বিশ্বব্যাপী অনন্য সনাক্তকারী মান" গ্রহণ করবে। আপনি এ জাতীয় এম_আইডি কলাম উপেক্ষা করে সারণিতে মান সন্নিবেশ করতে পারেন।

INSERT INTO <table_name> (name) VALUES ('name value');

সুতরাং, এটি আপনার emp_idকলামে অনন্য মান .োকাবে।


সারি মুছে ফেলা হলে কী হয়? উইল SYS_GUID()তার আইডি মান হিসাবে ভাল?
কিট্টু

5

ওরাকল 12 সি দিয়ে শুরু করে সেখানে দুটি উপায়ের একটিতে পরিচয় কলামগুলির জন্য সমর্থন রয়েছে:

  1. সিকোয়েন্স + সারণী - এই সমাধানটিতে আপনি এখনও আপনার নিজের মতো একটি ক্রম তৈরি করেন তবে আপনি নিম্নলিখিত ডিডিএল ব্যবহার করেন:

    সারণী মাই টেবিল তৈরি করুন (আইডির নম্বর মাইল টেবিল_সেক। নেক্সটওয়াল , ...)

  2. কেবল সারণী - এই সমাধানে কোনও ক্রম স্পষ্টভাবে নির্দিষ্ট করা হয়নি। আপনি নিম্নলিখিত ডিডিএল ব্যবহার করবেন:

    তৈরি করুন সারণী MyTable (আইডি নম্বর উত্পন্ন পরিচয় , ...)

আপনি যদি প্রথম উপায়ে ব্যবহার করেন তবে এটি জিনিসগুলি করার বিদ্যমান পদ্ধতির সাথে পিছনে সামঞ্জস্যপূর্ণ। দ্বিতীয়টি কিছুটা সহজবোধ্য এবং বাকি আরডিএমএস সিস্টেমগুলির সাথে আরও ইনলাইন।


5

এটি বলা হয় Identity Columnsএবং এটি কেবল ওরাকল ওরাকল 12 সি থেকে পাওয়া যায়

CREATE TABLE identity_test_tab
(
   id            NUMBER GENERATED ALWAYS AS IDENTITY,
   description   VARCHAR2 (30)
);

Identity Columnsনীচে হিসাবে সন্নিবেশ উদাহরণ

INSERT INTO identity_test_tab (description) VALUES ('Just DESCRIPTION');

1 সারি তৈরি করা হয়েছে।

আপনি নীচের মত সন্নিবেশ করতে পারবেন না

INSERT INTO identity_test_tab (id, description) VALUES (NULL, 'ID=NULL and DESCRIPTION');

1 লাইনে ত্রুটি: ORA-32795: উত্পন্ন সর্বদা পরিচয় কলামে সন্নিবেশ করতে পারে না

INSERT INTO identity_test_tab (id, description) VALUES (999, 'ID=999 and DESCRIPTION');

1 লাইনে ত্রুটি: ORA-32795: উত্পন্ন সর্বদা পরিচয় কলামে সন্নিবেশ করতে পারে না

দরকারী লিঙ্ক


1

এখানে স্বয়ংক্রিয় বর্ধনের জন্য সম্পূর্ণ সমাধান আর্ট ব্যতিক্রম / ত্রুটি পরিচালনার জন্য রয়েছে, এই দ্রবণটি পশ্চাদপটে সামঞ্জস্যপূর্ণ এবং 11 জি এবং 12 সি তে কাজ করবে, বিশেষত যদি অ্যাপ্লিকেশনটি উত্পাদন হয়।

আপনার যথাযথ সারণীর নামের সাথে 'TABLE_NAME' প্রতিস্থাপন করুন

--checking if table already exisits
BEGIN
    EXECUTE IMMEDIATE 'DROP TABLE TABLE_NAME';
    EXCEPTION WHEN OTHERS THEN NULL;
END;
/

--creating table
CREATE TABLE TABLE_NAME (
       ID NUMBER(10) PRIMARY KEY NOT NULL,
       .
       .
       .
);

--checking if sequence already exists
BEGIN
    EXECUTE IMMEDIATE 'DROP SEQUENCE TABLE_NAME_SEQ';
    EXCEPTION WHEN OTHERS THEN NULL;
END;

--creating sequence
/
CREATE SEQUENCE TABLE_NAME_SEQ START WITH 1 INCREMENT BY 1 MINVALUE 1 NOMAXVALUE NOCYCLE CACHE 2;

--granting rights as per required user group
/
GRANT SELECT, INSERT, UPDATE, DELETE ON TABLE_NAME TO USER_GROUP;

-- creating trigger
/
CREATE OR REPLACE TRIGGER TABLE_NAME_TS BEFORE INSERT OR UPDATE ON TABLE_NAME FOR EACH ROW
BEGIN    
    -- auto increment column
    SELECT TABLE_NAME_SEQ.NextVal INTO :New.ID FROM dual;

    -- You can also put some other required default data as per need of your columns, for example
    SELECT SYS_CONTEXT('USERENV', 'SESSIONID') INTO :New.SessionID FROM dual;
    SELECT SYS_CONTEXT('USERENV','SERVER_HOST') INTO :New.HostName FROM dual;
    SELECT SYS_CONTEXT('USERENV','OS_USER') INTO :New.LoginID FROM dual;    
    .
    .
    .
END;
/

0

বিদ্যমান টেবিল এবং কলামে এইভাবে আমি এটি করেছি (নাম দেওয়া আইডি):

UPDATE table SET id=ROWNUM;
DECLARE
  maxval NUMBER;
BEGIN
  SELECT MAX(id) INTO maxval FROM table;
  EXECUTE IMMEDIATE 'DROP SEQUENCE table_seq';
  EXECUTE IMMEDIATE 'CREATE SEQUENCE table_seq START WITH '|| TO_CHAR(TO_NUMBER(maxval)+1) ||' INCREMENT BY 1 NOMAXVALUE';
END;
CREATE TRIGGER table_trigger
  BEFORE INSERT ON table
  FOR EACH ROW
BEGIN
  :new.id := table_seq.NEXTVAL;
END;

0
FUNCTION GETUNIQUEID_2 RETURN VARCHAR2
AS
v_curr_id NUMBER;
v_inc NUMBER;
v_next_val NUMBER;
pragma autonomous_transaction;
begin 
CREATE SEQUENCE sequnce
START WITH YYMMDD0000000001
INCREMENT BY 1
NOCACHE
select sequence.nextval into v_curr_id from dual;
if(substr(v_curr_id,0,6)= to_char(sysdate,'yymmdd')) then
v_next_val := to_number(to_char(SYSDATE+1, 'yymmdd') || '0000000000');
v_inc := v_next_val - v_curr_id;
execute immediate ' alter sequence sequence increment by ' || v_inc ;
select sequence.nextval into v_curr_id from dual;
execute immediate ' alter sequence sequence increment by 1';
else
dbms_output.put_line('exception : file not found');
end if;
RETURN 'ID'||v_curr_id;
END;

0
FUNCTION UNIQUE2(
 seq IN NUMBER
) RETURN VARCHAR2
AS
 i NUMBER := seq;
 s VARCHAR2(9);
 r NUMBER(2,0);
BEGIN
  WHILE i > 0 LOOP
    r := MOD( i, 36 );
    i := ( i - r ) / 36;
    IF ( r < 10 ) THEN
      s := TO_CHAR(r) || s;
    ELSE
      s := CHR( 55 + r ) || s;
    END IF;
  END LOOP;
  RETURN 'ID'||LPAD( s, 14, '0' );
END;

-1

ওরাকলটির 12 সিতে ক্রম এবং পরিচয় কলাম রয়েছে

http://www.oracle-base.com/articles/12c/identity-columns-in-oracle-12cr1.php#identity-columns

আমি এটি খুঁজে পেয়েছি তবে নিশ্চিত হতে পারছি না যে আরডিবি 7 হ'ল কী :


সহায়ক তথ্য এবং আকর্ষণীয় পারফরম্যান্স তুলনা। সিকোয়েন্সির জন্য ট্রিগার ব্যবহার করার চেয়ে পরিচয় কলামগুলি ব্যবহার করা ভাল।
ygoe

-1
  create trigger t1_trigger
  before insert on AUDITLOGS
  for each row
   begin
     select t1_seq.nextval into :new.id from dual;
   end;

কেবলমাত্র আমাকে কেবল আপনার টেবিলের নামের সাথে টেবিলের নাম (AUDITLOGS) এবং new.id new.column_name দিয়ে পরিবর্তন করতে হবে


-2

সম্ভবত এই সহজ স্ক্রিপ্ট চেষ্টা করুন:

http://www.hlavaj.sk/ai.php

ফলাফলটি হ'ল:

CREATE SEQUENCE TABLE_PK_SEQ; 
CREATE OR REPLACE TRIGGER TR_SEQ_TABLE BEFORE INSERT ON TABLE FOR EACH ROW 

BEGIN
SELECT TABLE_PK_SEQ.NEXTVAL
INTO :new.PK
FROM dual;
END;

3
ইউজনিওর উত্তরের চেয়ে এটি কীভাবে আলাদা? প্লাস: আপনার selectআধুনিক ওরাকল সংস্করণগুলির দরকার নেই। আপনি সহজেই ব্যবহার করতে পারেন:new.pk := TABLE_PK_SEQ.NEXTVAL
a_horse_with_no_name
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.