Te whai i nga tapuwae o Highload++ Siberia 2019 - 8 nga mahi i runga i Oracle

Kia pai!

I te Pipiri 24-25, i tu te hui Highload++ Siberia 2019 ki Novosibirsk. I reira ano a matou tama. pūrongo "Ko nga papaa raraunga ipu Oracle (CDB/PDB) me o raatau whakamahinga mo te whanaketanga rorohiko", ka whakaputahia e matou he tuhinga tuhinga i muri tata nei. He pai, mihi olegbunin mo te whakahaere, me nga tangata katoa i tae mai.

Te whai i nga tapuwae o Highload++ Siberia 2019 - 8 nga mahi i runga i Oracle
I roto i tenei panui, e hiahia ana matou ki te whakapuaki ki a koe nga raru i pa ki a matou i to matou booth kia taea ai e koe te whakamatautau i to matauranga Oracle. Kei raro iho i te tapahi e 8 nga rapanga, nga whiringa whakautu me nga whakamaramatanga.

He aha te uara raupapa morahi ka kitea e tatou hei hua o te mahi i te tuhinga e whai ake nei?

create sequence s start with 1;
 
select s.currval, s.nextval, s.currval, s.nextval, s.currval
from dual
connect by level <= 5;

  • 1
  • 5
  • 10
  • 25
  • Kao, ka puta he hapa

WhakautuE ai ki nga tuhinga a Oracle (i whakahuahia mai i te 8.1.6):
I roto i te tauākī SQL kotahi, ka whakanuia e Oracle te raupapa kotahi anake mo ia rarangi. Mena he nui ake i te kotahi nga tohutoro ki tetahi korero mo NEXTVAL mo tetahi raupapa, ka whakanuia e Oracle te raupapa kia kotahi, ka whakahoki i te uara kotahi mo nga huihuinga katoa o NEXTVAL. Mena kei roto i tetahi tauākī he tohutoro ki te CURRVAL me NEXTVAL, ka whakanuia e Oracle te raupapa ka whakahoki i te uara rite mo te CURRVAL me NEXTVAL ahakoa te ota i roto i te tauākī.

Ko te kupu, ka rite te uara morahi ki te maha o nga rarangi, ara 5.

E hia nga rarangi kei te ripanga na runga i te whakahaere i te tuhinga e whai ake nei?

create table t(i integer check (i < 5));
 
create procedure p(p_from integer, p_to integer) as
begin
    for i in p_from .. p_to loop
        insert into t values (i);
    end loop;
end;
/
 
exec p(1, 3);
exec p(4, 6);
exec p(7, 9);

  • 0
  • 3
  • 4
  • 5
  • 6
  • 9

WhakautuE ai ki nga tuhinga a Oracle (i whakahuahia mai i te 11.2):

I mua i te mahi i tetahi tauākī SQL, ka tohu a Oracle i tetahi waahi tiaki (kaore i te waatea ki a koe). Na, ki te rahua te korero, ka huri aunoa a Oracle me te whakahoki i te waehere hapa e tika ana ki SQLCODE i roto i te SQLCA. Hei tauira, ki te he te tauākī INSERT mā te ngana ki te kōkuhu uara tārite ki tētahi taupū ahurei, ka huri whakamuri te tauākī.

Ko te waea ki a HP mai i te kiritaki ka whakaarohia, ka tukatukahia hei korero kotahi. No reira, ka oti pai te waea tuatahi a HP, kua whakauruhia e ia nga rekoata e toru; ka mutu te waea tuarua a te HP me te hapa ka huri i te rekoata tuawha i taea e ia te whakauru; ka rahua te karanga tuatoru, a e toru nga rekoata kei te tepu.

E hia nga rarangi kei te ripanga na runga i te whakahaere i te tuhinga e whai ake nei?

create table t(i integer, constraint i_ch check (i < 3));
 
begin
    insert into t values (1);
    insert into t values (null);
    insert into t values (2);
    insert into t values (null);
    insert into t values (3);
    insert into t values (null);
    insert into t values (4);
    insert into t values (null);
    insert into t values (5);
exception
    when others then
        dbms_output.put_line('Oops!');
end;
/

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

WhakautuE ai ki nga tuhinga a Oracle (i whakahuahia mai i te 11.2):

Ma te herenga taki ka taea e koe te tautuhi i tetahi ahuatanga me tutuki ia rarangi o te ripanga. Hei whakaea i te herenga, me hanga e ia rarangi o te ripanga te tikanga he TIKA, he moohio ranei (na te koretake). Ina arotake a Oracle i te herenga arowhai mo tetahi rarangi, ko nga ingoa pou kei roto i te ahuatanga ka tohu ki nga uara o te pou kei taua rarangi.

No reira, ka paahi te uara null i te haki, ka mahia paitia te poraka ingoamuna tae noa ki te ngana ki te whakauru i te uara 3. I muri i tenei, ka whakakorehia e te poraka whakahaere hapa te tuunga, karekau ka hoki whakamuri, a e wha nga rarangi ka toe ki te tepu me nga uara 1, null, 2 me te null ano.

Ko ēhea uara takirua ka rite te nui o te mokowā i roto i te poraka?

create table t (
    a char(1 char),
    b char(10 char),
    c char(100 char),
    i number(4),
    j number(14),
    k number(24),
    x varchar2(1 char),
    y varchar2(10 char),
    z varchar2(100 char));
 
insert into t (a, b, i, j, x, y)
    values ('Y', 'Вася', 10, 10, 'Д', 'Вася');

  • A me X
  • B me Y
  • C me K
  • C me Z
  • K me Z
  • Ko ahau me J
  • J me X
  • Kua whakarārangitia katoa

WhakautuAnei nga waahanga o nga tuhinga (12.1.0.2) mo te penapena momo momo raraunga ki Oracle.

Momo Raraunga CHAR
Ko te momo raraunga CHAR e whakapūtā ana i te aho pūāhua roa i roto i te huinga pūāhua pātengi raraunga. Ka whakapūtā koe i te huinga pūāhua pātengi raraunga ina waihanga koe i tō pātengi raraunga. Ka whakarite a Oracle ko nga uara katoa e rongoa ana i roto i te pou CHAR te roa kua tohua e te rahi i roto i nga tohutoro roa kua tohua. Mēnā ka kōkuhu koe i tētahi uara he poto ake i te roa o te tīwae, kātahi ka pania-pātea e Oracle te uara ki te roa o te tīwae.

VARCHAR2 Momo Raraunga
Ko te momo raraunga VARCHAR2 ka whakapūtā i tētahi aho pūāhua taurangi-roa i te huinga pūāhua pātengi raraunga. Ka whakapūtā koe i te huinga pūāhua pātengi raraunga ina waihanga koe i tō pātengi raraunga. Ka penapena a Oracle i tetahi uara tohu ki roto i te pou VARCHAR2 kia rite tonu ki taau e whakarite ana, me te kore he papa-a-papa, mena ka kore te uara e neke ake i te roa o te pou.

NUMBER Momo Raraunga
Ko te momo raraunga NUMBER ka pupuri i te kore me nga tau kua whakaritea pai me te kino me nga uara tuturu mai i te 1.0 x 10-130 ki te 1.0 x 10126 engari kaua e whakauru. 1.0 x 10126, ka whakahoki a Oracle i te hapa. Ko ia uara NUMBER me 1 ki te 22 paita. Ma te whakaaro ki tenei, ka taea te tatau te rahi o te pou i roto i nga paita mo tetahi uara raraunga tau NUMBER(p), inaa ko te p te tino tika o tetahi uara, ka taea te tatau ma te whakamahi i te tauira e whai ake nei: ROUND((roa(p)+s)/2))+1 ko te s he rite ki te kore mena he pai te tau, he rite te s ki te 1 mena he toraro te tau.

I tua atu, me tango tetahi waahanga mai i nga tuhinga mo te penapena uara Null.

Ko te kore he uara i roto i te tīwae. Ko nga kohungahunga e tohu ana i nga raraunga ngaro, kaore e mohiotia, kaore ranei e tika ana. Ka penapena nga koha ki roto i te papaa raraunga mena ka taka ki waenga i nga pou me nga uara raraunga. I enei ahuatanga, me 1 paita hei penapena i te roa o te pou (kore). Ko nga whaikorero i te rarangi kaore e hiahiatia he rokiroki na te mea ka tohu te pane haupae hou he kore nga toenga o te rarangi o mua. Hei tauira, ki te kore nga pou whakamutunga e toru o te ripanga, karekau he raraunga e penapena mo enei pou.

I runga i enei raraunga, ka hanga whakaaro tatou. Ki ta matou whakaaro kei te whakamahi te paataka raraunga AL32UTF8 whakawaehere. I roto i tenei whakawaehere, ka noho nga reta Russian 2 paita.

1) A me X, ko te uara o te mara a 'Y' ka 1 te paita, ko te uara o te mara x 'D' ka 2 nga paita
2) B me Y, 'Vasya' i roto i te b ka kapi te uara me nga mokowhiti ki te 10 nga tohu ka 14 nga paita, ko 'Vasya' i te d ka 8 nga paita.
3) C me K. Ko nga mara e rua te uara NULL, i muri i a raatau he waahi nui, no reira ka noho ki te 1 paita.
4) C me Z. Ko nga mara e rua te uara NULL, engari ko te mara Z te mea whakamutunga o te ripanga, no reira kare e roa te mokowhiti (0 paita). Ka noho te mara C 1 paita.
5) K me Z. He rite ki te keehi o mua. Ko te uara o te mara K ka noho ki te 1 paita, i te Z – 0.
6) I me J. E ai ki nga tuhinga, ka 2 nga paita e rua nga uara. Ka tatauhia te roa ma te whakamahi i te tauira i tangohia mai i nga tuhinga: porowhita( (1 + 0)/2) +1 = 1 + 1 = 2.
7) J me X. Ko te uara o te mara J ka 2 paita, ko te uara o te mara X ka 2 paita.

Katoa, ko nga whiringa tika ko: C me K, I me J, J me X.

He aha te ahua o te huinga huinga o te tohu T_I?

create table t (i integer);
 
insert into t select rownum from dual connect by level <= 10000;
 
create index t_i on t(i);

  • Tata ki te tekau
  • Tata ki nga rau
  • Mo nga mano
  • Tata ki te tekau mano

WhakautuE ai ki nga tuhinga a Oracle (i whakahuahia mai i te 12.1):

Mo te taurangi B-rakau, ka ine te tauwehe whakarōpūtanga taupū i te whakarōpū-a-tinana o nga rarangi e pa ana ki te uara taupū.

Ko te tauwehe whakaropu taurangi ka awhina i te kaihoroi ki te whakatau mena he pai ake te karapa taurangi, te karapa tepu katoa ranei mo etahi patai). Ko te iti o te huinga huinga e tohu ana i te karapa taurangi pai.

Ko te tauwehe huinga e tata ana ki te maha o nga paraka i roto i te ripanga e tohu ana kei te raupapa tinana nga rarangi i roto i nga poraka ripanga e te taviri taupū. Mēnā ka mahia e te pātengi raraunga he matawai ripanga katoa, kātahi ka tangohia e te pātengi raraunga ngā haupae i te mea e penapena ana ki te kōpae kua kōmakahia e te kī taupū. Ko te tauwehe huinga e tata ana ki te maha o nga rarangi e tohu ana ka marara noa nga rarangi puta noa i nga poraka papaa raraunga e pa ana ki te tohu tohu. Mēnā ka mahia e te pātengi raraunga he matawai ripanga katoa, karekau te pātengi raraunga e tiki i ngā haupae i roto i te raupapa kōmaka mā tēnei kī taupū.

I tenei keehi, he pai te whakariterite i nga raraunga, no reira ka rite te tauwehe whakahiato ki te tata ranei ki te maha o nga poraka e nohoia ana i te ripanga. Mo te rahi poraka paerewa o te 8 kiropaita, ka taea e koe te tumanako kia kotahi mano nga uara tau whaiti ka uru ki roto i te poraka kotahi, no reira ko te maha o nga poraka, ka mutu, ko te tauwehe huinga ka noho. tata ki te tekau.

He aha nga uara o te N ka mahia paitia te tuhinga e whai ake nei i roto i te papaunga raraunga me nga tautuhinga paerewa?

create table t (
    a varchar2(N char),
    b varchar2(N char),
    c varchar2(N char),
    d varchar2(N char));
 
create index t_i on t (a, b, c, d);

  • 100
  • 200
  • 400
  • 800
  • 1600
  • 3200
  • 6400

WhakautuE ai ki nga tuhinga a Oracle (i whakahuahia mai i te 11.2):

Tepe Raraunga Raraunga arorau

Te nama take
Momo Tepe
Te Uara Tepe

Tautohu
Rahi tapeke o te tīwae taupū
75% o te rahi o te paraka raraunga ka iti ake etahi o runga

No reira, kaua e neke ake i te 6Kb te rahi katoa o nga pou kua tohua. Ko te aha ka puta ka whakawhirinaki ki te whakawaehere turanga kua tohua. Mo te whakawaehere AL32UTF8, ka taea e te tangata kotahi te noho ki te 4 paita te nui rawa, no reira i te kino rawa atu, ka uru te 6 kiropaita ki te 1500 pea nga tohu. Na reira, ka whakakorehia e Oracle te hanga taupū i te N = 400 (ina te mea ko te roanga o te keehi kino rawa atu ko te 1600 pūāhua * 4 paita + roa rowid), i N = 200 (iti iho ranei) te hanga i te taurangi ka mahi kaore he raru.

Ko te kaiwhakahaere INSERT me te tohu APPEND i hangaia hei uta raraunga ki te aratau tika. Ka aha mehemea ka hoatu ki te teepu e iri ai te keu?

  • Ka utaina nga raraunga ki te aratau tika, ka mahi te keu i runga i te tumanako
  • Ka utaina nga raraunga ki te aratau tika, engari kaore te keu e mahia
  • Ka utaina nga raraunga i roto i te aratau tikanga, ka mahi te keu kia rite ki te tikanga
  • Ka utaina nga raraunga i roto i te aratau tikanga, engari e kore e mahia te keu
  • Kaore e utaina nga raraunga, ka tuhia he hapa

WhakautuKo te tikanga, he patai tenei mo te arorau. Hei kimi i te whakautu tika, ka whakaaro ahau ki te tauira whakaaro e whai ake nei:

  1. Ko te whakauru i roto i te aratau tika ka mahia ma te hanga tika i tetahi poraka raraunga, ma te whakawhiti i te miihini SQL, e whakarite ana i te tere tere. Na, ko te whakarite i te mahi o te keu he tino uaua, ki te kore e taea, a kaore he take i roto i tenei, na te mea ka tino whakahekehia te whakauru.
  2. Ki te kore e mahia te keu ka puta te meka, mena he rite nga raraunga kei te ripanga, ka whakawhirinaki te ahua o te paataka raraunga (etahi atu ripanga) ki te aratau i whakauruhia ai enei raraunga. Ma tenei ka ngaro te pono o nga raraunga kaore e taea te whakamahi hei otinga mo te whakaputa.
  3. Ko te kore e taea te mahi i te mahi i tonohia ka kiia he hapa. Engari i konei me mahara tatou ko te APPEND he tohu, a ko te arorau whanui o nga tohu ka whakaarohia mehemea ka taea, engari ki te kore, ka mahia te kaiwhakahaere me te kore e whai whakaaro ki te tohu.

Na ko te whakautu e tumanakohia ana ka utaina nga raraunga i roto i te aratau noa (SQL), ka pupuhi te keu.

E ai ki nga tuhinga a Oracle (i whakahuahia mai i te 8.04):

Ko te takahi i nga here ka puta te tauākī ki te mahi rangatū, ma te whakamahi i te ara whakauru tikanga, kaore he whakatupato, he karere hapa ranei. Ko te herenga ki nga tauākī ka uru atu ki te ripanga kotahi neke atu i te kotahi i roto i te tauwhitinga, ka puta he karere hapa.
Hei tauira, mena kei te tepu nga keu, te tapatahi tohutoro ranei, ka warewarehia te tohu APPEND ina ngana koe ki te whakamahi i te INSERT uta-tikanga (raupapa, whakarara ranei), me te tohu whakarara, rara ranei, mena he.

Ka aha ina mahia te tuhinga e whai ake nei?

create table t(i integer not null primary key, j integer references t);
 
create trigger t_a_i after insert on t for each row
declare
    pragma autonomous_transaction;
begin
    insert into t values (:new.i + 1, :new.i);
    commit;
end;
/
 
insert into t values (1, null);

  • Te otinga angitu
  • I rahua na te hapa wetereo
  • Hapa: Ko te Whakawhitinga Motuhake Kaore i te Whaimana
  • Hapa e pa ana ki te nui ake o te nui o te kohanga waea
  • Hapa Takahanga Kī Tawahi
  • Hapa e pa ana ki nga raka

WhakautuHe tika te hanga o te ripanga me te keu, a kia kaua tenei mahi e raru. Ka whakaaetia ano nga whakawhitinga motuhake i roto i te keu, ki te kore e taea te takiuru, hei tauira.

Whai muri i te whakaurunga o te rarangi tuatahi, na te pai o te puhipuhi keu ka whakaurua te rarangi tuarua, ka puhia ano te keu, ka whakauru i te rarangi tuatoru, ka pera tonu tae noa ki te rahua te korero na te nui rawa o te kohanga o nga waea. Heoi ano, ka uru mai ano tetahi atu mea mohio. I te wa i mahia ai te keu, kaore ano kia oti te tuku mo te rekoata whakauru tuatahi. Na reira, ka ngana te keu e rere ana i roto i te tauwhitinga motuhake ki te whakauru ki roto i te ripanga i tetahi rarangi e tohutoro ana ki tetahi taviri ke ki tetahi rekoata kaore ano kia mahia. Ka puta tenei i roto i te tatari (ko te tauwhitinga motuhake e tatari ana mo te whakawhitinga matua ki te mahi ki te kite mehemea ka taea e ia te whakauru i nga raraunga) me te wa ano ka tatari te tauwhitinga matua mo te hokohoko motuhake kia mahi tonu i muri i te keu. Ka puta he kati, ka mutu, ka whakakorehia te tauwhitinga motuhake na runga i nga take e pa ana ki nga raka.

Ko nga kaiwhakamahi kua rehita anake ka uru ki te rangahau. Waitohu maitēnā.

He uaua ki te?

  • Ka rite ki nga maihao e rua, ka whakatau tika ahau i nga mea katoa.

  • Ehara i te tino, i he ahau i runga i nga patai e rua.

  • I whakaoti tika ahau i te haurua.

  • E rua nga wa i whakaarohia e au te whakautu!

  • Ka tuhi ahau i roto i nga korero

14 nga kaiwhakamahi i pooti. 10 nga kaiwhakamahi i aukati.

Source: will.com

Tāpiri i te kōrero