免费预览已结束,剩余24页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
触发器的使用1 触发器资料来源:/view/71791.htm?fr=ala0_1_1触发器(trigger)是个特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作( insert,delete, update)时就会激活它执行。触发器经常用于加强数据的完整性约束和业务规则等。 触发器可以从 DBA_TRIGGERS ,USER_TRIGGERS 数据字典中查到。 1.1 数据库领域名词触发器可以查询其他表,而且可以包含复杂的 SQL 语句。它们主要用于强制服从复杂的业务规则或要求。例如:您可以根据客户当前的帐户状态,控制是否允许插入新订单。触发器也可用于强制引用完整性,以便在多个表中添加、更新或删除行时,保留在这些表之间所定义的关系。然而,强制引用完整性的最好方法是在相关表中定义主键和外键约束。如果使用数据库关系图,则可以在表之间创建关系以自动创建外键约束。1.2 创建触发器的SQL语法DELIMITER |CREATE TRIGGER . ON FOR EACH ROWBEGIN -do somethingEND |1.3 触发器的优点触发器可通过数据库中的相关表实现级联更改;不过,通过级联引用完整性约束可以更有效地执行这些更改。触发器可以强制比用 CHECK 约束定义的约束更为复杂的约束。与 CHECK 约束不同,触发器可以引用其它表中的列。例如,触发器可以使用另一个表中的 SELECT 比较插入或更新的数据,以及执行其它操作,如修改数据或显示用户定义错误信息。触发器也可以评估数据修改前后的表状态,并根据其差异采取对策。一个表中的多个同类触发器(INSERT、UPDATE 或 DELETE)允许采取多个不同的对策以响应同一个修改语句。1.4 比较触发器与约束约束和触发器在特殊情况下各有优势。触发器的主要好处在于它们可以包含使用 Transact-SQL 代码的复杂处理逻辑。因此,触发器可以支持约束的所有功能;但它在所给出的功能上并不总是最好的方法。实体完整性总应在最低级别上通过索引进行强制,这些索引或是 PRIMARY KEY 和 UNIQUE 约束的一部分,或是在约束之外独立创建的。假设功能可以满足应用程序的功能需求,域完整性应通过 CHECK 约束进行强制,而引用完整性 (RI) 则应通过 FOREIGN KEY 约束进行强制。在约束所支持的功能无法满足应用程序的功能要求时,触发器就极为有用。例如:除非 REFERENCES 子句定义了级联引用操作,否则 FOREIGN KEY 约束只能以与另一列中的值完全匹配的值来验证列值。CHECK 约束只能根据逻辑表达式或同一表中的另一列来验证列值。如果应用程序要求根据另一个表中的列验证列值,则必须使用触发器。约束只能通过标准的系统错误信息传递错误信息。如果应用程序要求使用(或能从中获益)自定义信息和较为复杂的错误处理,则必须使用触发器。触发器可通过数据库中的相关表实现级联更改;不过,通过级联引用完整性约束可以更有效地执行这些更改。触发器可以禁止或回滚违反引用完整性的更改,从而取消所尝试的数据修改。当更改外键且新值与主键不匹配时,此类触发器就可能发生作用。例如,可以在 titleauthor.title_id 上创建一个插入触发器,使它在新值与 titles.title_id 中的某个值不匹配时回滚一个插入。不过,通常使用 FOREIGN KEY 来达到这个目的。如果触发器表上存在约束,则在 INSTEAD OF 触发器执行后但在 AFTER 触发器执行前检查这些约束。如果约束破坏,则回滚 INSTEAD OF 触发器操作并且不执行 AFTER 触发器。触发器到底可不可以在视图上创建 在 SQL Server 联机丛书中,是没有说触发器不能在视图上创建的, 并且在语法解释中表明:在 CREATE TRIGGER 的 ON 之后可以是视图。 然而,事实似乎并不是如此,很多专家也说触发器不能在视图上创建。我也专门作了测试,的确如此,不管是普通视图还是索引视图,都无法在上面创建触发器,真的是这样吗?请点击详细,但是无可厚非的是:当在临时表或系统表上创建触发器时会遭到拒绝。 深刻理解 FOR CREATE TRIGGER 语句的 FOR 关键字之后可以跟 INSERT、UPDATE、DELETE 中的一个或多个,也就是说在其它情况下是不会触发触发器的, 包括 SELECT、TRUNCATE、WRITETEXT、UPDATETEXT。相关内容 一个有趣的应用我们看到许多注册系统在注册后都不能更改用户名,但这多半是由应用程序决定的, 如果直接打开数据库表进行更改,同样可以更改其用户名, 在触发器中利用回滚就可以巧妙地实现无法更改用户名详细内容 触发器内部语句出错时 这种情况下,前面对数据更改操作将会无效。举个例子,在表中插入数据时触发触发器,而触发器内部此时发生了运行时错误,那么将返回一个错误值,并且拒绝刚才的数据插入。不能在触发器中使用的语句 触发器中可以使用大多数 T-SQL 语句,但如下一些语句是不能在触发器中使用的。CREATE 语句,如:CREATE DATABASE、CREATE TABLE、CREATE INDEX 等。ALTER 语句,如:ALTER DATABASE、ALTER TABLE、ALTER INDEX 等。DROP 语句,如:DROP DATABASE、DROP TABLE、DROP INDEX 等。DISK 语句,如:DISK INIT、DISK RESIZE。LOAD 语句,如:LOAD DATABASE、LOAD LOG。RESTORE 语句,如:RESTORE DATABASE、RESTORE LOG。RECONFIGURETRUNCATE TABLE 语句在sybase的触发器中不可使用!(本人:说的似乎不正确)1.5 慎用触发器触发器功能强大,轻松可靠地实现许多复杂的功能,为什么又要慎用呢。触发器本身没有过错,但由于我们的滥用会造成数据库及应用程序的维护困难。在数据库操作中,我们可以通过关系、触发器、存储过程、应用程序等来实现数据操作 同时规则、约束、缺省值也是保证数据完整性的重要保障。如果我们对触发器过分的依赖,势必影响数据库的结构,同时增加了维护的复杂程序。1.6 触发器命名规则命名规则:对象名称_状态_DML命令_类型对象名称:指表名或者视图名称;状态:after(AFT)、before(BEF)、instead(INS);DML命令:insert(INS)、update(UPD)、delete(DEL),两个DML命令的写法(INS_UPD),三具DML命令的写法IUD; 类型:语句、行(ROW)。2 触发器应用参考资料:/defonds/archive/2009/05/21/4205381.aspx2.1 功能1、 允许/限制对表的修改2、 自动生成派生列,比如自增字段3、 强制数据一致性4、 提供审计和日志记录5、 防止无效的事务处理6、 启用复杂的业务逻辑2.2 触发器的组成部分1、 触发器名称2、 触发语句3、 触发器限制4、 触发操作2.2.1 触发器名称create trigger biufer_employees_department_id命名习惯:biufer(before insert update for each row)employees 表名department_id 列名2.2.2 触发语句比如:表或视图上的DML语句DDL语句数据库关闭或启动,startup shutdown 等等before insert or update of department_id on employees referencing old as old_value new as new_value for each row说明:1、 无论是否规定了department_id ,对employees表进行insert的时候2、 对employees表的department_id列进行update的时候3、 触发器限制when (new_value.department_id80 ),限制不是必须的。此例表示如果列department_id不等于80的时候,触发器就会执行。其中的new_value是代表跟新之后的值。4、 触发操作是触发器的主体begin :new_mission_pct :=0;end;主体很简单,就是将更新后的commission_pct列置为0触发:insert into employees(employee_id, last_name,first_name,hire_date,job_id,email,department_id,salary,commission_pct )values( 12345,Chen,Donny, sysdate, 12, ,60,10000,.25);select commission_pct from employees where employee_id=12345;触发器不会通知用户,便改变了用户的输入值。2.3 触发器类型1、 语句触发器2、 行触发器3、 INSTEAD OF 触发器4、 系统条件触发器5、 用户事件触发器2.3.1 语句触发器是在表上或者某些情况下的视图上执行的特定语句或者语句组上的触发器。能够与INSERT、UPDATE、DELETE或者组合上进行关联。但是无论使用什么样的组合,各个语句触发器都只会针对指定语句激活一次。比如,无论update多少行,也只会调用一次update语句触发器。 安全检查需要对在表上进行DML操作的用户进行安全检查,看是否具有合适的特权。1、创建数据表Create table foo(a number);2、创建触发器Create Or Replace Trigger biud_foo Before insert or update or delete On foodeclare not_library_user exception;Begin If user not in (WHN) then RAISE not_library_user; End if;EXCEPTION WHEN not_library_user THEN RAISE_APPLICATION_ERROR(-20001, You don t have access to modify this table.);End;/3、测试即使SYS,SYSTEM用户也不能修改foo表中的数据。insert into whn.foo values (11,sysdate); 记录dml操作日志对修改表的时间、人物进行日志记录。1、建立试验表create table employees_copy as select *from hr.employees2、建立日志表- Create tablecreate table EMPLOYEES_LOG( WHO VARCHAR2(30), WHEN DATE, ACTION CHAR(1);3、创建触发器在employees_copy表上建立语句触发器,在触发器中填充employees_log 表。Create Or Replace Trigger biud_employee_copy Before insert or update or delete On employees_copyDeclare L_action employees_log.action%type;Begin if inserting then L_action := I; elsif updating then L_action := U; elsif deleting then L_action := D; else raise_application_error(-20001, You should never ever get this error.); end if; Insert into employees_log (Who, when, action) Values (user, sysdate, L_action);End; /4、测试update employees_copy set salary= salary*1.1;5、查询select *from employess_log;2.3.2 行触发器是指为受到影响的各个行激活的触发器,定义与语句触发器类似,有以下两个例外:1、 定义语句中包含FOR EACH ROW子句2、 在BEFOREFOR EACH ROW触发器中,用户可以引用受到影响的行值。比如:定义:create trigger biufer_employees_department_id before insert or update of department_id on employees_copy referencing old as old_value new as new_value for each row when (new_value.department_id80 )begin :new_mission_pct :=0;end;/Referencing 子句:执行DML语句之前的值的默认名称是 :old ,之后的值是 :newinsert 操作只有:newdelete 操作只有 :oldupdate 操作两者都有referencing子句只是将new 和old重命名为new_value和old_value,目的是避免混淆。比如操作一个名为new的表时。作用不很大。 为主健生成自增序列号1、创建数据表create table foo(id number, data varchar2(20);2、创建序列create sequence foo_seq;3、创建触发器create or replace trigger bifer_foo_id_pk before insert on foo for each rowbegin select foo_seq.nextval into :new.id from dual;end;/4、插入数据测试insert into foo(data) values(donny);insert into foo values(5,Chen);5、查询select * from foo; 备份数据(插入、修改、删除)1、 创建测试表create table employees_copy as select *from hr.employees;(上面已经创建)2、 创建备份表create table Employees_bak as select * from employees_copy where 1=0;3、创建触发器create or replace trigger employees_copy_bef_dui before insert or update or delete on employees_copy referencing old as old_value new as new_value for each row -when (new_value.department_id 80)begin if inserting then insert into employees_bak values (:new_value.EMPLOYEE_ID, :new_value.FIRST_NAME, :new_value.LAST_NAME, :new_value.EMAIL, :new_value.PHONE_NUMBER, :new_value.HIRE_DATE, :new_value.JOB_ID, :new_value.SALARY, :new_value.COMMISSION_PCT, :new_value.MANAGER_ID, :new_value.DEPARTMENT_ID); else insert into employees_bak values (:old_value.EMPLOYEE_ID, :old_value.FIRST_NAME, :old_value.LAST_NAME, :old_value.EMAIL, :old_value.PHONE_NUMBER, :old_value.HIRE_DATE, :old_value.JOB_ID, :old_value.SALARY, :old_value.COMMISSION_PCT, :old_value.MANAGER_ID, :old_value.DEPARTMENT_ID); end if;end;/4、 测试插入、删除、修改employees_copy表中的数据。5、查看select * from employees_bak t; 对数据操作的约束根据用户和数据表中某一个字段的值来限定修改和删除,只有指定的用户才可以修改和删除。1、创建数据表create table TRG_EMPLOYESS as select* from HR.EMPLOYEES;2、创建触发器当TRG_EMPLOYESS中HIRE_DATE大于1999-1-1或者SALARY大于10000时,数据不能被其它用户修改或删除,只有USER_NAME这个用户可以删除。create or replace trigger TRG_EMPLOYESS_BEF_DU before update or delete on TRG_EMPLOYESS referencing old as old_value new as new_value for each row when (old_value.HIRE_DATE to_date(1990-1-1,yyyy-mm-dd) or old_value.SALARY 10000)begin if updating and (:old_value.SALARY 10000 or :old_value.HIRE_DATE to_date(1999-1-1,yyyy-mm-dd) and userWHN then RAISE_APPLICATION_ERROR (-20002,你无权修改此数据,请联系管理员!); end if; if deleting and (:old_value.SALARY 10000 or :old_value.HIRE_DATE to_date(1999-1-1,yyyy-mm-dd) and userWHN then RAISE_APPLICATION_ERROR (-20001,你无权删除此数据,请联系管理员!); end if;end;3、测试delete from whn.trg_employess t where t.employee_id=199;update whn.trg_employess t set t.last_name=t.last_name|11 where t.employee_id=199;delete from whn.trg_employess t where t.employee_id=205;update whn.trg_employess t set t.last_name=t.last_name|11 where t.employee_id=205;2.3.3 INSTEAD OF 触发器更新视图1、创建视图Create or replace view vw_trg_employess as Select first_name | , | last_name name, email, phone_number, employee_id emp_id From trg_employess;2、尝试更新email和name-name无法修改,提示“ORA-01733:此处不请允许虚拟列”update vw_trg_employess set name=Chen1, Donny1,email=163where emp_id=202;-email可以修改update vw_trg_employess set email=163where emp_id=2023、创建触发器create or replace trigger VW_TRG_EMPLOYESS_INS_UPD INSTEAD OF Update on VW_TRG_EMPLOYESSBegin Update TRG_EMPLOYESS Set EMPLOYEE_ID = :new.EMP_ID, FIRST_NAME = substr(:new.NAME, instr(:new.NAME, ,) + 2), LAST_NAME = substr(:new.NAME, 1, instr(:new.NAME, ,) - 1), PHONE_NUMBER = :new.PHONE_NUMBER, EMAIL = :new.EMAIL -通过测试,此列必须得写,要不然无法更新此值,即使更新语句中已经写了更新此列 Where EMPLOYEE_ID = :old.EMP_ID;end;4、测试update vw_trg_employess set name=Chen1, Donny1,email=163where emp_id=202;2.3.4 模式触发器用户事件:CREATE / ALTER / DROP / ANALYZE / AUDIT / GRANT / REVOKE / RENAME / TRUNCATE / LOGOFF1、创建日志表- Create tablecreate table TRG_DDL_LOG( OBJECT_OWNER VARCHAR2(30), OBJECT_NAME VARCHAR2(30), OBJECT_TYPE VARCHAR2(30), ALTER_BY_USER VARCHAR2(30), SYS_EVENT VARCHAR2(30), ALTERATION_TIME DATE);/1、 创建触发器-DDL所有操作日志create or replace trigger trg_ddl_database after ddl on databaseBEGIN if sys.sysevent in (CREATE, ALTER, DROP, ANALYZE, AUDIT, GRANT, REVOKE, RENAME, TRUNCATE) then INSERT INTO trg_ddl_log VALUES (sys.dictionary_obj_owner, sys.dictionary_obj_name, sys.dictionary_obj_type, sys.login_user, sys.sysevent, sysdate); end if;END;-某个用户的删除操作create or replace trigger trg_ddl_username_drop before DROP on username.schemaBEGIN INSERT INTO trg_ddl_log VALUES (sys.dictionary_obj_owner, sys.dictionary_obj_name, sys.dictionary_obj_type, sys.login_user, sys.sysevent, sysdate);END;/3.、测试create table drop_me(a number);create view drop_me_view as select *from drop_me;drop view drop_me_view;drop table drop_me;4、查询select * from trg_ddl_log t;2.3.5 数据库触发器 可以创建在数据库事件上的触发器,包括错误、登录、注销、关闭和启动。 数据库启动、关闭1、 创建日志表- Create tablecreate table TRG_SYSTEM_LOG( INSTANCE_NUM NUMBER, DATABASE_NAME VARCHAR2(50), LOGIN_USER VARCHAR2(30), SYSEVENT VARCHAR2(20), TIME DATE)tablespace TEST_DATA pctfree 10 initrans 1 maxtrans 255 storage ( initial 64K minextents 1 maxextents unlimited );- Add comments to the columns comment on column TRG_SYSTEM_LOG.INSTANCE_NUM is 实例名;comment on column TRG_SYSTEM_LOG.DATABASE_NAME is 数据库名;comment on column TRG_SYSTEM_LOG.LOGIN_USER is 登录用户名;comment on column TRG_SYSTEM_LOG.SYSEVENT is 系统事件;comment on column TRG_SYSTEM_LOG.TIME is 操作时间;/2、 创建触发器-启动日志create or replace trigger trg_system_startup after startup on databasebegin insert into trg_system_log values (ora_instance_num, ora_database_name, ora_login_user, ora_sysevent, sysdate);end;-关闭日志create or replace trigger trg_system_shutdown before shutdown on databasebegin insert into trg_system_log values (ora_instance_num, ora_database_name, ora_login_user, ora_sysevent, sysdate);end;3、 查询日志信息select * from trg_system_log t 数据库连接触发器1、 创建日志表- Create tablecreate table TRG_LOGONOFF_LOG( USERNAME VARCHAR2(20), LOG_TIME DATE, ONOFF VARCHAR2(6), ADDRESS VARCHAR2(30);2、创建触发器记录用户TEST的连接日志信息。-登录日志create or replace trigger trg_logon after logon on databasebegin if ora_login_user TEST then insert into trg_logonoff_log values (ora_login_user, sysdate, logon, ora_client_ip_address); end if;end;/-退出日志create or replace trigger trg_logoff before logoff on databasebegin if ora_login_user TEST then insert into trg_logonoff_log values (ora_login_user, sysdate, logoff, ora_client_ip_address); end if;end;/3、查询日志select * from trg_logonoff_log t2.4 禁用和启用触发器方法一:要使用此命令,必须拥有表或者拥有ALTER ANY TRIGGER 系统权限。alter trigger disable;alter trigger enable;方法二: 使用alter table命令,必须拥有有或者拥有ALTER ANY TABLE系统权限。Alter table disable all triggers;Alter table enable all triggers;事务处理:在触发器中,不能使用commit / rollback因为ddl语句具有隐式的commit,所以也不允许使用oracle学习笔记_触发器触发器是特定事件出现的时候,自动执行的代码块。类似于存储过程,但是用户不能直接调用他们。功能:1、 允许/限制对表的修改2、 自动生成派生列,比如自增字段3、 强制数据一致性4、 提供审计和日志记录5、 防止无效的事务处理6、 启用复杂的业务逻辑开始create trigger biufer_employees_department_idbefore insert or update of department_id on employeesreferencing old as old_value new as new_valuefor each rowwhen (new_value.department_id80 )begin:new_mission_pct :=0;end;/触发器的组成部分:1、 触发器名称2、 触发语句3、 触发器限制4、 触发操作1、 触发器名称create trigger biufer_employees_department_id命名习惯:biufer(before insert update for each row)employees 表名department_id 列名2、 触发语句比如:表或视图上的DML语句DDL语句数据库关闭或启动,startup shutdown 等等before insert or update of department_id on employeesreferencing old as old_value new as new_valuefor each row说明:1、 无论是否规定了department_id ,对employees表进行insert的时候2、 对employees表的department_id列进行update的时候3、 触发器限制when (new_value.department_id80 )限制不是必须的。此例表示如果列department_id不等于80的时候,触发器就会执行。其中的new_value是代表跟新之后的值。4、 触发操作是触发器的主体begin:new_mission_pct :=0;end;主体很简单,就是将更新后的commission_pct列置为0触发:insert into employees(employee_id, last_name,first_name,hire_date,job_id,email,department_id,salary,commission_pct )values( 12345,Chen,Donny, sysdate, 12, ,60,10000,.25);select commission_pct from employees where employee_id=12345;触发器不会通知用户,便改变了用户的输入值。触发器类型:1、 语句触发器2、 行触发器3、 INSTEAD OF 触发器4、 系统条件触发器5、 用户事件触发器1、 语句触发器是在表上或者某些情况下的视图上执行的特定语句或者语句组上的触发器。能够与INSERT、UPDATE、DELETE或者组合上进行关联。但是无论使用什么样的组合,各个语句触发器都只会针对指定语句激活一次。比如,无论update多少行,也只会调用一次update语句触发器。例子:需要对在表上进行DML操作的用户进行安全检查,看是否具有合适的特权。Create table foo(a number);Create trigger biud_fooBefore insert or update or delete On fooBeginIf user not in (DONNY) then Raise_application_error(-20001, You dont have access to modify this table.);End if;End;/即使SYS,SYSTEM用户也不能修改foo表试验对修改表的时间、人物进行日志记录。1、 建立试验表create table employees_copy as select *from hr.employees2、 建立日志表create table employees_log( who varchar2(30), when date);3、 在employees_copy表上建立语句触发器,在触发器中填充employees_log 表。Create or replace trigger biud_employee_copy Before insert or update or delete On employees_copyBegin Insert into employees_log( Who,when) Values( user, sysdate); End;/4、 测试update employees_copy set salary= salary*1.1;select *from employess_log;5、 确定是哪个语句起作用?即是INSERT/UPDATE/DELETE中的哪一个触发了触发器?可以在触发器中使用INSERTING / UPDATING / DELETING 条件谓词,作判断:begin if inserting then - elsif updating then - elsif deleting then - end if;end;if updating(COL1) or updating(COL2) then -end if;试验 1、 修改日志表alter table employees_log add (action varchar2(20);2、 修改触发器,以便记录语句类型。Create or replace trigger biud_employee_copy Before insert or update or delete On employees_copyDeclare L_action employees_log.action%type;Begin if inserting then l_action:=Insert; elsif updating then l_action:=Update; elsif deleting then l_action:=Delete; else raise_application_error(-20001,You should never ever get this error.); Insert into employees_log( Who,action,when) Values( user, l_action,sysdate);End;/3、 测试insert into employees_copy( employee_id, last_name, email, hire_date, job_id)values(12345,Chen,Donnyhotmail,sysdate,12);select *from employees_logupdate employees_copy set salary=50000 where employee_id = 12345;2、 行触发器是指为受到影响的各个行激活的触发器,定义与语句触发器类似,有以下两个例外:1、 定义语句中包含FOR EACH ROW子句2、 在BEFOREFOR EACH ROW触发器中,用户可以引用受到影响的行值。比如:定义:create trigger biufer_employees_department_idbefore insert or update of department_id on employees_copyreferencing old as old_value new as new_valuefor each rowwhen (new_value.department_id80 )begin:new_mission_pct :=0;end;/Referencing
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 初中化学课堂互动教学策略与化学实验操作技能培养研究教学研究课题报告
- 2026年云南珠光实业集团有限公司备考题库(含答案详解)
- 乐山职业技术学院2025年下半年公开考核招聘工作人员备考题库含答案详解
- 2026年澄江市教育体育系统公开招聘毕业生备考题库及一套完整答案详解
- 朝阳市第二医院2025年放射影像技师招聘备考题库及一套参考答案详解
- 2026年北京航空航天大学可靠性与系统工程学院聘用编科研助理F岗招聘备考题库及答案详解一套
- 南京古生物所非在编项目聘用人员(劳务派遣)招聘备考题库(2025年第18期)参考答案详解
- 初中历史教学中如何引导学生进行史料分析的探究教学研究课题报告
- 2026年中化地质矿山总局湖南地质勘查院校园招聘6人备考题库参考答案详解
- 2025年区块链跨境电商供应链金融市场分析报告
- 病理生理学复习重点缩印
- 《大数的认识》复习教学设计
- GB/T 3513-2018硫化橡胶与单根钢丝粘合力的测定抽出法
- GB/T 34590.3-2017道路车辆功能安全第3部分:概念阶段
- GB/T 11417.5-2012眼科光学接触镜第5部分:光学性能试验方法
- 《寝室夜话》(4人)年会晚会搞笑小品剧本台词
- 统编教材部编人教版小学语文习作单元教材解读培训课件:统编小语四-六年级习作梳理解读及教学建议
- 开放大学土木工程力学(本)模拟题(1-3)答案
- 医疗机构远程医疗服务实施管理办法
- 【教学课件】谋求互利共赢-精品课件
- 情感性精神障碍护理课件
评论
0/150
提交评论