Programim dhe zhvillim, javascript, python, php, html

Si të rritet automatikisht një vlerë nga një kolonë kur futni një rresht të ri

E di që duket e ngjashme me disa pyetje, por shpresoj që e imja të jetë ndryshe.

Unë punoj me një bazë të dhënash Oracle

Unë dua të kem një rritje automatike në një kolonë duke përdorur

 COMPUTED column and LAST_VALUE(column) + 1

Kështu që unë kam kërkesën e mëposhtme:

ALTER TABLE schema.table (

ADD SK NUMBER ALWAYS AS (LAST_VALUE(SK)+1)

);

A do ta bëjë këtë mashtrim vetëm me këtë?

Apo duhet të shtoj një fjali FOR EACH ROW në mënyrë që të përshtatet me nevojën time për rritje automatike?

EDITIM Sipas komentit të G00dy:

Sekuenca:

create sequence SK_SEQUENCES
increment by 1
start with 1
  nomaxvalue
  minvalue 1
nocycle
order
keep;

Tavolina :

create table schema.test(
isCurrent CHAR(10),
SK NUMBER
);     

Nëse e kuptoj komentin nga @g00dy,

Më duhet të shtoj Sekuencën si vlerë për kolonën time SK,

kështu që unë kam këtë:

insert into schema.test(SK)
values (SK_SEQUENCES.nextval)

Atëherë në rregull, funksionon

Por kur po i shtoj vlerë kolonës isCurrent,

nuk ka auto_increment në kolonën SK

Unë mendoj, për të pasur auto_increment, më duhet të krijoj një shkas.

Ndoshta do të më duhet të përdor këmbëzën/sekuencën për të rregulluar problemin tim, por nuk dua..

19.06.2018

  • Unë mendoj se ju duhet vetëm të krijoni një sekuencë dhe të përdorni: sequence_name.nexval si vlerë për kolonën në të cilën po futni. Sekuenca është thjesht gjenerues i numrave vijues, i cili përdoret në insert deklaratat për të dhënë numra të njëpasnjëshëm, sa herë që përdoret .nextval. Brenda të njëjtit sesion mund ta ripërdorni këtë vlerë (pasi keni thirrur vetëm .nextval), duke përdorur .currval. Më shumë informacion këtu: docs.oracle.com/cd/ B28359_01/server.111/b28286/. Shpresoj se kjo ndihmon. 19.06.2018
  • @g00dy sekuenca pa shkas do të bëjë mashtrimin (rritje automatike kur futet rreshti i ri) ? Do të përpiqem, faleminderit për ndihmën tuaj. Unë mund të kthej rezultatin tim :-) 19.06.2018
  • Nuk ka nevojë të renditni të gjitha parazgjedhjet kur krijoni një sekuencë. create_sequence sk_seq do ta bëjë atë. 19.06.2018
  • @WilliamRobertson në rregull, do ta vërej këtë, faleminderit 19.06.2018

Përgjigjet:


1

Jo, nuk do të funksionojë.

Së pari, sintaksa është generated always, jo vetëm always, dhe nuk ka kllapa rreth klauzolës add. Megjithatë, kjo ende nuk do të funksionojë:

alter table demo
add sk integer generated always as (last_value(sk)+1);

dështon me:

ORA-30484: missing window specification for this function

sepse last_value është një funksion analitik që duhet të jetë pjesë e një pyetjeje dhe të ketë një specifikim të dritares si over (partition by xxx order by yyy). Ju nuk mund të përdorni një funksion analitik si parazgjedhje të kolonës.

Nga Oracle 12.1 ju mund të përcaktoni një kolonë identiteti si:

alter table demo
add sk integer generated always as identity;

Në versionet e mëparshme të Oracle, do t'ju duhet ose të specifikoni sequence.nextval kur futni, ose të krijoni një shkas si

create sequence sk_seq;

create or replace trigger demo_generate_sk_trg
before insert on demo for each row
begin
    :new.dummy := sk_seq.nextval;
end;
/
19.06.2018
  • A ka ndonjë përfitim në përdorimin e këmbëzës në vend të nextval në versionet më të vjetra? 20.06.2018
  • Nuk jam i sigurt se çfarë do të thuash - ti përdor një sekuencë në çdo mënyrë. Një nxitës ju kursen ta kodoni në mënyrë eksplicite në deklarata të shumta insert, nëse keni më shumë se një. 20.06.2018
  • Materiale të reja

    Masterclass Coroutines: Kapitulli-3: Anulimi i korutinave dhe trajtimi i përjashtimeve.
    Mirë se vini në udhëzuesin gjithëpërfshirës mbi Kotlin Coroutines! Në këtë seri artikujsh, unë do t'ju çoj në një udhëtim magjepsës, duke filluar nga bazat dhe gradualisht duke u thelluar në..

    Faketojeni derisa ta arrini me të dhënat false
    A e gjeni ndonjëherë veten duke ndërtuar një aplikacion të ri dhe keni nevojë për të dhëna testimi që duken dhe duken më realiste ose një grup i madh të dhënash për performancën e ngarkesës...

    Si të përdorni kërkesën API në Python
    Kërkesë API në GitHub për të marrë depot e përdoruesve duke përdorur Python. Në këtë artikull, unë shpjegoj procesin hap pas hapi për të trajtuar një kërkesë API për të marrë të dhëna nga..

    Një udhëzues hap pas hapi për të zotëruar React
    Në këtë artikull, do të mësoni se si të krijoni aplikacionin React, do të mësoni se si funksionon React dhe konceptet thelbësore që duhet të dini për të ndërtuar aplikacione React. Learning..

    AI dhe Psikologjia — Pjesa 2
    Në pjesën 2 të serisë sonë të AI dhe Psikologji ne diskutojmë se si makineritë mbledhin dhe përpunojnë të dhëna për të mësuar emocione dhe ndjenja të ndryshme në mendjen e njeriut, duke ndihmuar..

    Esencialet e punës ditore të kodit tim VS
    Shtesat e mia të preferuara - Git Graph 💹 Kjo shtesë është vërtet e mahnitshme, e përdor përpara se të filloj të punoj për të kontrolluar dy herë ndryshimet dhe degët më të fundit, mund të..

    Pse Python? Zbulimi i fuqisë së gjithanshme të një gjiganti programues
    Në peizazhin gjithnjë në zhvillim të gjuhëve të programimit, Python është shfaqur si një forcë dominuese. Rritja e tij meteorike nuk është rastësi. Joshja e Python qëndron në thjeshtësinë,..