If you can't read please download the document
Upload
ontico
View
1.985
Download
6
Embed Size (px)
Citation preview
(). 3 .
MySQL
Highload++, 26 2010 , [email protected]
: http://forge.mysql.com/tools/tool.php?id=263
( forge.mysql.com, Newest code examples , ).
0 1 2 3 4 5 Dynamic SQL6 SQL/PSM8 9
SQL/PSM
1991 . (Melton, Bauer, Eisenberg)
Ada
ANSI/ISO 1996 .
IBM DB2 MySQL. Microsoft , Oracle, PostgreSQL .
Ada
procedure Demo is type SMALLINT is range 0..256; Idx : SMALLINT; Cnt : SMALLINT:= 10;begin-- Idx := 1;named: loop -- Put_Line("In the loop"); Idx := Idx + 1; if Idx = Cnt then Idx := -Idx; end if; if Idx + Cnt = 0 then exit named; end if; end loop named;exception when Constraint_Error => Put_Line("Error");end;
SQL/PSM vs. Ada
SQL/PSM
create procedure Demo()begin declare Idx SMALLINT UNSIGNED; declare Cnt SMALLINT UNSIGNED default 10; declare exit handler for sqlstate "22003" select "Error";-- set Idx = 1;named: loop -- select "In the loop" as ""; set Idx = Idx + 1; if Idx = Cnt then set Idx = -Idx; end if; if Idx + Cnt = 0 then leave named; end if; end loop;end|
Ada
procedure Demo is type SMALLINT is range 0..256; Idx : SMALLINT; Cnt : SMALLINT:= 10;begin-- Idx := 1;named: loop -- Put_Line("In the loop"); Idx := Idx + 1; if Idx = Cnt then Idx := -Idx; end if; if Idx + Cnt = 0 then exit named; end if; end loop named;exception when Constraint_Error => Put_Line("Error");end;
Oracle PL/SQL vs. Ada
Oracle PL/SQL
create procedure Demois Idx POSITIVE; Cnt POSITIVE default 10;begin-- Idx := 1;
loop -- dbms_output.put_line("In the loop"); Idx := Idx + 1; if Idx = Cnt then set Idx := -Idx; end if; if Idx + Cnt = 0 then exit named; end if; end loop; exception when VALUE_ERROR then dbms_output.put_line("Error");end;
SQL/PSM
, SQL
c
c
4 : PROCEDURE, FUNCTION, TRIGGER, EVENT
SQL/PSM (1)
sp_sql::= create | drop | call | alter *create::= CREATE [DEFINER= user] PROCEDURE name([param_desc[,...]]) [characteristic ...] sp_bodydrop::= DROP PROCEDURE namecall::= CALL name ([parameter[,...]])* CALL name , , [] ,...
SQL/PSM: (2)
create::= CREATE [DEFINER= user] PROCEDURE name([param_desc[,...]]) [characteristic ...] sp_bodyparam_desc::= [ IN | OUT | INOUT ] name typesp_body::= sp_stmt sp_stmt::= simple_sql | if | case | loop | while | repeat | return | leave | open | fetch | close | [label:] BEGIN [sp_decl;[...]] [sp_stmt;[...]] ENDsimple_sql::= SELECT | INSERT | SET | CALL | ...
SQL/PSM (3):
sf_sql::= create | drop | altercreate::= CREATE [DEFINER= user] FUNCTION name([func_param_desc[,...]]) RETURNS type CALL p_proc() -> INSERT
SQL/PSM:
SQL/PSM: (2)
sp_decl::= ... DECLARE name CONDITION FOR cond_desc |DECLARE {CONTINUE|EXIT} HANDLER FOR hand_desc sp_stmthandler_desc::= NOT FOUND | SQLWARNING | SQLEXCEPTION | errcode | SQLSTATE [VALUE] "sqlstate"
CONTINUE HANDLER IGNORE
REPLACE INSERT ON DUPLICATE KEY UPDATE
SQL/PSM:
INVOKER/DEFINER
SQL
statement-based SQL/PSM
SQL/PSM: (characteristic)
characteristic::= [NOT*] DETERMINISTIC | {CONTAINS|NO SQL} SQL | {MODIFIES|READS} SQL DATA | SQL SECURITY {DEFINER|INVOKER}
* NOT
Dynamic SQL
SQL PS: PREPARE name FROM "sql";EXECUTE name USING @uservar[,...];DEALLOCATE PREPARE name;
, uservars -
credentials
SQL/PSM:
Unrolling :mysql> call load_daily_log(curdate());mysql> show binlog events;
DO(f1())
black box
5.1: mixed mode
5.0:
--log-bin-trust-function-creators
SQL/PSM (3):
trg_sql::= create | dropcreate::= CREATE [DEFINER= user] TRIGGER name {BEFORE|AFTER} {INSERT|UPDATE|DELETE} FOR EACH ROW sp_bodydrop::= DROP TRIGGER [IF EXISTS] name
SQL/PSM (3):
ev_sql::= create | drop | altercreate::= CREATE [DEFINER= user] EVENT name ON SCHEDULE schedule DO sp_bodydrop::= DROP EVENT nameschedule::= AT timespec | EVERY interval [STARTS timespec] [ENDS timespec]
: LOCK TABLES
:transactional control (Implicit and Explicit)
SELECT/SHOW
FLUSH statements
no cascading modifications on the same resource
RFE
SQL (CHECK TABLE!)
LIMIT ( 5.5)
FOR
Dynamic SQL
Dynamic SQL
...
SQL/PSM
1)
Pac-man
SQL/PSM
2)
SQL/PSM
3)
SQL/PSM
4) UPDATE
Guy Harrison MySQL Stored procedures - , MySQL - http://oreilly.com/catalog/mysqlspp
MySQL Stored Procedures FAQ - http://dev.mysql.com/doc/refman/5.5/en/faqs-stored-procs.htm
- - http://www.brainbell.com/tutorials/MySQL/Using_Stored_Procedures.htm
Giuseppe Maxia - http://www.nongnu.org/mysql-sr-lib/
MySQL.com: - http://forums.mysql.com/read.php?98,222900,222900#msg-222900
MySQL INFORMATION_SCHEMA -- http://www.xcdsql.org/MySQL/information_schema/5.1/MySQL_5_1_INFORMATION_SCHEMA.html
MySQL SQL/PSM: http://www.mydebugger.com http://www.devart.com/dbforge/mysql/studio/code-debugger.html
(1)
Guy Harrison MySQL Stored procedures - , MySQL - http://oreilly.com/catalog/mysqlspp
(2)
Giuseppe Maxia - http://www.nongnu.org/mysql-sr-lib/
(3)
MySQL INFORMATION_SCHEMA -- http://www.xcdsql.org/MySQL/information_schema/5.1/MySQL_5_1_INFORMATION_SCHEMA.html
(4)
MySQL SQL/PSM: http://www.mydebugger.com
Click to edit the title text format
Click to edit the notes format
Page