рд╢реБрджреНрдз SQL рдЯреНрдпреВрд░рд┐рдВрдЧ рдорд╢реАрди

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



рдирдВрдЧреЗ рдПрд╕рдХреНрдпреВрдПрд▓ рдкрд░ рдЯреНрдпреВрд░рд┐рдВрдЧ рдорд╢реАрди рдмрдирд╛рддреЗ рд╕рдордп рджреЛ рдореВрд▓рднреВрдд рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВ:



рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореИрдВ рдЗрди рд╕реАрдорд╛рдУрдВ рдХреЛ рдкрд╛рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛ред



рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдПрдХ рдирд┐рдпрдорд┐рдд рд╕рдВрдЧреНрд░рд╣рд┐рдд рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкрд░ рдЯреНрдпреВрд░рд┐рдВрдЧ рдорд╢реАрди рд▓рд┐рдЦреАред рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдХреНрдпреВрд╢рд╛ рдиреЗ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдХрд┐рдпрд╛, рдореИрдВрдиреЗ рдЗрд╕реЗ рдПрдХ рдирд┐рдпрдорд┐рдд рд▓реВрдк рдореЗрдВ рдФрд░ рджреЛрдиреЛрдВ рддрд░рдл рдПрдХ рдЕрдВрддрд╣реАрди рд░рд┐рдмрди рдкрд░ рдХрд┐рдпрд╛ред рдЙрд╕ рдХреЛрдб рдореЗрдВ рдХреБрдЫ рднреА рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рддреБрд░рдВрдд рдЗрд╕реЗ рдирдВрдЧреЗ SQL рдкрд░ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ред



Firebird 2.1 рдореЗрдВ рдкрд╣рд▓реА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рджреЛ рдирд┐рд░реНрдорд╛рдг рд╣реИрдВ: MERGE рдФрд░ UPDATE OR INSERTред

рдкрд╣рд▓реЗ рддреЛ рдореИрдВрдиреЗ рджреВрд╕рд░реЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рдИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреА рдорджрдж рд╕реЗ рдЖрдк рдХреЗрд╡рд▓ 1 рд░рд┐рдХреЙрд░реНрдб рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдпрд╛ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред MERGE рдЖрдкрдХреЛ рдПрдХ рдордирдорд╛рдирд╛ рдЪрдпрди рдХреЗ рд╕рд╛рде "рдЧреЛрдВрдж" рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред



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



рдХрд╛рд░реНрдпрдХреНрд░рдо рдФрд░ рдЯреЗрдк рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореВрд▓ рдкреЛрд╕реНрдЯ рдХреЗ рд╕рдорд╛рди рдПрдХ рдЯреЗрдмрд▓ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред



рдпрд╣рд╛рдБ рдореИрдВ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛ рд╣реИ:



MERGE INTO ribbon r USING ( WITH RECURSIVE data AS ( SELECT 0 AS state, 1 AS pos, (SELECT sinput FROM ribbon WHERE id = 1) AS val FROM RDB$DATABASE UNION ALL SELECT p.out_state AS STATE, CASE WHEN p.actions = '<' THEN data.pos - 1 WHEN p.actions = '>' THEN data.pos + 1 ELSE data.pos END AS pos, CASE WHEN p.actions = '<' THEN COALESCE((SELECT sinput FROM ribbon WHERE id = (data.pos - 1)), ' ') WHEN p.actions = '>' THEN COALESCE((SELECT sinput FROM ribbon WHERE id = (data.pos + 1)), ' ') ELSE p.actions END AS val FROM program p JOIN data ON data.state = p.in_state WHERE p.sread = COALESCE((SELECT sinput FROM ribbon WHERE id = data.pos), ' ') AND p.actions != '#' ) SELECT * FROM data ) data ON data.pos = r.id WHEN MATCHED THEN UPDATE SET sinput = data.val WHEN NOT MATCHED THEN INSERT (id, sinput) VALUES (data.pos, data.val)
      
      





рдЧрдгрдирд╛ рдХреА рдЧрдИ рд░рд╛рдЬреНрдп рдлрд╝реАрд▓реНрдб рдореЗрдВ рд╣рдо рд░рд╛рдЬреНрдп рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рддреЗ рд╣реИрдВ, рдкреЙрд╕ рдЯреЗрдк рдкрд░ рд╕реНрдерд┐рддрд┐ рд╣реИред

"рдЖрд░рдбреАрдмреА $ рдбрдЯреИрдмреЗрд╕реНрдЯ" рдирд┐рд░реНрдорд╛рдг рдлрд╛рдпрд░рдмрд░реНрдб рдХреА рдПрдХ рдРрд╕реА "рд╡рд┐рд╢реЗрд╖рддрд╛" рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рддрдм рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдЖрдкрдХреЛ рдХрд┐рд╕реА рднреА рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рдмрд┐рдирд╛ рдПрдХрд▓ рдкрдВрдХреНрддрд┐ рдЪрдпрди рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо рдорд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдлрд╛рдпрд░рдмрд░реНрдб 2.1 рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдбреАрдПрдордПрд▓ рдПрд╕рдХреНрдпреВрдПрд▓ рдХреЛ рдЯреНрдпреВрд░рд┐рдВрдЧ-рдкреВрд░реНрдг рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ, рдРрд╕реА рдХреНрд╡реЗрд░реА рдХрд┐рд╕реА рднреА DBMS рдкрд░ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ рдЬреЛ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдкреНрд░рд╢реНрдиреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ рдФрд░ MERGE рдЬреИрд╕реЗ рдирд┐рд░реНрдорд╛рдг рдХрд░рддрд╛ рд╣реИ, рд╕рд┐рдВрдЯреИрдХреНрд╕ рдореЗрдВ рдЕрдВрддрд░ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдПред



рдПрдХ рдЖрдлреНрдЯрд░рд╡рд░реНрдб рдХреЗ рдмрдЬрд╛рдп


рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рдпрд╣ рдЬрдирд░реЗрдЯрд░ рдЙрд░реНрдл тАЛтАЛSEQUENCE рдореЗрдВ рд░рд╛рдЬреНрдп рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рдИ рдЧрдИ рдереАред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореИрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЕрдиреБрд░реЛрдз рдХреЛ рд▓рд┐рдЦрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рдерд╛ - рдЯреЗрдк рдХреЗ рд▓рд┐рдП рдирдП рдбреЗрдЯрд╛ рдХрд╛ рдПрдХ рд╕реНрд░реЛрдд рддрд╛рдХрд┐ рдпрд╣ рдХрд╛рд░реНрдпрдХреНрд░рдо рдФрд░ рдЯреЗрдк рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдЖрдЧреЗ рдФрд░ рдкреАрдЫреЗ рдЪрд▓рд╛ рд╕рдХреЗред рдлрд┐рд░ рднреА, рдЗрд╕ рдкреНрд░рдпреЛрдЧ рдиреЗ рдЬрдирд░реЗрдЯрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдХрдИ рджрд┐рд▓рдЪрд╕реНрдк рд╕рдорд╛рдзрд╛рди рдЦреЛрдЬрдирд╛ рд╕рдВрднрд╡ рдмрдирд╛ рджрд┐рдпрд╛:



рдореБрдЭреЗ рдХрд╣рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдлрд╛рдпрд░рдмрд░реНрдб рдкреНрд░рд╢реНрдиреЛрдВ рдХрд╛ рдиреЗрд╕реНрдЯрд┐рдВрдЧ 1024 рд╕реНрддрд░реЛрдВ рддрдХ рд╕реАрдорд┐рдд рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдореИрдВ рдЕрднреА рднреА рдЬрдирд░реЗрдЯрд░ рдкрд░ рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдкреНрд░рддрд┐рдмрдВрдз рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред



рддрд╛рд▓рд┐рдХрд╛ рд╕рдВрд░рдЪрдирд╛


 CREATE TABLE PROGRAM ( IN_STATE INTEGER NOT NULL, SREAD CHAR(1) NOT NULL, ACTIONS CHAR(1) NOT NULL, OUT_STATE INTEGER NOT NULL ); CREATE TABLE RIBBON ( SINPUT CHAR(1) NOT NULL, ID INTEGER NOT NULL );
      
      





рд╕реВрддреНрд░реЛрдВ рдХрд╛ рдХрд╣рдирд╛ рд╣реИ


рдлрд╛рдпрд░рдмрд░реНрдб 2.1 рд░рд┐рд▓реАрдЬ рдиреЛрдЯреНрд╕



All Articles