Oracle рдбрд╛рдЯрд╛рдмреЗрд╕ рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рд░рд┐рдкреНрд░реЗрдЬреЗрдВрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛

рдЫрд╡рд┐ 10 рд╕реЗ рдЕрдзрд┐рдХ рд╡рд░реНрд╖реЛрдВ рдХреЗ рд▓рд┐рдП, рдСрдмреНрдЬреЗрдХреНрдЯ-рд░рд┐рд▓реЗрд╢рдирд▓ рдбреАрдмреАрдПрдордПрд╕ рдореМрдЬреВрдж рд╣реИрдВ, рд╕рдВрдЧреНрд░рд╣реАрдд рдЬрд╛рдирдХрд╛рд░реА рдХреА рд╕рдВрд░рдЪрдирд╛ рд▓рдЧрд╛рддрд╛рд░ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реЛрддреА рдЬрд╛ рд░рд╣реА рд╣реИ, SQL рдорд╛рдирдХ рдСрдмреНрдЬреЗрдХреНрдЯ-рдУрд░рд┐рдПрдВрдЯреЗрдб рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░рдлреЗрд╕рд┐рдВрдЧ рдХреЗ рдореБрджреНрджреЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди, рдлрд┐рд░ рднреА, рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░рддрд┐рдорд╛рди рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рд╡рд╛рд▓реА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╢рд╛рдпрдж рд╣реА рдХрднреА рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рддреА рд╣реИред рдпрд╣ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреА рд░реВрдврд╝рд┐рд╡рд╛рджрд┐рддрд╛ рдХреЗ рдХрд╛рд░рдг рд╣реИ, рдСрдмреНрдЬреЗрдХреНрдЯ-рд░рд┐рд▓реЗрд╢рдирд▓ рдбреЗрдЯрд╛рдмреЗрд╕реЛрдВ рдХреЛ рдбрд┐рдЬрд╛рдЗрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд╕рд┐рдд рддрд░реАрдХреЛрдВ рдХреА рдХрдореА рдФрд░ рдУрдЖрд░рдПрдо рдЯреВрд▓реНрд╕ рдХрд╛ рд╡реНрдпрд╛рдкрдХ рдЙрдкрдпреЛрдЧред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдХрдИ рдХрд╛рд░реНрдп рд╣реИрдВ рдЬрд╣рд╛рдБ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рд┐рд╕реНрдЯрдо рдкреНрд░рджрд░реНрд╢рди рдФрд░ рд▓рдЪреАрд▓реЗрдкрди рдХреЛ рдмрдврд╝рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред



рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЗ рдмрдЬрд╛рдп рд╡рд╕реНрддреБрдУрдВ рдореЗрдВ рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдирд╛ рдХреБрдЫ рд╣рдж рддрдХ рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ - рдЕрдзрд┐рдХрд╛рдВрд╢ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдУрдЖрд░рдПрдо рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдПрдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЬреЛ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ рд╡рд╣ рддрд╛рд▓рд┐рдХрд╛ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рд╛рде рд╣рд╕реНрддрдХреНрд╖реЗрдк рдХрд┐рдП рдмрд┐рдирд╛ рдореМрдЬреВрджрд╛ рд╕рдВрдмрдВрдзрдкрд░рдХ рдбреЗрдЯрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕рдВрд╢реНрд▓реЗрд╖рд┐рдд рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИред рдпрд╣ рдСрдмреНрдЬреЗрдХреНрдЯ рджреГрд╢реНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рд╕реЗ рдЪрдпрди рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд╕рдВрд╢реНрд▓реЗрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рд╡рд╣реА рдУрдЖрд░рдПрдо рд╣реИ, рдХреЗрд╡рд▓ рд╕рд░реНрд╡рд░ рдкрдХреНрд╖ рдкрд░)ред рдЬрд┐рд╕ рдкреНрд░рдХрд╛рд░ рд░рд┐рд▓реЗрд╢рдирд▓ рд░рд┐рдкреНрд░реЗрдЬреЗрдВрдЯреЗрд╢рди рд╡рд░реНрдЪреБрдЕрд▓ рдЯреЗрдмрд▓ рд╣реЛрддреЗ рд╣реИрдВ, рдСрдмреНрдЬреЗрдХреНрдЯ рд░рд┐рдкреНрд░реЗрдЬреЗрдВрдЯреЗрд╢рди рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рд╡рд░реНрдЪреБрдЕрд▓ рдЯреЗрдмрд▓ рд╣реЛрддреЗ рд╣реИрдВред



рдСрдмреНрдЬреЗрдХреНрдЯ рдПрдкреНрд░реЛрдЪ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд╕реНрдкрд╖реНрдЯ рд▓рд╛рднреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рдмрджрд▓рдиреЗ, рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рдлрд╝рд┐рд▓реНрдЯрд░ рдбреЗрдЯрд╛, рдСрдмреНрдЬреЗрдХреНрдЯ рдкрджрд╛рдиреБрдХреНрд░рдо рдХреЗ рд╕реНрддрд░ рдкрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рдкрд░рд┐рд╕реАрдорд┐рдд рдХрд░рдиреЗ рдФрд░ рдХреБрдЫ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рдХреЗ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрд╣ рдзреНрдпрд╛рди рд░рдЦрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдбреЗрдЯрд╛ рднрдВрдбрд╛рд░рдг рдХреЗ рд▓рд╛рдЧреВ рддрд░реАрдХреЛрдВ рдкрд░ рдкреНрд░рддрд┐рдмрдВрдз рдирд╣реАрдВ рд▓рдЧрд╛рддреЗ рд╣реИрдВ, рдУрд░реЗрдХрд▓ DBMS рд╡рд┐рдХрд▓реНрдк (рдЬреИрд╕реЗ рдХрд┐ рд╡рд┐рднрд╛рдЬрди, рд▓реЗрдмрд▓ рд╕реБрд░рдХреНрд╖рд╛, рдЙрдиреНрдирдд рд╕рдВрдкреАрдбрд╝рди, рдЖрджрд┐) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛, рдФрд░ dlinks рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬреБрдбрд╝реЗ рдЯреЗрдмрд▓ рд╕рдВрднрд╡ рд╣реИрдВред



рдиреАрдЪреЗ рд╣рдо Oracle DBMS рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рд╡рд╕реНрддреБ рдЕрднреНрдпрд╛рд╡реЗрджрди рдХреА рдореБрдЦреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВрдЧреЗред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд░реЗрдЦ рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВ рджреБрдХрд╛рдиреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рд╡рд╛рд▓реА рд╕рдбрд╝рдХреЛрдВ рдХрд╛ рдПрдХ рд╕рд░рд▓ рд╕реЗрдЯ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реВрдВ, рдЬреЛ рд╕рдбрд╝рдХреЗрдВ рдЙрдиреНрд╣реЗрдВ рдЬреЛрдбрд╝рддреА рд╣реИрдВ рдФрд░ рд╕рд╛рдорд╛рдиреЛрдВ рдХреЗ рдЖрдкреВрд░реНрддрд┐рдХрд░реНрддрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред



рдЫрд╡рд┐



рдЯреЗрдмрд▓ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдореЙрдбрд▓ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдбреЗрдЯрд╛ рд╣реЛрддреЗ рд╣реИрдВ:



рдЫрд╡рд┐



рдЗрд╕рд▓рд┐рдП, рдПрдХ рд╡рд╕реНрддреБ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдмрдирд╛рдиреЗ рдореЗрдВ рддреАрди рдореБрдЦреНрдп рдЪрд░рдг рд╣реЛрддреЗ рд╣реИрдВ:

  1. рдЖрд╡рд╢реНрдпрдХ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд╕реНрддреБ рдкреНрд░рдХрд╛рд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ред
  2. рдПрдХ рдХреНрд╡реЗрд░реА рд▓рд┐рдЦрдирд╛ рдЬреЛ рдЗрди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдЙрд╕реА рдХреНрд░рдо рдореЗрдВ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рд╕реЗ рдЪреБрдирддрд╛ рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ рд╡реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИрдВред
  3. рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рдВрджрд░реНрдн рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдЪрдпрди рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рдореВрд▓реНрдп рд╕реЗрдЯ рдХрд░рдирд╛ (рдЕрдХреНрд╕рд░ рдпрд╣ рдкреНрд░рд╛рдердорд┐рдХ рдХреБрдВрдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ)ред


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдЙрди рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╕реНрдЯреЛрд░ рдФрд░ рдЙрдирдХреЗ рдмреАрдЪ рд╕рдВрдмрдВрдзреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ:

CREATE FORCE TYPE road_t AS OBJECT (

shop REF shop_t,

distance NUMBER(8));

/

CREATE TYPE road_list_t AS TABLE OF road_t;

/

CREATE TYPE shop_t AS OBJECT (

id NUMBER(6),

name VARCHAR2(20),

links road_list_t) NOT FINAL ;

/






FORCE рдирд┐рд░реНрджреЗрд╢ рдХреЛ рдкрд░рд┐рдкрддреНрд░ рд▓рд┐рдВрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА: рд╕рдбрд╝рдХреЛрдВ рд╕реЗ рд▓рд┐рдВрдХ рд▓рд┐рдВрдХ, рдЬреЛ рдмрджрд▓реЗ рдореЗрдВ рдЕрдиреНрдп рджреБрдХрд╛рдиреЛрдВ рд╕реЗ рд▓рд┐рдВрдХ рдХрд░рддреЗ рд╣реИрдВред рдЕрдм рджреГрд╢реНрдп рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ:

CREATE FORCE VIEW shops_v OF shop_t WITH OBJECT IDENTIFIER(id) AS

SELECT s.id, s.name, AST(MULTISET(

SELECT MAKE_REF(shops_v,

decode(r.dest_id - s.id, 0, r.src_id, r.dest_id)), r.distance

FROM roads r WHERE s.id in (r.dest_id, r.src_id)

) AS road_list_t)

FROM shops s;

/






OBJECT IDENTIFIER рдирд┐рд░реНрдорд╛рдг рдХреЗ рд╕рд╛рде рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ (рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рджреБрдХрд╛рдиреЛрдВ рдХреА рдореЗрдЬ рд╕реЗ рдкреНрд░рд╛рдердорд┐рдХ рдХреБрдВрдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред рдЪреВрдВрдХрд┐ рд╕рдбрд╝рдХ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рд╕реНрдЯреЛрд░ рд▓рд┐рдВрдХ рдХреА рдПрдХ рдЬреЛрдбрд╝реА рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдбрд┐рдХреЛрдб рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдкрдбрд╝реЛрд╕реА рд╕реНрдЯреЛрд░ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓рд┐рдВрдХ рдЦреБрдж MAKE_REF рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рдмрдирддреЗ рд╣реИрдВ, рдЬреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдкрд╛рд╕ рдХреА рдЧрдИ рдХреБрдВрдЬреА рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдЯреЗрдмрд▓ рдпрд╛ рджреГрд╢реНрдп рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рд▓реМрдЯрд╛рддрд╛ рд╣реИред рдЕрдм рдЖрдк рдиреЗрд╡рд┐рдЧреЗрд╢рди рдмрд╛рдИрдкрд╛рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рджрд┐рдП рдЧрдП рдЖрд╕рдиреНрди рд╕реНрдЯреЛрд░ рдХреА рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

SELECT DEREF (shop).id FROM table ( SELECT links FROM shops_v WHERE id = 5);



DEREF (SHOP).ID

--------------

1

2

6






рдбреАрдИрдЖрд░рдИрдПрдл рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рд▓рд┐рдВрдХ рдХреЛ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдПрдХ рдиреЗрд╕реНрдЯреЗрдб рдЯреЗрдмрд▓ (рдЯреЗрдмрд▓ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд╣реБрдБрдЪрд╛)ред рд╕рд╛рдорд╛рдиреНрдп рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд▓рд┐рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдЖрдк рдПрдХ рд╕реЗ рдХрдИ рд░рд┐рд╢реНрддреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ) рдФрд░ рдХрдИ-рд╕реЗ-рдХрдИ рд░рд┐рд╢реНрддреЗ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

CREATE FORCE TYPE vendor_shop_t UNDER shop_t

(vendors vendor_list_t);

/

CREATE FORCE TYPE vendor_list_t AS TABLE OF REF vendor_t;

/

CREATE FORCE TYPE vendor_t AS OBJECT (

id NUMBER(3),

name VARCHAR2(10),

shops vendor_shop_list_t);

/

CREATE TYPE vendor_shop_list_t AS TABLE OF REF vendor_shop_t;

/






рд╡рд┐рдХреНрд░реЗрддрд╛ рдмреНрд░рд╛рдВрдб рд╕реНрдЯреЛрд░ рд╡рд┐рдХреНрд░реЗрддрд╛_ shop_t рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рд╡рд╛рд▓реА рд╡рд╕реНрддреБ рдХреЛ shop_t рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рджреГрд╢реНрдп, рд╡рд╕реНрддреБрдУрдВ рдХреА рддрд░рд╣, рдПрдХ рдкрджрд╛рдиреБрдХреНрд░рдо рдореЗрдВ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрдиреНрдпрдерд╛ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛рдПрдВ рдкрд╣рд▓реЗ рдХреА рддрд░рд╣ рд╣реА рд╣реЛрдВрдЧреА:

CREATE FORCE VIEW vendor_shops_v OF vendor_shop_t UNDER shops_v AS

SELECT s.id, s.name, CAST (MULTISET(

SELECT MAKE_REF(shops_v,

decode(r.dest_id - s.id, 0, r.src_id, r.dest_id)), r.distance

FROM roads r WHERE s.id in (r.dest_id, r.src_id)

) AS road_list_t),

CAST (MULTISET(

SELECT MAKE_REF(vendors_v, vs.vendor_id)

FROM vendor_shops vs WHERE vs.shop_id = s.id

) AS vendor_list_t

)

FROM shops s;

/

CREATE FORCE VIEW vendors_v OF vendor_t WITH OBJECT IDENTIFIER(id) AS

SELECT v.id, v.name, CAST (MULTISET(

SELECT MAKE_REF(vendor_shops_v, vs.shop_id)

FROM vendor_shops vs WHERE vs.vendor_id = v.id

) AS vendor_shop_list_t

)

FROM vendors v;

/






рдкрджрд╛рдиреБрдХреНрд░рдо рд╕реЗ рдкреНрд░рд╢реНрди рдЖрдкрдХреЛ рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рджреГрд╢реНрдп рд╕реЗ рди рдХреЗрд╡рд▓ рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рдЗрд╕рдХреЗ рд╡рдВрд╢рдЬреЛрдВ рд╕реЗ рднреА, рдЬрд┐рд╕рд╕реЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд╛ рд╕реНрддрд░ рд╕рдорд╛рдпреЛрдЬрд┐рдд рд╣реЛрддрд╛ рд╣реИред рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рдЪрдпрди рдХреЗрд╡рд▓ рдФрд░ рдХреЗрд╡рд▓ рдкреНрд░рдХрд╛рд░ рдХреЗ рдирд┐рд░реНрдорд╛рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

SELECT count (0) FROM shops_v WHERE id < 3;



COUNT (0)

--------

4



SELECT count (0) FROM ONLY (shops_v) WHERE id < 3;



COUNT (0)

--------

2



SELECT count (0) FROM vendor_shops_v s WHERE id < 3 AND VALUE (s) IS OF TYPE ( ONLY shop_t);



COUNT (0)

--------

0






рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдкрд░ рдбреАрдПрдордПрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдкрд░ рдкреНрд░рддрд┐рдмрдВрдз рд╕рдВрдмрдВрдзрдкрд░рдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЖрдк рдХрд╕реНрдЯрдо DML рддрд░реНрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП INSTEAD рдСрдлрд╝ рдЯреНрд░рд┐рдЧрд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдирд┐рдореНрди рдХреЛрдб рдЯреБрдХрдбрд╝рд╛ рд╡реЗрдВрдбрд░_рд╡реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рдореНрдорд┐рд▓рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ, рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдЬреЛрдбрд╝рддрд╛ рд╣реИ:

CREATE TRIGGER vendors_v_insert INSTEAD OF INSERT ON vendors_v FOR EACH ROW

DECLARE

shop_id NUMBER;

CURSOR c IS SELECT DEREF (COLUMN_VALUE).id FROM table (: NEW .shops);

BEGIN

OPEN c;

INSERT INTO vendors VALUES (: NEW .id, : NEW .name);

LOOP

FETCH c INTO shop_id;

EXIT WHEN c%NOTFOUND;

INSERT INTO vendor_shops VALUES (: NEW .id, shop_id);

END LOOP ;

CLOSE c;

END ;

/






рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдЕрднреНрдпрд╛рд╡реЗрджрди рдХрд╛ рдбреЗрдЯрд╛ рд╢реБрд░реВ рдореЗрдВ рд╕рдВрдмрдВрдзрдкрд░рдХ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдФрд░ рдЕрдиреНрдп рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╕реАрдорд╛рдПрдВ рд╣реИрдВ, рдЕрдХреНрд╕рд░ рдСрдмреНрдЬреЗрдХреНрдЯ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЖрдкрдХреЛ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рд▓рд╛рдн рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрд╣ рд╕рдордЭрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдпрд╣ рдкреНрд░рднрд╛рд╡ рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдбреЗрдЯрд╛ рдФрд░ рдкреНрд░рд╢реНрдиреЛрдВ рдкрд░ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рд╕рдВрдмрдВрдзрдкрд░рдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде рдкреВрд░реНрдг рджреЗрдЦрдиреЗ рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рд╛рде рд▓рд┐рдВрдХ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рддреБрд▓рдирд╛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рддрд╛рд▓рд┐рдХрд╛ рдЖрдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдХреА рдЧрдИ рдереА: рджреБрдХрд╛рдиреЗрдВ - 1000 рдкрдВрдХреНрддрд┐рдпрд╛рдВ, рд╡рд┐рдХреНрд░реЗрддрд╛ - 60, рд╡рд┐рдХреНрд░реЗрддрд╛_ рдХрд╛рд░реНрдпрд╢рд╛рд▓рд╛рдПрдВ - 20 рд╣рдЬрд╛рд░, рд╕рдбрд╝рдХреЗрдВ - 300 рд╣рдЬрд╛рд░ред рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:

SELECT v1.id, v2.id

FROM vendor_shops_v v1, vendor_shops_v v2 WHERE

CARDINALITY(v1.vendors MULTISET INTERSECT v2.vendors) > 0 AND

v1.id = 2;






рдмрдирд╛рдо рд╕рдВрдмрдВрдзрдкрд░рдХ рд╡рд┐рдХрд▓реНрдк

SELECT v1.id, v2.id

FROM shops v1, shops v2 WHERE

EXISTS (

SELECT vendor_id FROM vendor_shops WHERE shop_id = v1.id

INTERSECT

SELECT vendor_id FROM vendor_shops WHERE shop_id = v2.id

)

AND v1.id = 2;






рдЙрддреНрдкрд╛рджрдХрддрд╛ рдореЗрдВ рдПрдХ рджреЛ рдЧреБрдирд╛ рд╡реГрджреНрдзрд┐ рджреЗрддрд╛ рд╣реИред рдирд┐рдореНрди рдпреБрдЧреНрдореЛрдВ рдХреА рд╕реВрдЪреА рдЬреЛ рдкрдбрд╝реЛрд╕реА рд╕реНрдЯреЛрд░реЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рдирдХреЗ рдкрд╛рд╕ рджрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рд╕рд╛рдорд╛рдиреНрдп рдЖрдкреВрд░реНрддрд┐рдХрд░реНрддрд╛ рд╣реИрдВ, рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рдпрд╣ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИ, рдЗрд╕рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:

SELECT v1.id, v2.id

FROM vendor_shops_v v1, vendor_shops_v v2

WHERE v2.id in ( SELECT DEREF (shop).id FROM table (v1.links)) AND

CARDINALITY(v1.vendors MULTISET INTERSECT v2.vendors) > 0 AND

v1.id = 2;



SELECT v1.id, v2.id

FROM shops v1, shops v2

WHERE

EXISTS ( SELECT 1 FROM roads WHERE src_id=v1.id AND dest_id=v2.id) AND

EXISTS (

SELECT vendor_id FROM vendor_shops WHERE shop_id = v1.id

INTERSECT

SELECT vendor_id FROM vendor_shops WHERE shop_id = v2.id

) AND

v1.id = 2;






рдирддреАрдЬрддрди, рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рдкрдВрджреНрд░рд╣ рдЧреБрдирд╛ рдЧрд┐рд░рд╛рд╡рдЯред рдХрд╛рд░рдг, рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдиреЛрдЯрд┐рд╕ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИ, shop_t рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рд▓рд┐рдВрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреА рдЬрдЯрд┐рд▓ рдкрд░рд┐рднрд╛рд╖рд╛ рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИ, рдЬреЛ рд░реЛрдб_t рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рджреЛрдЧреБрдирд╛ рдХрд░рдиреЗ рдФрд░ рд╕рдбрд╝рдХреЛрдВ рдХреА рдореЗрдЬ рд╕реЗ рд░реАрдбрд┐рдВрдЧ рдореЗрдВ рдЖрдиреБрдкрд╛рддрд┐рдХ рд╡реГрджреНрдзрд┐ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рджреЛрдиреЛрдВ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреНрд╡реЗрд░реА рдХреЛ рдкрдврд╝рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИред



рдореИрдВ рдПрдХ рдЖрд░рдХреНрд╖рдг рдХрд░реВрдВрдЧрд╛ рдХрд┐ рд▓реЗрдЦ рдХреЛ рдПрдХ рдкрд░рд┐рдЪрдпрд╛рддреНрдордХ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рдЬрд╛рдирдмреВрдЭрдХрд░ рд╕рд░рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдпрджрд┐ рдкреНрд░рдХрд╛рд╢рди рдХреЛ рдПрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдорд┐рд▓рддреА рд╣реИ, рддреЛ рдореИрдВ рдЗрд╕ рд╡рд┐рд╖рдп рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдХрд╡рд░ рдХрд░реВрдВрдЧрд╛ (рдЬреЗрдбрдбреАрдмреАрд╕реА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд▓реЛрдб рдХрд░рдирд╛ рдФрд░ рд╕рд╣реЗрдЬрдирд╛, рдмрдлрд╝рд░ рдХрд░рдирд╛, рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рддрд░реАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛, рдкреНрд░рддрд┐рдмрд┐рдВрдм рдПрдкреАрдЖрдИ рдХреЗ рдПрдирд╛рд▓реЙрдЧ, рдЖрджрд┐)ред



рд╕рд╛рд╣рд┐рддреНрдп



1. рдПрд░рд┐рдХ рдмреЗрд▓реНрдбреЗрди, рдЬреИрдирд┐рд╕ рдЧреНрд░реАрдирдмрд░реНрдЧред рдУрд░реЗрдХрд▓ рдбреЗрдЯрд╛рдмреЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ-рд░рд┐рд▓реЗрд╢рдирд▓ рдбреЗрд╡рд▓рдкрд░ рдХреА рдЧрд╛рдЗрдб 11 рдЬреА рд░рд┐рд▓реАрдЬрд╝ 2 (11.2) - рдУрд░реЗрдХрд▓, рдорд╛рд░реНрдЪ 2010ред рдкреАрдбреАрдПрдл

2. рдЬрд┐рдо рдореЗрд▓реНрдЯрдиред рдЙрдиреНрдирдд SQL: 1999ред рдСрдмреНрдЬреЗрдХреНрдЯ-рд░рд┐рд▓реЗрд╢рдирд▓ рдПрдВрдб рдЕрджрд░ рдПрдбрд╡рд╛рдВрд╕реНрдб рдлреАрдЪрд░реНрд╕ - рдореЙрд░реНрдЧрди рдХреЙрдлрдореИрди рдкрдмреНрд▓рд┐рд╢рд░реНрд╕, 2003ред

3. рдлрд░реНрдирд╕реНрдЯреАрди рд╕реАред рдкрджрд╛рдиреБрдХреНрд░рдо рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдФрд░ рдкрд░рд┐рд╡рд░реНрддрди - рдУрд░реЗрдХрд▓ рдкрддреНрд░рд┐рдХрд╛ / рд░реВрд╕реА рд╕рдВрд╕реНрдХрд░рдг, рдЬреВрди 2002ред

4. WP рдЬрд╛рдВрдЧ, рдиреЙрд░реНрдмрд░реНрдЯ рд░рд┐рдЯрд░ред рд╡рд╕реНрддреБ-рдЙрдиреНрдореБрдЦ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдСрдмреНрдЬреЗрдХреНрдЯ-рд░рд┐рд▓реЗрд╢рдирд▓ рдбреАрдмреА-рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХреА рдХрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд▓рд╛рднред рдмреАред рд░реАрдб рдореЗрдВ, рд╕рдВрдкрд╛рджрдХ, рдкреНрд░реЛрдХред рдбреЗрдЯрд╛рдмреЗрд╕ рдкрд░ 18 рд╡рд╛рдВ рдмреНрд░рд┐рдЯрд┐рд╢ рд░рд╛рд╖реНрдЯреНрд░реАрдп рд╕рдореНрдореЗрд▓рди (рдмреАрдПрдирд╕реАрдУрдбреА 2001), рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдЕрдЧреНрд░рд┐рдо, рдкреГрд╖реНрда 89-104ред рд╕реНрдкреНрд░рд┐рдВрдЧрд░-рд╡рд░реНрд▓рдЧ, рдЬреБрд▓рд╛рдИ 2001. рдкреАрдбреАрдПрдл

5. рдПрд╕.рдбреА. рдХреБрдЬрд╝реНрдиреЗрддреНрд╕реЛрд╡ред рдСрдмреНрдЬреЗрдХреНрдЯ-рд░рд┐рд▓реЗрд╢рдирд▓ рдбреЗрдЯрд╛рдмреЗрд╕: рдкрд┐рдЫрд▓реЗ рдЪрд░рдг рдпрд╛ рдХрдо рдХрд░рдХреЗ рджрд┐рдЦрд╛рдП рдЧрдП рдлреАрдЪрд░реНрд╕ ?, 2007ред рдПрдЪрдЯреАрдПрдордПрд▓



рд╕рднреА рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рд╕реЛрд░реНрд╕ рдХреЛрдб рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд░ рдХреЗ рд╕рд╛рде рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред



All Articles