рдореИрдВрдиреЗ рдкреЛрд╕реНрдЯ рдХреЛ рдзрдиреНрдпрд╡рд╛рдж рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЫреЛрдЯреЗ рдиреЛрдЯреЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛
рдкреАрдПрд▓ / рдПрд╕рдХреНрдпреВрдПрд▓ рдореЗрдВ рдЕрдЪреНрдЫреА рдЖрджрддреЗрдВ , рдЬрд┐рди рд╕реБрдЭрд╛рд╡реЛрдВ рдкрд░ рдореИрдВ рд╡рд┐рдЪрд╛рд░ рдХрд░реВрдВрдЧрд╛ред
рдЗрд╕ рднрд╛рдЧ рдореЗрдВ рд╣рдо рдЪрд░реНрдЪрд╛ рдХрд░реЗрдВрдЧреЗ:
- % TYPE /% ROWTYPE рдХреА рдмрд╛рд░реАрдХрд┐рдпрд╛рдБ
- рдЕрдкрдбреЗрдЯ рдХреЗ рд▓рд┐рдП рдЪрдпрди рдХрд░реЗрдВ
- рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ
1.% TYPE /% ROWTYPE рдХреА рдорд╛рддреНрд░рд╛
рдПрдХ рдкрд░реАрдХреНрд╖рдг рдорд╛рдорд▓рд╛ рдмрдирд╛рдПрдВ - рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреА рдЗрдВрдЯреЗрдЧрд░ рдХреЗ рд╕рд╛рде рдПрдХ рдкреНрд▓реЗрдЯ рдмрдирд╛рдПрдВ рдФрд░ рдЗрд╕рдореЗрдВ рдПрдХ рдкрд░реАрдХреНрд╖рдг рдорд╛рди рдЬреЛрдбрд╝реЗрдВ:
create table test_integer(a integer );<br> create type integer_table as table of integer ;<br>/<br> insert into test_integer values (1E125);<br> commit ;<br> select * from test_integer;
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрд░реНрде рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдбрд╛рд▓рд╛ рдЧрдпрд╛ рд╣реИред рдФрд░ рдЕрдм рдЗрд╕реЗ pl / sql рдмреНрд▓реЙрдХ рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ:
declare <br> l_a test_integer.a%type;<br> begin <br> select a into l_a from test_integer;<br> dbms_output.put_line( ' , =' || l_a);<br> exception <br> when others then <br> dbms_output.put_line( ' ! ' ||sqlerrm);<br> end ;<br>/
рд╕рдм рдмреБрд░рд╛ рд╣реИ! ORA-06502: PL / SQL: рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдпрд╛ рдорд╛рди рддреНрд░реБрдЯрд┐: рд╕рдВрдЦреНрдпрд╛ рдкрд░рд┐рд╢реБрджреНрдзрддрд╛ рдмрд╣реБрдд рдмрдбрд╝реА рд╣реИ
PL / SQL рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкреВрд░реНрдг рд╣реБрдИред
рдмреАрддрд╛ рд╣реБрдЖ: 00: 00: 00.02
рддреНрд░реБрдЯрд┐ рдХрд╛ рдХрд╛рд░рдг рдЗрд╕ рддрдереНрдп рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИ рдХрд┐ SQL рдореЗрдВ INTEGER рдирдВрдмрд░ (*, 0) рд╣реИ - рдПрдХ рдлреНрд▓реЛрдЯрд┐рдВрдЧ-рдкреЙрдЗрдВрдЯ рдирдВрдмрд░ рд╕реНрдХреЗрд▓ = 0 рдХреЗ рд╕рд╛рде, рдФрд░ PL / SQL рдореЗрдВ INTEGER "SUBTYPE INTEGER IS NUMBER (38,0) рд╣реИ;"
рдЙрд╕ рд▓реЗрдЦ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рд╣реИ "
рд╕реГрдЬрд┐рдд рдЯрд╛рдЗрдк рдЖрдИрдбреА_рд▓рд┐рд╕реНрдЯ рдСрдл рдЯреЗрдмрд▓ рдСрдл рдЗрдВрдЯреАрдЬрд░ ?"
рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рдпрд╣ pl / sql рдкреВрд░реНрдгрд╛рдВрдХреЛрдВ рдХрд╛ рдПрдХ рд╕рдВрдЧреНрд░рд╣ рд╣реИ:
DB1> рдШреЛрд╖рдгрд╛
2 l_int_tab рдкреВрд░реНрдгрд╛рдВрдХ_рдЯреЗрдмрд▓;
3 рд╢реБрд░реВ
4 рдПрдХ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ
5 рдмрд▓реНрдХ l_int_tab рдореЗрдВ рдЗрдХрдЯреНрдард╛ рд╣реЛрддреЗ рд╣реИрдВ
6 рд╕реЗ test_integer;
7 dbms_output.put_line ('рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИ!');
8 рдЕрдкрд╡рд╛рдж рддрдм рдЬрдм рдЕрдиреНрдп
9 dbms_output.put_line ('рд╕рдм рдХреБрдЫ рдЦрд░рд╛рдм рд╣реИ! рдЕрдкрд╡рд╛рдж:' || sqlerrm)?
10 рдЕрдВрдд;
11 /
рд╕рдм рдмреБрд░рд╛ рд╣реИ! рдЕрдкрд╡рд╛рдж: ORA-06502: PL / SQL: рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдпрд╛ рдореВрд▓реНрдп рддреНрд░реБрдЯрд┐: рдереЛрдХ рдмрд╛рдБрдз: рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рддреНрд░реБрдЯрд┐
PL / SQL рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкреВрд░реНрдг рд╣реБрдИред
рдмреАрддрд╛ рд╣реБрдЖ: 00: 00: 00.00
Id_list рдкреНрд░рдХрд╛рд░ рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдкреВрд░реНрдгрд╛рдВрдХ_ рд░реВрдк рдореЗрдВ рдмрдирд╛рдпрд╛ рд╣реИ, _TABLE рдкреЛрд╕реНрдЯрдлрд┐рдХреНрд╕ рдХреЗ рд╕рд╛рде рд╕рдВрдЧреНрд░рд╣ рдкреНрд░рдХрд╛рд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд┐рд░реНрдл рдореЗрд░реА рдЗрдЪреНрдЫрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВ рдЖрдорддреМрд░ рдкрд░ рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдЯреЗрдмрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рдХрд╛рд░ рдирд╣реАрдВ рдмрдирд╛рддрд╛ рд╣реВрдВ_рдирд╛рдо% рдкрдВрдХреНрддрд┐рдкрдЯреНрдЯреА, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдЕрдХреНрд╕рд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдпрд╛ рдпрджрд┐ рдЗрди рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдФрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╡реИрд╕реЗ, рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ oracle <11g рд╣реИ рдФрд░ рдЖрдк рдкреИрдХреЗрдЬ рдореЗрдВ рдЯрд╛рдЗрдк рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рд╕рд░реНрдХрд┐рдЯ рд▓реЗрд╡рд▓ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░реНрд╕ рдпрд╛ рдлрд╝реАрд▓реНрдбреНрд╕ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ "рдорд▓реНрдЯреА-рд╡реИрд▓реНрдпреВрдПрдмрд▓" рдЯрд╛рдЗрдк рдирд╛рдореЛрдВ рдХреЗ рд╕рд╛рде рд╕рд░реНрдХрд┐рдЯ рд╕реНрддрд░ рдкрд░ рдЯрд╛рдЗрдк рдХрд░рддрд╛ рд╣реИ: SYS -PLSQL_2906526_17_1, 11g рдореЗрдВ рдпреЗ рдЯрд╛рдЗрдк рдмрд╕ рд╣реИрдВ рдЫрд┐рдкрд╛ рд╣реБрдЖ рд╣реИред2. рдЕрджреНрдпрддрди рдХреЗ рд▓рд┐рдП рдЪрдпрди рдХрд░реЗрдВ
рдпрд╣ рдХреЛрдИ рд░рд╣рд╕реНрдп рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЕрдЧрд░ рд╣рдо рдЪрдпрди рдореЗрдВ рдХреБрдЫ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рд╕рдВрдкреВрд░реНрдг рдкрдВрдХреНрддрд┐рдпреЛрдВ рдпрд╛ рдлрд╝реАрд▓реНрдбреНрд╕ рдХреЛ рдмреНрд▓реЙрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдбреЗрдЯ рдХреЗ рд▓рд┐рдП рдЪрдпрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЪрд░реНрдЪрд╛ рдХреЗ рддрд╣рдд рд▓реЗрдЦ рд╕реЗ рдЙрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдЕрджреНрдпрддрди рдЦрдВрдб рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдкрд░рд┐рдгрд╛рдо рдирд╣реАрдВ рд╣реИ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдЙрди рдХрд░реНрдордЪрд╛рд░рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╡реЗрддрди рдореЗрдВ рдмрджрд▓рд╛рд╡, рдпрджрд┐ рд╡рд┐рднрд╛рдЧ рдПрдХ рд╕рдорд╛рдирд╛рдВрддрд░ рд╕рддреНрд░ рдореЗрдВ рдмрджрд▓ рдЧрдпрд╛, рдПрдХ рдФрд░ рд╡реЗрддрдирдорд╛рди рдХреЗ рд╕рдорд╛рдирд╛рдВрддрд░ рд╡реЗрддрди рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╡реЗрддрди рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдиреБрдХрд╕рд╛рди 1 рдХреЗ рдЕрдиреБрдХреНрд░рдо рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╣реЛрддрд╛ рд╣реИ) 1 рдпрд╛ рджреВрд╕рд░рд╛ рд╕рддреНрд░), рдЗрд╕рд▓рд┐рдП рдЗрд╕ рддрд░рд╣ рд╕реЗ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП:
SELECT e.employee_id,e.salary,e.hire_date<br> FROM employee e <br> WHERE department_id = dept_in<br> FOR UPDATE OF e.salary;
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ "
рдИ.рд╕рд╛рд▓рд░реА " рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреЗрд╡рд▓ рдИ.рд╕реИрд▓рд░реА рдлреАрд▓реНрдб рдХреЛ рдмреНрд▓реЙрдХ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ (рдпрд╣ рдЕрд╕рдВрднрд╡ рд╣реИ), рдИ рдЕрд▓рд┐рдпрд╛рд╕ рдХреЗ рд╕рд╛рде рдЯреЗрдмрд▓ рдХреА рд╕рднреА рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдмреНрд▓реЙрдХ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:
OF рдХреЗ рдХреНрд▓реЙрдЬ рдореЗрдВ рдХреЙрд▓рдо рдХреЗрд╡рд▓ рдпрд╣ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рдХреМрди рд╕реА рдЯреЗрдмрд▓ рдпрд╛ рд╡реНрдпреВ рд░реЛ рд╣реИрдВред
рдпрд╣рд╛рдБ рдИред рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХрд╛ рдЕрд░реНрде рдХреЗрд╡рд▓ рдпрд╣ рд╣реИ рдХрд┐ рдХрд┐рд╕рдХреЗ рд╕рд╛рде рдмрдпрд╛рди рдкреБрдирд░рд╛рд░рдВрдн рддрдВрддреНрд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реИ, рдФрд░ рдЗрд╕рд▓рд┐рдП, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЬреИрд╕рд╛ рдХрд┐ рд╕рднреА рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЬрдм рдЖрдкрдХреЛ FROM рд╕реЗ рд╕рднреА рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреА рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рд▓реЙрдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдФрд░ рдЪрд░ рдлрд╝реАрд▓реНрдбреНрд╕ рдХреЛ рдЪрдпрдирд┐рдд рд╕реВрдЪреА рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЖрдк "рдУрдЯ" рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ... "
рд╡реИрд╕реЗ, рдЕрдкрдбреЗрдЯ рдХреЗ рд▓рд┐рдП рдЖрдк ORA-00060 рдореЗрдВ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ: рдЧрддрд┐рд░реЛрдз рдХрд╛ рдкрддрд╛ рдЪрд▓рд╛ред
рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
create table test_integer<br>pctfree 99<br>pctused 1<br> as <br> select level id,<br> trunc(10*dbms_random. value ) val,<br> rpad( 'x' ,100) padding<br> from dual connect by level <=100<br>/<br> create index test_indeger_idx on test_integer(id)<br>/<br> exec dbms_stats.gather_table_stats(ownname => user ,tabname => 'TEST_INTEGER' , cascade => true );
рджреЗрд░реА рдХрд╛ рдЕрдиреБрдХрд░рдг рдПрдХ рд╕рдорд╛рд░реЛрд╣ рд╣реЛрдЧрд╛:
create or replace function integer_delay(p_i in integer ,p_interval in integer )<br> return integer <br> is <br> begin <br> dbms_lock.sleep(seconds => p_interval);<br> return p_i;<br> end ;<br>
рдФрд░ рд╕рдорд╛рдирд╛рдВрддрд░ рд╕рддреНрд░реЛрдВ рдореЗрдВ рдЪрд▓рд╛рдПрдВ:
1:
begin <br> for rec in (<br> select --+ index (test_integer_idx)<br> id,val<br> from test_integer<br> where integer_delay(id,1) in (100,30,1)<br> order by id desc <br> for update <br> )<br> loop<br> dbms_output.put_line(rec.id);<br> end loop;<br> commit ;<br> end ;
2ред
begin <br> for rec in (<br> select --+ index (test_integer_idx)<br> id,val<br> from test_integer<br> where integer_delay(id,1) in (100,30,1)<br> order by id desc <br> for update <br> )<br> loop<br> dbms_output.put_line(rec.id);<br> end loop;<br> commit ;<br> end ;
рдХрднреА-рдХрднреА рдЬрдм рдЧрддрд┐ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реЛрддреА рд╣реИ, рддреЛ рдЖрдк рдЕрдкрдбреЗрдЯ рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: Nowait рдпрд╛ рд╕реНрдХрд┐рдк рд▓реЙрдХред рд╡реИрд╕реЗ, рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╕реНрдХрд┐рдк рд▓реЙрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╡рд┐рдВрдбреЛ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдФрд░ рдкрдВрдХреНрддрд┐рдмрджреНрдз рдкреВрд░реЗ рд╕реЗрдЯ рдкрд░ рдХрд╛рдо рдХрд░реЗрдВрдЧреЗ, рдЕрд╡рд░реБрджреНрдз рд▓реЛрдЧреЛрдВ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдирд╣реАрдВред рдПрдХ рдЙрджрд╛рд╣рд░рдг:
рдкрд╣рд▓рд╛ рд╕рддреНрд░:
select * from test_integer where id in (1,3,4,8) for update ;
рджреВрд╕рд░рд╛ рд╕рддреНрд░:
select id<br> ,row_number() over ( order by id) rn<br> ,rownum<br> from test_integer t<br> where id < 10<br> order by id <br> for update skip locked
3. рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ
рдЙрд╕ рдкреЛрд╕реНрдЯ рдХреЛ рдкрдврд╝рдиреЗ рдореЗрдВ рдмрд╣реБрдд рд╣реА рдордЬреЗрджрд╛рд░ рд▓рдЧрд╛ рдХрд┐ рдЖрдкрдХреЛ рд╣рдореЗрд╢рд╛ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЙрдиреНрд╣реЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░реЗрдВред "LOOP рдХреЗ рд▓рд┐рдП" рдФрд░ рдмрд▓реНрдХ рдСрдкрд░реЗрд╢рди рдЯреЙрдо рдХреЗ рд▓рд┐рдП рдЗрд╖реНрдЯрддрдо рд░рд╛рд╢рд┐
рдпрд╣рд╛рдВ рд╢рд╛рдорд┐рд▓
рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдЕрдкрдиреА рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╕реАрдзреЗ рдЙрд╕ рдирдВрдмрд░ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рд╣реИ, рдЬрд┐рд╕рдХреА рдЖрдкрдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
FORALL рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдПрдХ рд╕рд╛рде рдХрдИ рдмрд┐рдВрджреБрдУрдВ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ:
- FORALL рдкрд░рдорд╛рдгреБ рдирд╣реАрдВ рд╣реИ - рдЕрд░реНрдерд╛рдд, рдпрджрд┐ рд╡рд╣ рдбреЗрдЯрд╛ рдЬреЛ рджреЗрдЦреЗрдЧрд╛ рд╡рд╣ рдЙрд╕ рд╕рдордп рдирд╣реАрдВ рд╣реИ рдЬрдм FORAL рдирд┐рд╖реНрдкрд╛рджрди рдкреНрд░рд╛рд░рдВрдн рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрд╕ рд╕рдордп рд╡рд╣ рдЕрдкрдирд╛ рд╡рд┐рд╢реЗрд╖ рд╕реЗрдЯ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрддрд┐ рдЪрдХреНрд░ рдЪрд▓рд╛рддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдмрд╛рдж рдореЗрдВ рдЕрдкрдбреЗрдЯ рд╣реЛрдЧрд╛ рдЬрдм рдпрд╣ рддреИрдпрд╛рд░ рд╕рдВрд╢реЛрдзрд┐рдд рд╕реЗрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ (рдпрд╣ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдмрджреНрдз рд╣реИ, рдХреЗ рд▓рд┐рдП) рдХреНрд░рдордмрджреНрдз рд╣реЛ рдЬрд╛рдУ ora-08177)ред
рдЙрджрд╛рд╣рд░рдг рдХреЛ рдлрд┐рд░ рд╕реЗ test_ab рд╕реЗ рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рдХреЗрд╡рд▓ рд╕рднреА рдХреЙрд▓рдо рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ b = 1 рдХреЛ рдлрд┐рд░ рд╕реЗ рд╕реЗрдЯ рдХрд░реЗрдВред
- рд╣рдо рдкрд╣рд▓рд╛ рд╕рддреНрд░ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ:
declare <br> type number_table is table of number;<br> <br> procedure bulk_update(p_nt in number_table) is <br> begin <br> forall n in p_nt. first ..p_nt. last <br> update test_ab<br> set b=b*10 <br> where a=p_nt(n)<br> and a=integer_delay(a,10);<br> end bulk_update;<br> begin <br> bulk_update(number_table(1,3,7,10));<br> end ;
- рдФрд░ рдлрд┐рд░ рдХреБрдЫ рд╕реЗрдХрдВрдб рдХреЗ рдмрд╛рдж рд╣рдо рджреВрд╕рд░рд╛ рд╕рддреНрд░ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЪреБрдкрдЪрд╛рдк рдЙрд╕реА рд╕реЗрдЯ рд╕реЗ рдХрд┐рд╕реА рднреА рдмреА рдХреЛ рдмрджрд▓рддреЗ рд╣реИрдВ:
update test_ab set b=10 where a=7;
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрдм рддрдХ рд╣рдо рджреВрд╕рд░реЗ рд▓реЗрдирджреЗрди рдХреЛ рдкреВрд░рд╛ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддрдм рддрдХ рдкрд╣рд▓рд╛ рдмреНрд▓реЙрдХ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рджреВрд╕рд░реЗ рдХрд╛ рдореВрд▓реНрдп рдкрд╣рд▓реЗ рд▓реЗрдирджреЗрди рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╣рдордиреЗ рдЗрд╕реЗ рдЕрдВрддрд┐рдо рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдерд╛ред рдЖрдк рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рддрд╛рд▓рд┐рдХрд╛ test_ab рдХреЛ рдкрд╣рд▓реЗ рд╣реА рд▓реЙрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдкрдбреЗрдЯ рдХреЗ рд▓рд┐рдП рдЙрд╕реА рдЪрдпрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдпрд╣ рдЗрддрдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ рдФрд░ рдХреНрдпрд╛ рдпрд╣ рд╣рдореЗрд╢рд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ?
- FORALL рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЬрдирд╛рдУрдВ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдЬрдЯрд┐рд▓ рд╣реИред
рд╡рд┐рднрд┐рдиреНрди рдПрд╕рдХреНрдпреВрдПрд▓ рд╡реЗрд░рд┐рдПрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рдЕрдкрдбреЗрдЯ рдХреЗ рд▓рд┐рдП рдпреЛрдЬрдирд╛ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдареАрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдХрд┐ рдлреЙрд░рд▓ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рджреВрд╕рд░реА рдУрд░, рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╕реБрдзрд╛рд░рд╛ рдЬрд╛рдП (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрдВрдбреЗрдХреНрд╕ рд╕реНрдХреИрди рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ)ред
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдпрд╣ рдХреНрд╖рдг рдЕрд╕реНрдкрд╖реНрдЯ рд╣реИ рдФрд░ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рднреА рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдПрдХ рдмрд╛рдд рдХреА рд╕рд▓рд╛рд╣ рджреЗрдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИред
рдкреБрдирд╢реНрдЪред рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП ...
рд▓реЗрдЦ рдореЗрдВ рдХреЛрдб рд╕реЛрд░реНрд╕ рдХреЛрдб рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред