DP数据库编码规范_第1页
DP数据库编码规范_第2页
DP数据库编码规范_第3页
DP数据库编码规范_第4页
DP数据库编码规范_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、武汉东浦信息技术有限公司 数据库编码规范公司名称:Dawnpro Information & Technologies, Ltd 2011年6月17日地址: 邮编: 电话: 传真: 手机: E-mail: 网址: 目录目录2文档控制4文档说明51. 书写规范61.1 大小写风格71.1.1 所有数据库关键字和保留字使用大写,其他使用小写71.1.2 允许所有数据库代码统一使用小写71.2 缩进风格81.2.1 程序块采用缩进风格书写81.2.2 使用空格,不允许使用TAB 键81.2.3 同一条语句占用多行时,每行的第一个关键字应当左对齐81.2.4 同一部分内容,多行表达时缩进81.2.5

2、复杂SQL的多层嵌套缩进方式81.3 空格及换行111.3.1不允许把多个语句写在一行中,即一行只写一条语句111.3.2 避免将SQL 语句写到同一行,再短的语句也要在关键字和谓词处换行111.3.3相对独立的程序块之间加空行111.3.4 超长语句的换行121.3.5 begin、end 独立成行121.3.6 if 后的条件要用括号括起来,括号内每行最多两个条件121.3.7不同类型的操作符混合使用时,使用括号进行隔离,以使代码清晰122注释规范142.1 一般性注释152.1.1 注释尽可能简洁,清晰152.1.2 创建每一数据库对象时都要加上COMMENT ON注释152.1.3 注

3、释语法包含两种情况:单行注释、多行注释152.2 函数/过程文本注释162.2.1 一般情况下,源程序有效注释量须在30%以上162.2.2 统一文件头的注释162.2.3 所有变量定义需要加注释,说明该变量的用途和含义172.2.4 注释内容要清晰、明了、含义准确,防止注释二义性172.2.5 在注释中不要使用缩写,特别是不常用的缩写172.2.6 对代码的修改,都需要注释172.2.7 对程序分支必须书写注释172.2.8在代码的功能、意图层次上进行注释,提供有用、额外的信息172.2.9 注释应与其描述的代码相邻182.2.10 注释与所描述的内容进行同样的缩排182.2.11注释上面的

4、代码应空行隔开182.2.12 在块的每个主要部分之前添加注释182.2.13 在块和过程的开头注释中还可以增加要访问的数据库等信息182.2.14 避免在一行代码或表达式的中间插入注释182.2.15在程序块的结束行右方加注释,以表明程序块结束182.2.16 注释用中文书写182.2.17 复用代码需要说明183程序编写规范193.1 日常语法规范203.1.1 避免隐式的数据类型转换203.1.2 使用is null 或is not null 或nvl 函数判断变量是否为空203.1.3 避免使用非常复杂的SQL语句203.1.4 尽可能地使用相关表字段的类型定义,形如%type、%ro

5、wtype203.1.5 存储过程中变量的声明应集中在as 和begin 关键字之间213.1.6 使用varchar2 代替varchar 类型213.1.7 当存储过程有多个分支返回时,若有事务,需确保各个分支都结束了事务213.1.8 采用成熟、稳定、可靠的技术来编码213.1.9 原则上不要使用动态sql,如果非得使用运态sql,须绑定变量213.1.10 尽量不要使用子函数方式实现存储过程,应分别定义213.1.11 代码中不建议使用goto 语句223.1.12 确保所有的变量和参数都被使用223.2 常用SQL 语句的编写规范233.2.1 create语句233.2.2 sel

6、ect语句233.2.3 insert语句243.2.4 update语句253.2.5 delete语句253.3 条件执行语句编写规范273.3.1 case when条件语句273.3.2 if语句编写273.4 循环语句编写规范283.4.1 简单循环语句283.4.2 FOR循环语句283.4.3 WHILE循环语句283.5 函数文本(存储过程、函数和包等)293.6 游标使用304其它规范314.1 异常处理324.1.1 异常类型324.1.2 异常声明324.1.3 异常抛出324.1.4 异常捕获334.2 脚本规范344.2.1 所有脚本按内容分开存放,并按以下顺序使用3

7、44.2.2 创建每类对象脚本的首部应该有注释344.2.3 每个存储过程(函数)单独创建脚本,方便在项目配置库中的管理344.3 数据库设计354.3.1一般表设计354.3.2 特殊表设计原则354.3.3索引设计原则354.3.4完整性设计原则354.3.5触发器354.3.6视图设计36文档控制文档更新记录日期更新人版本备注文档审核记录日期审核人职务备注Kon文档去向记录拷贝份数接受人职务备注文档说明v 本文档规定了在使用数据库SQL语言进行信息处理时的编码规范。v 通过数据库编码规范的执行,使数据库的开发规范化、标准化,便于阅读、理解和继承,提高开发质量和效率。v 本文档的阅读对象为

8、公司从事软件项目的员工。v 本文档以Oracle数据库为样本,有些具体方法和规定只对该数据库有效。v 本文档是数据库开发标准的一部分,后续将视情况推出其他规范内容文档依据本文档是公司项目组多年工作经验的总结,集聚了公司全体软件开发人员的经验、知识和智慧。文档目的采用一种一致的、可预见的方式建立PLSQL程序代码,能使代码更易于调试和维护;更易于发现问题的根源、分析代码的依赖性等。编码规范主要体现在注释、代码的结构、异常处理等。1. 书写规范 1.1 大小写风格1.1.1 所有数据库关键字和保留字使用大写,其他使用小写示例: SELECT header_idFROM po_headers;DEC

9、LARE v_count PLS_INTEGER;1.1.2 允许所有数据库代码统一使用小写示例:select header_id from po_headers;declare v_count pls_integer;1.2 缩进风格1.2.1 程序块采用缩进风格书写为了保证代码清晰易读,风格一致,缩进格数统一为4 个字符。1.2.2 使用空格,不允许使用TAB 键以免用不同的编辑器阅读程序时,因TAB 键所设置的空格数目不同而造成程序布局不整齐。1.2.3 同一条语句占用多行时,每行的第一个关键字应当左对齐示例:select field1, field2,from t_tablenamew

10、here field1 1and filed2 1 and field4 sysdate and (field2 3 or field3 = 5) 1.2.5 复杂SQL的多层嵌套缩进方式复杂SQL的多层嵌套,同层保持左对齐,不同层之间缩进,体现清晰的层次关系。示例:insert into to_scm_demandplan(id, xqbb, xqdw, xqlb, xqpch, cxmc1, cxmc2, cjlb, clys, ddysname, resourcecolor, resourcecolorname, clsx, gnwqf, dph, bz1, ddh,ddhh, repl

11、ycreatetime, bz2, flag, batchid, createtime, updatetime, deleteflag, xqxz, replytime, planintime)select seq_to_scm_demandplan.nextval, temp_xqbb, 3000, 1, d.demandbatch, d.sellcar, ducemark, d.cjlb, d.ddyscolor, d.ddyscolorname, d.resourcecolor, d.resourcecolorname, d.carproperty, d.country, d.

12、underpan, d.remark1, d.orderid, d.orderdetailid, d.replycreatetime, , , , sysdate, sysdate, 0, 2, d.replytime, d.planintimefrom (select r.demandbatch, r.sellcar, ducemark, 10 cjlb, o.colorcode ddyscolor, o.color ddyscolorname, r.color resourcecolor, r.colorname resourcecolorname, r.carproperty,

13、 r.country, r.underpan, q.remark1, o.ordercode orderid, o.rowno orderdetailid, o.replycreatetime, o.replytime, r.planintimefrom to_resource r, to_orderqueue q, (select o.ordercode, q.rowno, o.colorcode, o.color, q.remark1, r.createtime replycreatetime, q.isscmreply, r.replytimefrom to_order o, to_or

14、derqueue q, to_orderreply rwhere o.ordercode = q.ordercode and o.ordercode = r.ordercode and q.rowno = r.rowno and o.deleteflag = 0 and q.deleteflag = 0 and r.deleteflag = 0 and r.status = 1 and q.status 4 and isscmreply in (1, 2, 4) owhere r.orderid = q.ordercode(+) and r.orderdetailid = q.rowno(+)

15、 and r.deleteflag = 0 and r.planintime =fn_getday_aftersomedays(to_char(sysdate, YYYY-MM-DD), to_number(fn_getsysparam(n_day), 0)and r.planintime trunc(sysdate) thenselect duty_namefrom sm_dutywhere duty_id = :duty_id;end if;应写成:v_duty_id := 1;if trunc(nvl(disabled_date, sysdate + 1) trunc(sysdate)

16、thenselect duty_namefrom sm_dutywhere duty_id = :duty_id;end if;1.3.4 超长语句的换行超过110 列的语句要分行书写,长表达式应在低优先级操作符处换行,操任符或关键字放在新行之首。划分出新行应当适当地缩进,使排版整齐,语句可读。示例:以下不符合规范110 列v1 = s1 + + (a * b * c * d) + (e * f) + 应写成:110 列v1 = s1 + + (a * b * c * d)+ (e * f) + 说明:A. 加法的优先级低于乘法,因此应在加号处折行;B. 两组乘法虽然在逻辑上会优先于加法,但加

17、上括号使可读性更强。1.3.5 begin、end 独立成行示例:以下不符合规范begin null; exception when others then null; end;应写成:beginnull;exceptionwhen others thennull;end;1.3.6 if 后的条件要用括号括起来,括号内每行最多两个条件示例:if (v_count = 1 or v_count = 2or v_count = 5 or v_count = 6) thenselect sysdateinto v_datefrom dual;end if;1.3.7不同类型的操作符混合使用时,使用

18、括号进行隔离,以使代码清晰示例:以下书写不符合规范:if abc|def = abcdef thennull;end if;应写成:if (abc|def) = abcdef thennull;end if;2注释规范2.1 一般性注释2.1.1 注释尽可能简洁,清晰2.1.2 创建每一数据库对象时都要加上COMMENT ON注释以说明该对象的功能和用途;建表时,对某些数据列也要加上COMMENT ON注释,以说明该列和/或列取值的含义。如:XX 表中有CZZT列属性为NUMBER(10, 0)可加COMMENT ON 注释如下COMMENT ON COLUMN XX.CZZT IS 0 =

19、正常, 1 = 等待, 2 = 超时, 3 = 登出2.1.3 注释语法包含两种情况:单行注释、多行注释单行注释:注释前有两个连字符(-),一般对变量、条件子句可以采用该类注释。多行注释:符号/*和*/之间的内容为注释内容。对某项完整的操作建议使用该类注释。2.2 函数/过程文本注释2.2.1 一般情况下,源程序有效注释量须在30%以上注释的原则是有助于对程序阅读理解,在该加的地方都加了,注释不宜太多也不能太少,注释语言须准确、易懂、简洁。2.2.2 统一文件头的注释示例:使用以下书写规范:/* name: sm_insert_user_f* purpose:向sm_users 表中写入一条记

20、录* revsions:* ver date author description* 1.0.0 2006.10.01 Tang 1.创建此存储过程* 1.0.1 2006.12.01 Tang 1.增加hint* 2. * 1.2.0 2007.01.01 Tang 1.增加传入参数* parameters:* p_user_name in varchar2 新增用户名* p_password in varchar2 新增用户的加密密码* p_diabled_date in date 新增用户的过期时间* p_created_by in number 新增用户的操作人* p_password

21、_cyle in number 密码更改周期* o_message out varchar2 执行异常时返回的错误信息* return:* 0 成功* -1 失败* notes:* 1.本函数在前台调用,系统后台会自动地为last_updated_by、* last_update_date、creation_date 赋值.*/说明:Name:函数或过程的名称Purpse:函数或过程的用途Revisions: 版本信息Ver:当前版本Date:创建或修改日期Author:创建人或修改人Description:在修改时,一定要在这里写出改动的内容,用1、2、3 清晰列出来Parameters:对

22、传入和传出参数进行说明return:函数返回结果notes:使用该函数或过程时需要特别注意的事情,如果没有可以不写2.2.3 所有变量定义需要加注释,说明该变量的用途和含义说明该变量要用作什么通常,简单使用单行注释就行了例如:l_sfzh CHAR(11) -身份证号码2.2.4 注释内容要清晰、明了、含义准确,防止注释二义性2.2.5 在注释中不要使用缩写,特别是不常用的缩写在使用缩写时或之前,应进行必要的说明2.2.6 对代码的修改,都需要注释通过注释,标明修改的开始行、结束行,并保留修改前的代码在注释中还要记录修改原因、修改人、修改日期等内容2.2.7 对程序分支必须书写注释这些语句往往

23、是程序实现某一特定功能的关键,对于维护人员来说,良好的注释帮助更好的理解程序,有时甚至优于看设计文档。2.2.8在代码的功能、意图层次上进行注释,提供有用、额外的信息注释目的是解释代码的目标、功能和采用的方法,通过注释提供的信息,帮助理解代码,而不要提供重复杂、无用的注释。示例:以下代码注释意义不大。-v_count = 0if v_count = 0而如下的注释则给出了额外有用的信息。v_count := sm_insert_user(p1,p2,p2);-调用其它过程执行成功if v_count = 0 then2.2.9 注释应与其描述的代码相邻对代码注释应放在其上方或右方(对单条语句的

24、注释)相邻位置,不可放在被描述代码行的下方。示例:以下编码不符合本规范:select user_name, disabled_date into v_user, v_disabled_date from sm_users su where su.user_id = p_user_id;-取得用户的失效时间应该如下书写:-取得用户的失效时间Select user_name, disabled_dateInto v_user_name, v_disabled_datefrom sm_users suwhere su.user_id = p_user_id;2.2.10 注释与所描述的内容进行同样的

25、缩排2.2.11注释上面的代码应空行隔开2.2.12 在块的每个主要部分之前添加注释在块的每个主要部分之前增加注释,解释下组语句目的,最好是说明该段语句及算法的目的以及要得到的结果,但不要对其细节进行过多的描述,注释尽量不要破坏代码的结构。2.2.13 在块和过程的开头注释中还可以增加要访问的数据库等信息2.2.14 避免在一行代码或表达式的中间插入注释2.2.15在程序块的结束行右方加注释,以表明程序块结束2.2.16 注释用中文书写2.2.17 复用代码需要说明3程序编写规范3.1 日常语法规范3.1.1 避免隐式的数据类型转换在书写代码时,必须确定表的结构和表中各个字段的数据类型,避免在

26、赋值和条件比较时出现隐性的数据类型转换。示例:以下代码不符合规范,status_type 是number 型数据.select wdj.wip_entity_idfrom wip.wip_discrete_jobs wdjwhere wdj.status = 3;应如下书写:select wdj.wip_entity_idfrom wip.wip_discrete_jobs wdjwhere wdj.status = 3;3.1.2 使用is null 或is not null 或nvl 函数判断变量是否为空示例:以下代码不符合规范if v_user_name = null thendbms_

27、output.put_line(user name is null);end if;应该如下书写:if v_user_name is null thendbms_output.put_line(user name is null);end if;3.1.3 避免使用非常复杂的SQL语句对于非常复杂的sql(特别是多层嵌套,带子句或相关的查询),应该先考虑是否设计不当引起的,对于一些非常复杂的sql 可以考虑使用程序实现,原则上遵循一句话只做一件事情。3.1.4 尽可能地使用相关表字段的类型定义,形如%type、%rowtype1、可以使用”%TYPE”属性而不是将变量类型硬性编码。例如:DEC

28、LAREv_FirstName students.first_name%TYPE;通过使用%TYPE,v_FirstName变量将同students表的first_name列的类型相同(可以理解为将两者绑定起来)。每次匿名块或命名块运行该语句块以及编译存储对象(过程、函数、包、对象类和触发器)时,就会确定该类型。2、在PL/SQL中将一个记录声明为具有相同类型的数据库行的作法是很常见的。PL/SQL提供了%ROWTYPE运算符,使得这样的操作更为方便。例如:DECLAREv_StudentRecord students%ROWTYPE;将定义一个记录,该记录中的字段将与students表中的列

29、相对应。例如:Declarev_jobs %rowtype;beginselect * into v_jobsfrom where job_id =&aa;dbms_output.put_line(序号|v_jobs.job_id );dbms_output.put_line(名称|v_jobs.job_title);end;执行,我们输入aa变量的值:AD_VP输出结果为:序号AD_VP名称Administration Vice President3.1.5 存储过程中变量的声明应集中在as 和begin 关键字之间不要在代码中随意定义变量,定义变量时,完成相同功

30、能模块的变量应放在一起,不同模块的变量应空行隔开,增加代码的可读性。3.1.6 使用varchar2 代替varchar 类型3.1.7 当存储过程有多个分支返回时,若有事务,需确保各个分支都结束了事务3.1.8 采用成熟、稳定、可靠的技术来编码对于先进的技术或没有成熟的技术使用,需在team 内进行评审。3.1.9 原则上不要使用动态sql,如果非得使用运态sql,须绑定变量3.1.10 尽量不要使用子函数方式实现存储过程,应分别定义3.1.11 代码中不建议使用goto 语句3.1.12 确保所有的变量和参数都被使用声明变量也要一定的系统开销,不要定义没有使用的变量、参数。3.2 常用SQ

31、L 语句的编写规范3.2.1 create语句create table dft_dksz(YHBS VARCHAR2(20) not null, ZHGX DATE, DKKHD VARCHAR2(24), CONSTRAINT pk_dksz_yhbs primary key (YHBS) )tablespace xxx3.2.2 select语句查询语句采用以下原则编写(可最大化重用共享池中的SQL 语句,提高应用程序性能)v 将select 语句分为5部分:(1) 由select 开头,后跟一个显示查询结果的列表;(2) 由from 开头,后跟一个或多个获取数据所涉及的表;(3) 由wh

32、ere 开头,后跟一个或多个确定所需值的条件;(4) 由group by开头,后跟一个或多个表列名,通过这些列以对查询结果进行汇总;(5) 由order by开头,后跟一个或多个表列名,通过这些列以对查询结果进行排序。v 每个部分分行编写,将每一行的第一个关键字与第一行的select左对齐,如select col1, col2, col3 from table1 where col1 col2 group by col1, col2 order by col1;v 语句中嵌入逗号时,在逗号后面加一空格,当逗号是最后一个字符时,把它放在本行v 当语句的同一部分要延续到下一行时,按下列格式排列:s

33、elect col1, col2, col3, col4, col5, col6, col7, col8, col9, col10v 将语句中where 和and 部分格式化,书写布局类似于where andandv 当语句中出现括号时,括号的两边不留空格v 在SQL 语句使用运算符时,操作两边应各留一个空格,如where X = Y and A = B and C = D3.2.3 insert语句insert into (, , , , , ,., , ) values (, , , , , ,., , )不规定每行要赋值的字段个数,但是每行字段数和与其对应的赋值行的赋值个数相同。3.2.

34、4 update语句update set = , = , 3.2.5 delete语句delete from table1 where col1 = ?3.3 条件执行语句编写规范3.3.1 case when条件语句v case when 条件语句多用于统计和计算语句中。v case when等关键字在每行的开头,并对齐显示。v 例如 case 运算式when 运算式 then 运算式when 运算式 then 运算式else 运算式end;case when 条件表达式 then 运算式when 条件表达式 then 运算式else 运算式end;3.3.2 if语句编写v if 条件语句

35、多用于逻辑判断中。v if等关键字在每行的开头,并对齐显示。v ifelse 语句可以嵌套,为提高代码的可读性,嵌套层次不应多于5 层。当嵌套层次太多时应考虑使用CASE 语句。v 例如if 条件表达式 thenelseif 条件表达式 thenelseend if;3.4 循环语句编写规范3.4.1 简单循环语句LOOP EXIT WHEN END LOOP;3.4.2 FOR循环语句FOR 变量 IN 变量取值范围LOOP END LOOP;3.4.3 WHILE循环语句WHILE LOOP END LOOP;3.5 函数文本(存储过程、函数和包等)v 对于存储过程、函数等程序块都要有异常

36、处理部分,在异常部分的最后都要设置OTHERS异常情态处理器,以提高程序的自检能力,格式如下:BEGIN EXCEPTION WHEN excepname1 THENWHEN excepname2 THEN WHEN OTHERS THEN END;v 对于子程序、触发器、包等带名的程序块,要使用结束标识,如CREATE OR REPLACE PROCEDURE XXXsp_XXX IS BEGIN END XXXsp_XXX;/* 此处的过程名XXXsp_XXX是可选的,规范要求写上,与块开始的CREATE相对应 */3.6 游标使用使用游标批量,一般需要经过declare(定义),open

37、(打开),fetch(取出游标所指的记录),loop fetch(循环读取游标),close and deallocate(关闭和释放) 五个步骤。v 游标定义游标定义通常在存储过程begin之前,定义临时变量后定义CURSOR。cursor cur_order is select from where ;cur_row_order cur_order%rowtype;v 打开游标open cur_order;v 取出游标记录fetch cur_order into cur_row_order;v 循环读取游标while cur_order %found loopfetch cur_order

38、 into cur_row_order;end loop;v 关闭释放游标close cur_order;4其它规范4.1 异常处理4.1.1 异常类型异常分为内部定义和用户自定义,内部定义异常有预定义的名称,明细描述见下表:异常名称(exception)异常代码(Sqlcode)异常描述(Sqlerrm)ACCESS_INTO_NULLORA-06530程序尝试为一个未初始化对象的属性赋值CASE_NOT_FOUNDORA-06592CASE语句中没有任何WHEN子句满足条件,并且没有编写ELSE子句COLLECTION_IS_NULLORA-06531程序尝试调用一个未初始化(自动赋为nu

39、ll)嵌套表或变长数组的集合方法(不包括EXISTS),或者是程序尝试为一个未初始化嵌套表或变长数组的元素赋值CURSOR_ALREADY_OPENORA-06511程序尝试打开一个已经打开的游标。一个游标在重新打开之前必须关闭。DUP_VAL_ON_INDEXORA-00001程序尝试向一个有着唯一约束条件的数据库字段中保存重复值INVALID_CURSORORA-01001程序尝试操作一个不合法的游标 INVALID_NUMBERORA-01722字符串向数字转换时会发生错误。NO_DATA_FOUNDORA-01403SELECT INTO语句没有返回数据ROWTYPE_MISMATCH

40、ORA-06504赋值语句中使用的主游标变量和PL/SQL游标变量的类型不兼容。STORAGE_ERRORORA-06500运行时内存溢出或内存不足SUBSCRIPT_BEYOND_COUNTORA-06533程序引用一个嵌套表或变长数组元素,但使用的下标索引超过嵌套表或变长数组元素总个数TOO_MANY_ROWSORA-01422SELECT INTO语句返回多行数据VALUE_ERRORORA-06502发生算术、转换、截位或长度约束错误ZERO_DIVIDEORA-01476除数为0自定义异常:对于其他的内部异常,可以在存储过程、子程序或包的声明部分自定义异常,用户自定义异常必须有一个名

41、字。4.1.2 异常声明异常只能在PL/SQL块、子程序或包的声明部分声明,异常不能出现在赋值语句或SQL语句中例子:DECLARE exp_noorder EXCEPTION;4.1.3 异常抛出错误发生时,异常就会被抛出,正常的执行语句会被终止,控制权被转到PL/SQL块的异常控制部分或子程序的异常控制部分。内部异常会由系统隐式地抛出,而用户定义异常用RAISE语句抛出。RAISE语句也可以抛出预定义异常,异常被抛出时,如果在当前块或子程序中没有找到对应的异常控制程序,异常就会被继续向上一级传递。否则异常直接在子程序中被捕获无法传递到上一级程序。例子:BEGINIF THEN RAISE

42、exp_noorder; 抛出自定义异常end if;EXCEPTIONWHEN exp_noorder THEN 捕获异常END;4.1.4 异常捕获异常处理程序用于捕获抛出的异常。异常控制程序运行后,当前块就会停止执行,直接运行异常处理程序。异常处理程序执行完毕后,子程序将结束运行。异常处理程序由WHEN子句和语句序列组成。WHEN子句与抛出异常相匹配时,相关语句序列会被执行。OTHERS处理器可以捕获所有未命名的异常块或子程序,在一场处理程序里只能有一个OTHERS处理器,因为OTHERS处理器能够保证所有的异常都会被控制。在异常处理程序中,通常使用内置函数 SQLCODE和SQLERRM获取异常信息。对于内部异常,SQLC

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论