




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第四章第四章 MYSQLMYSQL触发器与存储过程触发器与存储过程第四章第四章 MYSQLMYSQL触发器与存储过程触发器与存储过程第第2页页v 4.1 4.1 存储过程和函数存储过程和函数 1.1.4 4.1.1 创建与修改存储过程或函数创建与修改存储过程或函数 2.1.4 4.1.2 删除存储过程或函数删除存储过程或函数 3.1.4 4.1.3 查看存储过程或者函数查看存储过程或者函数 4.1.4 4.1.4 使用变量使用变量 5.1.4 4.1.5 定义条件和处理定义条件和处理 6.1.4 4.1.6 光标的使用光标的使用 7.1.4 4.1.7 流程控制语句流程控制语句v 4.2 4.
2、2 触发器触发器 1.2.4 4.2.1 创建触发器创建触发器 2.2.4 4.2.2 删除与查看触发器删除与查看触发器 3.2.4 4.2.3 触发器实现触发器实现CHECKCHECK、级联、级联第四章第四章 MYSQLMYSQL触发器与存储过程触发器与存储过程第第3页页 存储程序和函数是事先经过编译并存储在数据库中的一套存储程序和函数是事先经过编译并存储在数据库中的一套SQLSQL语句。语句。创建后,客户端不需要再重新发布单独的语句,而创建后,客户端不需要再重新发布单独的语句,而是可以引用存储程序来替。是可以引用存储程序来替。存储程序可以提供改良后的性能,存储程序可以提供改良后的性能,因为
3、只有较少的信息需要在服务器和客户算之间传送,代价是因为只有较少的信息需要在服务器和客户算之间传送,代价是增加数据库服务器系统的负荷。增加数据库服务器系统的负荷。存储程序也允许你在数据库服存储程序也允许你在数据库服务器上有函数库务器上有函数库,从而提高了开发人员的开发效率。,从而提高了开发人员的开发效率。v以下情况存储程序尤其有用:以下情况存储程序尤其有用: 当用当用不同语言编写多客户应用程序不同语言编写多客户应用程序,或多客户应用程序在,或多客户应用程序在不同平台不同平台上运行且需要执行相同的数据库操作之时。上运行且需要执行相同的数据库操作之时。 安全极为重要之时。安全极为重要之时。比如,银行
4、对所有普通操作使用存储程序。程比如,银行对所有普通操作使用存储程序。程序可以确保每一个操作都被妥善记入日志。应用程序和用户不可能序可以确保每一个操作都被妥善记入日志。应用程序和用户不可能直接访问数据库表,但是仅可以执行指定的存储程序。直接访问数据库表,但是仅可以执行指定的存储程序。第四章第四章 MYSQLMYSQL触发器与存储过程触发器与存储过程第第4页页v存储过程示例存储过程示例1 1返回单个数据返回单个数据mysqlmysql delimiter $delimiter $mysqlmysql CREATE PROCEDURE qq_countCREATE PROCEDURE qq_coun
5、t (OUT num INT) (OUT num INT) - - BEGINBEGIN - - SELECT COUNT(SELECT COUNT(* *) INTO num FROM qq) INTO num FROM qq; ; - - END;END; - - $mysqlmysql delimiter ;delimiter ;mysqlmysql CALL qq_count(aCALL qq_count(a););mysqlmysql SELECT a;SELECT a;v存储过程示例存储过程示例2 2返回数据集返回数据集CREATE PROCEDURE getrecordCREAT
6、E PROCEDURE getrecord()()BEGINBEGIN SELECT SELECT * * FROM qq FROM qq; ;END;END;第四章第四章 MYSQLMYSQL触发器与存储过程触发器与存储过程第第5页页v存储函数的创建示例存储函数的创建示例mysqlmysql delimiter $delimiter $mysqlmysql CREATE FUNCTION id_email(id intCREATE FUNCTION id_email(id int) ) RETURNS varchar(20)RETURNS varchar(20) Reads SQL data
7、Reads SQL data - - BEGINBEGIN - - declare email varchar(20);declare email varchar(20); - - SELECT email INTO email FROM qq where tidSELECT email INTO email FROM qq where tid=id;=id; - - RETURN email;RETURN email; - - END;END; - - $mysqlmysql delimiter ;delimiter ;mysqlmysql CALL id_email(1);CALL id_
8、email(1);mysqlmysql SELECT id_email(1);SELECT id_email(1);说明:说明:函数的创建需要指定返回值类型;同时应函数的创建需要指定返回值类型;同时应当在定义体中指明返回的结果。调用函数不能使当在定义体中指明返回的结果。调用函数不能使用用CALL语句,函数可直接使用。语句,函数可直接使用。第四章第四章 MYSQLMYSQL触发器与存储过程触发器与存储过程第第6页页CREATE PROCEDURE sp_name (proc_parameter,.) characteristic . routine_bodyCREATE FUNCTION sp_
9、name (func_parameter,.) RETURNS type characteristic . routine_body proc_parameter: IN | OUT | INOUT param_name type func_parameter: param_name type(Any valid MySQL data type) characteristic: LANGUAGE SQL | NOT DETERMINISTIC | CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA | SQL SECURITY
10、DEFINER | INVOKER | COMMENT string routine_body: Valid SQL procedure statement or statements第四章第四章 MYSQLMYSQL触发器与存储过程触发器与存储过程第第7页页v 存储子程序的权限问题。存储子程序的权限问题。 创建存储子程序需要创建存储子程序需要CREATE ROUTINECREATE ROUTINE权限。权限。 修改或移除存储子程序需要修改或移除存储子程序需要ALTER ROUTINEALTER ROUTINE权限。这个权限自动授予权限。这个权限自动授予子程序的创建者。子程序的创建者。 执行子
11、程序需要执行子程序需要EXECUTEEXECUTE权限。然而,这个权限自动授予子程序的创权限。然而,这个权限自动授予子程序的创建者。建者。 v RETURNSRETURNS字句只能对字句只能对FUNCTIONFUNCTION做指定,对函数而言这是强制做指定,对函数而言这是强制的。它用来指定函数的返回类型,而且的。它用来指定函数的返回类型,而且函数体必须包含一个函数体必须包含一个RETURN valueRETURN value语句。语句。第四章第四章 MYSQLMYSQL触发器与存储过程触发器与存储过程第第8页页v 子程序与当前数据库关联。子程序与当前数据库关联。要明确地把子程序与给定数据库要明
12、确地把子程序与给定数据库关联起来,在创建子程序时指定其名字为关联起来,在创建子程序时指定其名字为db_name.sp_namedb_name.sp_name。 当一个子程序被调用时,一个隐含的当一个子程序被调用时,一个隐含的USE db_nameUSE db_name 被执行(当子程序被执行(当子程序终止时停止执行)。终止时停止执行)。存储子程序内的存储子程序内的USEUSE语句时不允许的语句时不允许的。 你可以使用数据库名限定子程序名。你可以使用数据库名限定子程序名。这可以被用来引用一个不在当前这可以被用来引用一个不在当前数据库中的子程序。比如,要引用一个与数据库中的子程序。比如,要引用一个
13、与testtest数据库关联的存储程序数据库关联的存储程序p p或函数或函数f f,你可以说,你可以说CALL test.pCALL test.p()()或或test.ftest.f()()。 数据库移除的时候,与它关联的所有存储子程序也都被移除。数据库移除的时候,与它关联的所有存储子程序也都被移除。第四章第四章 MYSQLMYSQL触发器与存储过程触发器与存储过程第第9页页v参数说明:参数说明: 由括号包围的参数列必须总是存在。由括号包围的参数列必须总是存在。如果没有参数,也该使用一个如果没有参数,也该使用一个空参数列空参数列()()。 每个参数默认都是一个每个参数默认都是一个ININ参数。
14、参数。要指定为其它参数,可在参数名之要指定为其它参数,可在参数名之前使用关键词前使用关键词 OUTOUT或或INOUTINOUT 指定参数为指定参数为IN, OUT, IN, OUT, 或或INOUT INOUT 只对只对PROCEDUREPROCEDURE是合法的。是合法的。FUNCTIONFUNCTION参数总是被认为是参数总是被认为是ININ参数参数 第四章第四章 MYSQLMYSQL触发器与存储过程触发器与存储过程第第10页页vCharacteristicCharacteristic特性说明:特性说明: CONTAINS SQLCONTAINS SQL表示子程序不包含读或写数据的语句。
15、表示子程序不包含读或写数据的语句。NO SQLNO SQL表示子程表示子程序不包含序不包含SQLSQL语句。语句。READS SQL DATAREADS SQL DATA表示子程序包含读数据的语句,但表示子程序包含读数据的语句,但不包含写数据的语句。不包含写数据的语句。MODIFIES SQL DATAMODIFIES SQL DATA表示子程序包含写数据的语表示子程序包含写数据的语句。如果这些特征没有明确给定,句。如果这些特征没有明确给定,默认的是默认的是CONTAINS SQLCONTAINS SQL。 SQL SECURITYSQL SECURITY特征可以用来指定子程序该用创建子程序者
16、的许可来执特征可以用来指定子程序该用创建子程序者的许可来执行,还是使用调用者的许可来执行。默认值是行,还是使用调用者的许可来执行。默认值是DEFINERDEFINER。 COMMENTCOMMENT子句是一个子句是一个MySQLMySQL的扩展,它可以被用来描述存储程序。的扩展,它可以被用来描述存储程序。这个这个信息被信息被SHOW CREATE ROCEDURESHOW CREATE ROCEDURE和和 SHOW CREATE FUNCTION SHOW CREATE FUNCTION语句来显示。语句来显示。第四章第四章 MYSQLMYSQL触发器与存储过程触发器与存储过程第第11页页v过
17、程体说明:过程体说明: MySQLMySQL允许子程序包含允许子程序包含DDLDDL语句,如语句,如CREATECREATE和和DROPDROP。MySQLMySQL也允许存储也允许存储程序(但不是存储函数)包含程序(但不是存储函数)包含SQL SQL 交互交互selectselect语句。语句。 存储函数不可以包含那些做明确的和绝对的提交或者做回滚的语。存储函数不可以包含那些做明确的和绝对的提交或者做回滚的语。 存储子程序不能使用存储子程序不能使用LOAD DATA INFILELOAD DATA INFILE。 返回结果包的语句不能被用在存储函数中。返回结果包的语句不能被用在存储函数中。
18、其它语句:块语句、选择、循环等等其它语句:块语句、选择、循环等等第四章第四章 MYSQLMYSQL触发器与存储过程触发器与存储过程第第12页页vBEGIN . ENDBEGIN . END复合语句块:复合语句块:begin_label: BEGIN statement_list END end_label 存储子程序可以使用存储子程序可以使用BEGIN . ENDBEGIN . END来包含多个语句来包含多个语句。 statement_liststatement_list代表一个或多个语句的列表,代表一个或多个语句的列表,每个语句都必须用分每个语句都必须用分号(;)来结尾。号(;)来结尾。 复
19、合语句可以被标记。复合语句可以被标记。除非除非begin_labelbegin_label存在存在, ,否则否则end_labelend_label不能被不能被给出给出, ,并且如果二者都存在并且如果二者都存在, ,他们必须是同样的。他们必须是同样的。 第四章第四章 MYSQLMYSQL触发器与存储过程触发器与存储过程第第13页页v修改语法修改语法ALTER PROCEDURE | FUNCTION sp_name characteristic .characteristic: CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA
20、 | SQL SECURITY DEFINER | INVOKER | COMMENT string 说明:说明:如果要重新完整的定义已有的存储过程,建议采用先删除该存如果要重新完整的定义已有的存储过程,建议采用先删除该存储过程后,然后再进行创建。储过程后,然后再进行创建。v删除语法删除语法DROP PROCEDURE | FUNCTION IF EXISTS sp_name IF EXISTSIF EXISTS子句是一个子句是一个MySQLMySQL的扩展。的扩展。如果程序或函数不存储,它防止发如果程序或函数不存储,它防止发生错误。生错误。第四章第四章 MYSQLMYSQL触发器与存储过程触
21、发器与存储过程第第14页页vSHOW CREATE PROCEDURE | FUNCTION sp_name SHOW CREATE PROCEDURE getrecord;vSHOW PROCEDURE | FUNCTION STATUS LIKE pattern SHOW PROCEDURE status like getrecord;v查看系统表查看系统表information_schema.Routines SELECT * FORM Routines where routine_name=getrecord;第四章第四章 MYSQLMYSQL触发器与存储过程触发器与存储过程第第15页
22、页 1 DECLARE1 DECLARE局部变量局部变量 DECLARE var_name,. type DEFAULT value uDECLAREDECLARE仅被用在仅被用在BEGIN . ENDBEGIN . END复合语句里,并且必须在复合语句复合语句里,并且必须在复合语句的开头,在任何其它语句之前。的开头,在任何其它语句之前。 uDEFAULTDEFAULT子句指定默认值(子句指定默认值(常量或表达式常量或表达式),不指定则初始值为),不指定则初始值为NULLNULL。v使用变量的基本步骤使用变量的基本步骤 2 SET2 SET语句为变量赋值语句为变量赋值 SET var_name
23、 = expr , var_name = expr . uSETSET语句可以同时给多个变量赋值。语句可以同时给多个变量赋值。 第四章第四章 MYSQLMYSQL触发器与存储过程触发器与存储过程第第16页页 SELECT . INTOSELECT . INTO语句语句 SELECT col_name,. INTO var_name,. table_expr 把选定的多个字段直接存储到变量。把选定的多个字段直接存储到变量。 只有一条记录的字段可以被取回。只有一条记录的字段可以被取回。 DELIMITER $CREATE PROCEDURE qq_t_var()begin declare id i
24、nt; declare name varchar(10); declare mail varchar(25); set id=1; select tid,qqname,email into id,name,mail from qq_t where tid=id; select id,name,mail;end $DELIMITER ;第四章第四章 MYSQLMYSQL触发器与存储过程触发器与存储过程第第17页页 1 DECLARE1 DECLARE条件的定义条件的定义 DECLARE condition_name CONDITION FOR condition_value ucondition
25、_name:条件的名称条件的名称 ucondition_value:可以取可以取sqlstate_valuesqlstate_value或或mysql_error_codemysql_error_code,都,都表示表示MYSQLMYSQL的错误代码。的错误代码。 例如:例如:下面插入重复主键值的错误代码为下面插入重复主键值的错误代码为ERROR 1062(23000)ERROR 1062(23000),则,则sqlstate_valuesqlstate_value=23000=23000, mysql_error_codemysql_error_code=1062=1062v基本步骤基本步骤
26、 定义条件和处理程序定义条件和处理程序能够事先定义程序执行过程中有可能遇能够事先定义程序执行过程中有可能遇到的问题,并采用一定的机制解决相关问题。到的问题,并采用一定的机制解决相关问题。第四章第四章 MYSQLMYSQL触发器与存储过程触发器与存储过程第第18页页2 2 条件的处理条件的处理 DECLARE handler_type HANDLER FOR condition_value,. sp_statement handler_type: CONTINUE | EXIT | UNDO(未支持未支持) condition_value: sqlstate_value | condition_
27、name | SQLWARNING | NOT FOUND | SQLEXCEPTION | mysql_error_codeSQLWARNINGSQLWARNING是对所有以是对所有以0101开头的开头的SQLSTATESQLSTATE代码的速记。代码的速记。NOT FOUNDNOT FOUND是对所有以是对所有以0202开头的开头的SQLSTATESQLSTATE代码的速记。代码的速记。SQLEXCEPTIONSQLEXCEPTION是对所有没有被是对所有没有被SQLWARNINGSQLWARNING或或NOT FOUNDNOT FOUND捕获的捕获的SQLSTATESQLSTATE代码的
28、速记。代码的速记。第四章第四章 MYSQLMYSQL触发器与存储过程触发器与存储过程第第19页页mysql delimiter$mysql CREATE PROCEDURE qq_condition () - BEGIN - DECLARE CONTINUE HANDLER FOR SQLSTATE 23000 SET x2 = 1; - SET x = 1; - INSERT INTO qq(qqno,tid) VALUES (68747539,1); - SET x = 2; - INSERT INTO qq(qqno,tid) VALUES (705646790,1); - SET x
29、= 3; - END; - $将上面存储过程句柄改为将上面存储过程句柄改为exit。 DECLARE EXIT HANDLER FOR SQLSTATE 23000 SET x2 = 1;第四章第四章 MYSQLMYSQL触发器与存储过程触发器与存储过程第第20页页 捕获捕获mysql_error_code DECLARE CONTINUE HANDLER FOR 1062 SET x2 = 1; 事先定义事先定义condition_name DECLARE DuplicateKey CONDITION FOR SQLSTATE 23000; DECLARE CONTINUE HANDLER
30、FOR DuplicateKey SET x2 = 1; 捕获捕获SQLEXCEPTION DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET x2 = 1;v其他条件形式其他条件形式第四章第四章 MYSQLMYSQL触发器与存储过程触发器与存储过程第第21页页 .1声明光标:声明光标: DECLARE cursor_name CURSOR FOR select_statement .2打开光标打开光标 :OPEN cursor_name .3使用光标使用光标 :FETCH cursor_name INTO var_name , var_name . .
31、4关闭光标关闭光标 :CLOSE cursor_name说明:说明: 1 1、光标必须在声明处理程序之前被声明,并且声明变量和条件之后。、光标必须在声明处理程序之前被声明,并且声明变量和条件之后。 2、SELECT语句中不能有语句中不能有INTO子句。子句。v基本步骤基本步骤 利用基于变量的利用基于变量的select intoselect into语句,仅能处理一条记录的数语句,仅能处理一条记录的数据。据。通过光标(或游标),能够对查询的结果集进行循环处理。通过光标(或游标),能够对查询的结果集进行循环处理。第四章第四章 MYSQLMYSQL触发器与存储过程触发器与存储过程第第22页页利用光标
32、,创建一存储过程实现将利用光标,创建一存储过程实现将qq_tqq_t表中的数据添加到表中的数据添加到qqqq表中。表中。CREATE PROCEDURE qq_cursor_insert ()BEGIN DECLARE a varchar(15); DECLARE b int; DECLARE c varchar(10); DECLARE d varchar(25); DECLARE cur1 CURSOR FOR SELECT qqno,tid,qqname,email FROM qq_t; DECLARE exit HANDLER FOR NOT FOUND CLOSE cur1; OPE
33、N cur1; REPEAT FETCH cur1 INTO a,b,c,d; insert into qq(qqno,tid,qqname,email) values(a,b,c,d); UNTIL 0 END REPEAT; CLOSE cur1;END第四章第四章 MYSQLMYSQL触发器与存储过程触发器与存储过程第第23页页v IF语句语句v CASE语句语句v LOOP语句语句v LEAVE语句语句v ITERATE语句语句v REPEAT语句语句 v WHILE语句语句 参看教材参看教材P316第四章第四章 MYSQLMYSQL触发器与存储过程触发器与存储过程第第24页页 触发器
34、(触发器(TriggerTrigger)是用户定义在关系表上的一类由是用户定义在关系表上的一类由事件事件驱动驱动(insert(insert、updateupdate、delete)delete)的特殊过程。利用触发器能够的特殊过程。利用触发器能够有效地保证有效地保证数据完整性数据完整性,也便于执行一些自动的数据操作。,也便于执行一些自动的数据操作。v4.2.1 4.2.1 创建触发器创建触发器v4.2.2 4.2.2 触发器实现级联、触发器实现级联、CHECKCHECKv4.2.3 4.2.3 删除与查看触发器删除与查看触发器第四章第四章 MYSQLMYSQL触发器与存储过程触发器与存储过程
35、第第25页页v触发器创建的基本语法:触发器创建的基本语法: CREATE TRIGGER 触发器名触发器名 BEFORE|AFTER 触发事触发事件件 ON 表名表名 FOR EACH ROW 触发器语句触发器语句 触发器只能建立在基本表上触发器只能建立在基本表上,不能建立在临时表或视图上。,不能建立在临时表或视图上。 触发事件包括:触发事件包括:INSERTINSERT、UPDATEUPDATE、DELETEDELETE FOR EACH ROWFOR EACH ROW行级触发器行级触发器,MYSQLMYSQL目前还没有支持语句级的触发器。目前还没有支持语句级的触发器。 一个表上不能有两个一
36、个表上不能有两个相同时间和事件的触发程序。相同时间和事件的触发程序。 MYSQLMYSQL中,中,触发器执行的顺序是触发器执行的顺序是BEFOREBEFORE触发器、表操作触发器、表操作(INSERT(INSERT、UPDATE UPDATE 和和 DELETE)DELETE)、AFTERAFTER触发器触发器。第四章第四章 MYSQLMYSQL触发器与存储过程触发器与存储过程第第26页页 使用使用OLD(OLD(旧值旧值) )和和NEW(NEW(新值新值) )关键字关键字,能够访问受触发程序影响的行中,能够访问受触发程序影响的行中的字段值(的字段值(OLDOLD和和NEWNEW不区分大小写)
37、。不区分大小写)。 在在INSERTINSERT触发程序中,仅能使用触发程序中,仅能使用NEW.col_nameNEW.col_name,没有旧值。,没有旧值。 在在DELETEDELETE触发程序中,仅能使用触发程序中,仅能使用OLD.col_nameOLD.col_name,没有新值。,没有新值。 在在UPDATEUPDATE触发程序中,可以使用触发程序中,可以使用OLD.col_nameOLD.col_name来引用更新前的旧值,来引用更新前的旧值,也能使用也能使用NEW.col_nameNEW.col_name来引用更新后的行中的新值。来引用更新后的行中的新值。 OLDOLD列是只读的
38、,可以引用它,但不能更改它。列是只读的,可以引用它,但不能更改它。 NEWNEW列,如果具有列,如果具有SELECTSELECT权限,可引用它。在权限,可引用它。在BEFOREBEFORE触发程序中,如触发程序中,如果具有果具有UPDATEUPDATE权限,可使用权限,可使用“SET NEW.col_nameSET NEW.col_name = value” = value”更改它的更改它的值。值。意味着可以使用触发程序来更改将要插入到新行中的值,或用于意味着可以使用触发程序来更改将要插入到新行中的值,或用于更新行的值。更新行的值。第四章第四章 MYSQLMYSQL触发器与存储过程触发器与存储
39、过程第第27页页利用触发器实现学生与成绩表学生编号上的级联更新。利用触发器实现学生与成绩表学生编号上的级联更新。create trigger stud_updatecreate trigger stud_update after update on stud for each row after update on stud for each rowbeginbegin declare newsno declare newsno char(10); char(10); declare oldsno declare oldsno char(10); char(10); set newsno=ne
40、w.snoset newsno=new.sno; ; set oldsno=old.sno set oldsno=old.sno; ; if newsnooldsno if newsnooldsno then then update scsc set sno=newsno where sno=oldsnoupdate scsc set sno=newsno where sno=oldsno; ; End if; End if;END;END;第四章第四章 MYSQLMYSQL触发器与存储过程触发器与存储过程第第28页页利用触发器实现学生与成绩表学生编号上的级联删除。利用触发器实现学生与成绩表学
41、生编号上的级联删除。create trigger stud_deletecreate trigger stud_delete after delete on stud for each row after delete on stud for each rowbeginbegin declare oldsno declare oldsno char(10); char(10); set oldsno=old.sno set oldsno=old.sno; ; delete from scsc where sno=oldsnodelete from scsc where sno=oldsno; ;END;END;第四章第四章 MYSQ
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年国家开放大学(电大)《文学鉴赏与写作》期末考试备考试题及答案解析
- 2025年国家开放大学(电大)《品牌文化建设与传播》期末考试备考试题及答案解析
- 安徽b类安全员考试题库及答案解析
- 2025年国家开放大学《计算机操作系统原理》期末考试备考试题及答案解析
- 2025年国家开放大学《市场营销策略与实施》期末考试备考试题及答案解析
- 酒店客房服务流程与质量监督规范
- 2025年国家开放大学《销售管理》期末考试备考试题及答案解析
- 2025年国家开放大学(电大)《市场调查与数据分析》期末考试备考试题及答案解析
- 2025年国家开放大学《企业公共关系管理》期末考试备考试题及答案解析
- 软件采购合同范本及注意事项
- 宠物乐园方案
- 自备车补贴申请表
- 注塑成型技术培训之工艺理解课件
- 信息论与编码(第4版)完整全套课件
- 广西佑太药业有限责任公司医药中间体项目环评报告书
- 汽修厂安全风险分级管控清单
- 海绵城市公园改造施工组织设计
- 上体自编教材-体育运动概论-模拟
- 05625《心理治疗》案例分析
- GB/T 2679.7-2005纸板戳穿强度的测定
- GB/T 25840-2010规定电气设备部件(特别是接线端子)允许温升的导则
评论
0/150
提交评论