当前位置: 首页 > news >正文

宿迁网站推广公司aso排名服务公司

宿迁网站推广公司,aso排名服务公司,网站建设公司dyfwzx,做的网站电脑上跟手机上不一样目录 数据查询以及伪列、伪表 Oracle连接方式 常用运算符 集合操作符 Oracle函数 日期函数: 字符函数: 数字函数: 转换函数: 其它函数: 分组函数: 分析函数 数据库对象 同义词 序列 视图 索引 PL/SQL块 游标…

目录

数据查询以及伪列、伪表

Oracle连接方式

常用运算符

集合操作符

Oracle函数

        日期函数:

        字符函数:

        数字函数:

        转换函数:

        其它函数:

        分组函数:

        分析函数

数据库对象

        同义词

        序列

        视图

        索引

PL/SQL块

游标触发器

        游标

        触发器

                创建触发器的语法:

                触发器由三部分组成:

子程序和程序包

        子程序

                子程序的优点:

                过程

                函数

程序包和程序包主体

        程序包

程序包规范

程序包的优点

程序包中的游标

内置程序包

程序包主体

子程序和程序包总结:


数据查询以及伪列、伪表

        A. { 查询不重复的数据:Distinct 连接运算符:|| 运算符:(+ - * / mod) }

        B.{ 伪列:rowid 是表中行的存储地址,该地址可以唯一地标识数据库中的一行,可以使用rowid快速地定位表中的一行 rownum 是查询返回的结果集中行的序号,可以使用它来限定查询返回的行数

伪表:dual }

        C.{ 单列排序:order by deptno desc 多列排序: order by deptno desc,sal asc }

Oracle连接方式

        D.{ 连接 》》》 左:left join 右:right join 内:inner join 全:full join

        自连接 》》》 应用场合:同一表中的字段与字段之间存在引用关系 ​ 注意:自连接时需要给表指定别名 例:查询员工‘SMITH’ 的上级领导的姓名 ​ select 领导表.ename from emp 员工表,emp 领导表 ​ where 员工表.ename=‘SMITH’ and 员工表.mgr=领导表.empno; }

常用运算符

E.{ 比较运算符 模糊查询like-通配符 %表示匹配任意个字符 _表示匹配单个字符 In(值列表) 表示查询在指定的值列表范围内的数据 is null判断是否为空 例:查询没有上级的员工信息 Between…and 判断是否在两值之间 例:查询薪水在2000-3000之间的员工信息 与not连用表示取否定 not like,not in,is not null,not between 逻辑运算符 连接多个比较运算的结果以生成一个或真或假的结果。 包括and(与),or(或),not(非) 例:查询薪水高于2000或者岗位为CLERK的员工信息,同时还要满足其姓名首字母为大写J }

集合操作符

F.{ 将两个查询的结果组合成一个结果集 Union(联合) 返回两个查询选定的所有的不重复的行 Union all(联合所有) 返回两个查询选定的所有行,包括重复行 Intersect(交集) 返回两个查询都有的行 Minus(减集) 返回由第1个查询选定但是没有被第2个查询选定的行。 即:在第1个结果集中减去在第2个结果集中出现的行

注意:集合操作符联接的各个查询要具有相同的列数,且对应列的数据类型必须相同。 }

Oracle函数

        日期函数:

        Add_Months(d,n) ​ 1:d-日期,n-月数 2:返回给指定日期加上指定月数后的日期值 ​ Months_Between(d1,d2) ​ 返回两个日期之间的月数 ​ Last_Day(d) ​ 返回指定日期当月的最后一天的日期值 ​ Round(d[,fmt]) ​ 返回四舍五入后的日期值 ​ Next_Day(d,day) ​ 返回指定日期之后的星期几的日期 ​ Extract(fmt from d) ​ 提取日期时间类型中的特定部分

        字符函数:

Initcap(char)Select initcap(‘hello’) from dual;Hello
Lower(char)Select lower(‘FUN’) from dual;fun
Upper(char)Select upper(‘sun’) from dual;SUN
Ltrim(char,set)Select ltrim( ‘xyzadams’,’xyz’) from dual;adams
Rtrim(char,set)Select rtrim(‘xyzadams’,’ams’) from dual;xyzad
Translate(char, from, to)Select translate(‘jack’,’j’ ,’b’) from dual;back (只1对1)
Replace(char, searchstring,[rep string])Select replace(‘jack and jue’ ,’j’,’bl’) from dual;black and blue
Instr (char, m, n)Select instr (‘worldwide’,’d’) from dual;5 (indexOf)
Substr (char, m, n)Select substr(‘abcdefg’,3,2) from dual;cd
Concat (expr1, expr2)Select concat (‘Hello’,’ world’) from dual;Hello world

        数字函数:

Abs(n)Select abs(-15) from dual;15
Ceil(n)Select ceil(44.778) from dual;45
Cos(n)Select cos(180) from dual;-.5984601
Cosh(n)Select cosh(0) from dual;1
Floor(n)Select floor(100.2) from dual;100
Power(m,n)Select power(4,2) from dual;16
Mod(m,n)Select mod(10,3) from dual;1
Round(m,n)Select round(100.256,2) from dual;100.26
Trunc(m,n)Select trunc(100.256,2) from dual;100.25
Sqrt(n)Select sqrt(4) from dual;2
Sign(n)Select sign(-30) from dual;-1

        转换函数:

        TO_CHAR:数值型或者日期型转化为字符型 ​ TO_DATE:字符型转换为日期型 ​ TO_NUMBER:将字符串转换为数值型的格式

select to_char(6666.3333,'0000') from dual;select to_char(sysdate,'YYYY"年"fmMM"月"fmDD"日"') from dual;select to_char(empno,'C99999') from emp;select to_date('2003-10-09','yyyy-mm-dd') from dual;select to_number('100') from dual;

        其它函数:

        处理null值和零值 ​ Nvl(exp1,exp2) ​ 将空值替换为指定的值 ​ 如果exp1为null,则返回exp2,否则返回exp1 ​ 例:查询所有员工的年薪和年奖金之和 ​ Nvl2(exp1,exp2,exp3) ​ 如果exp1不为null,则返回exp2,否则返回exp3 ​ Nullif(exp1,exp2) ​ 如果exp1=exp2,则返回null,否则返回exp1

        分组函数:

        GROUP BY子句 ​ 用于将信息划分为更小的组 ​ 每一组行返回针对该组的单个结果 ​ 注意:在包含Group by子句的查询中,select子句中列表的项只能是聚合函数、Group by表达式( 分组字段或表达式)、常数或包含上述项之一的表达式。 HAVING子句 ​ 用于指定 GROUP BY 子句检索行的条件 ORDER BY 字句 ASC 升序 DESC 降序

对分组后的数据进行筛选 AVG 求平均值 MIN 取最小 MAX 取最大 SUM求和 count计数

        分析函数

        ROW_NUMBER 返回连续的排位,不论值是否相等 ​ RANK 具有相等值的行排位相同,序数随后跳跃 ​ DENSE_RANK 具有相等值的行排位相同,序号是连续的

数据库对象

        同义词

#私有同义词
CREATE SYNONYM emp FOR SCOTT.emp;#公有同义词
CREATE PUBLIC SYNONYM emp_syn FOR SCOTT.emp;#删除同义词
DROP SYNONYM emp; 
DROP PUBLIC SYNONYM emp_syn; #替换现有的或创建同义词    查询同义词
CREATE OR REPLACE SYNONYM emp_syn FOR SCOTT.emp;
select * from emp_syn;

        序列

        创建序列

CREATE SEQUENCE toys_seqSTART WITH 10			指定第一个序号从10开始INCREMENT BY 10			指定序号之间的间隔为10MAXVALUE 2000			表示序列的最大值为2000MINVALUE 10				表示序列的最小值为10NOCYCLE					在达到最大值后停止生成下一个值CACHE 10;				指定内存中预先分配的序号数ALTER SEQUENCE toys_seq MAXVALUE 5000 CYCLE;	  使用ALTER SEQUENCE语句修改序列,不能更改序列的START WITH参数
DROP SEQUENCE toys_seq;							删除序列

        视图

 CREATE [OR REPLACE] [FORCE] VIEW		创建视图view_name [(alias[, alias]...)] AS select_statement[WITH CHECK OPTION][WITH READ ONLY];在视图上也可以使用修改数据的DML语句,如INSERT、UPDATE和DELETE视图上的DML语句有如下限制:只能修改一个底层的基表如果修改违反了基表的约束条件,则无法更新视图如果视图包含连接操作符、DISTINCT 关键字、集合操作符、聚合函数或 GROUP BY 子句,则将无法更新视图如果视图包含伪列或表达式,则将无法更新视图DROP VIEW view_name;					删除视图

        索引

CREATE INDEX item_index ON itemfile (itemcode);  		  创建索引   
ALTER INDEX item_index REBUILD; 			    		 重建索引
DROP INDEX item_index;						   			删除索引
CREATE INDEX index_reverse_empno ON emp(empno) REVERSE;	   反向键索引
CREATE BITMAP INDEX index_bit_job ON emp(job);			  位图索引
CREATE UNIQUE INDEX item_index ON itemfile (itemcode);     唯一索引
CREATE INDEX comp_index
ON itemfile(p_category, itemrate);						 组合索引与索引有关的数据字典视图有:
USER_INDEXES - 用户创建的索引的信息
USER_IND_PARTITIONS - 用户创建的分区索引的信息
USER_IND_COLUMNS - 与索引相关的表列的信息

PL/SQL块

DECLAREp_empno NUMBER;p_name VARCHAR2(20);p_sal NUMBER;c_rate CONSTANT NUMBER := 0.10;
BEGIN...p_empno:= 7366;SELECT ename, sal * c_rateINTO  p_name, p_salFROM emp WHERE empno = p_empno;...
END;PL/SQL 支持的流程控制结构:条件控制		  |    顺序控制IF 语句	    |		 GOTO 语句CASE 语句	|		 NULL 语句循环控制        LOOP 循环WHILE 循环FOR 循环输出语句:DBMS_OUTPUT.PUT_LINE('itemrate='|| irate);异常语句:raise_application_error(-20820,'*******');条件控制:A、 IF irate > 200 THENUPDATE itemfile SET itemrate = itemrate - 200WHERE itemcode = icode;ELSEUPDATE itemfile SET itemrate = itemrate - 50WHERE itemcode = icode;END IF;B、 CASE ‘&grade’WHEN ’A’ THEN DBMS_OUTPUT.PUT_LINE(’优异’);WHEN ’B’ THEN DBMS_OUTPUT.PUT_LINE (优秀’);ELSE DBMS_OUTPUT.PUT_LINE (’没有此成绩’);END CASE;循环控制:A、LOOP sequence_of_statementsEND LOOP;B、WHILE condition LOOP sequence_of_statementsEND LOOP;C、FOR e_emp or (counter) IN [REVERSE] v_emp or(value1..value2) LOOP sequence_of_statementsEND LOOP;顺序控制:IF qtyhand < relevel THENGOTO updation;ELSEGOTO quit;END IF;<<updation>>UPDATE itemfile SET qty_hand = qty_hand + re_levelWHERE itemcode = 'i201';<<quit>>NULL;动态SQL:DECLAREsql_stmt VARCHAR2(200);emp_id NUMBER(4) := 7566;emp_rec emp%ROWTYPE;BEGINEXECUTE IMMEDIATE 'CREATE TABLE bonus1 (id NUMBER, amt NUMBER)';sql_stmt := 'SELECT * FROM emp WHERE empno = :id';EXECUTE IMMEDIATE sql_stmt INTO emp_rec USING emp_id;END;

游标触发器

        游标

        %NOTFOUND ​ 如果FETCH语句失败,则该属性为"TRUE",否则为"FALSE"; ​ %FOUND ​ 如果FETCH语句成功,则该属性为"TRUE",否则为"FALSE"; ​ %ROWCOUNT ​ 返回游标当前的行数; ​ %ISOPEN ​ 如果游标是开的则返回"TRUE",否则为"FALSE";

创建隐式游标:DECLAREv_TOYID TOYS.ID%type := '&TOYID';v_TOYNAME TOYS.NAME%Type := '&TOYNAME';BEGINUPDATE TOYS SET NAME = v_TOYNAMEWHERE toyid=v_TOYID;IF SQL%NOTFOUND THENDBMS_OUTPUT.PUT_LINE('编号未找到。');ELSEDBMS_OUTPUT.PUT_LINE(‘表已更新');END IF;END;创建显示游标:DECLAREv_sal emp.sal%TYPE;	               			  CURSOR c_cur IS SELECT sal FROM emp WHERE sal<2500;BEGINOPEN c_cur;  FOR toy_rec IN c_cur LOOP 			循环游标DBMS_OUTPUT.PUT_LINE(‘玩具编号:'||' ' ||toy_rec.toyid||' ' ||‘玩具名称:'||' '||toy_rec.toyname||' '||‘玩具单价:'||' '||toy_rec.toyprice);END LOOP;LOOPFETCH c_cur INTO v_sal;EXIT WHEN c_cur%NOTFOUND;DBMS_OUTPUT.PUT_LINE (‘薪水:'||v_sal);END LOOP;CLOSE c_cur;END;使用有表变量执行动态SQL:declareType salcursor is ref cursor;--声明游标类型salcurvar salcursor;--定义游标变量mysal number;beginopen salcurvar for‘select sal from myemp where deptno=:dno’--动态SQLusing ‘&no’;--填补占位符的参数loopfetch salcurvar into mysal;exit when salcurvar%notfound;dbms_output.put_line(mysal);     end loop;end;

        触发器

        触发器是当特定事件出现时自动执行的存储过程 ​ 特定事件可以是执行更新的DML语句和DDL语句 ​ 触发器不能被显式调用 ​ 触发器的功能: ​ 自动生成数据 ​ 自定义复杂的安全权限 ​ 提供审计和日志记录 ​ 启用复杂的业务逻辑

                创建触发器的语法:
CREATE [OR REPLACE] TRIGGER trigger_nameAFTER | BEFORE | INSTEAD OF[INSERT] [[OR] UPDATE [OF column_list]] [[OR] DELETE]ON table_or_view_name[REFERENCING {OLD [AS] old / NEW [AS] new}][FOR EACH ROW][WHEN (condition)]pl/sql_block;行级触发器:CREATE OR REPLACE TRIGGER BI_TEST_TRGBEFORE INSERT OR UPDATE OF IDON TEST_TRGFOR EACH ROWBEGINIF INSERTING THENSELECT SEQ_TEST.NEXTVAL INTO :NEW.ID FROM DUAL;ELSERAISE_APPLICATION_ERROR(-20020, '不允许更新ID值!');END IF;END;
语句级触发器:CREATE OR REPLACE TRIGGER BI_TEST_TRGBEFORE INSERT OR UPDATE OF IDON TEST_TRGFOR EACH ROWBEGINIF INSERTING THENSELECT SEQ_TEST.NEXTVAL INTO :NEW.ID FROM DUAL;ELSERAISE_APPLICATION_ERROR(-20020, '不允许更新ID值!');END IF;END;
INSTEAD OF 触发器:CREATE OR REPLACE TRIGGER upd_ord_viewINSTEAD OF UPDATE ON ord_viewFOR EACH ROWBEGINUPDATE order_masterSET vencode=:NEW.vencode WHERE orderno = :OLD.orderno;DBMS_OUTPUT.PUT_LINE(‘已激活触发器');END;
                触发器由三部分组成:

        触发器语句(事件) ​ 定义激活触发器的 DML 事件和 DDL 事件 ​ 触发器限制 ​ 执行触发器的条件,该条件必须为真才能激活触发器 ​ 触发器操作(主体) ​ 包含一些 SQL 语句和代码,它们在发出了触发器语句且触发限制的值为真时运行

启用、禁用和删除触发器ALTER TRIGGER aiu_itemfile DISABLE;ALTER TRIGGER aiu_itemfile ENABLE;DROP TRIGGER aiu_itemfile;

触发器是当特定事件出现时自动执行的存储过程 ​ 触发器分为 DML 触发器、DDL 触发器和数据库级触发器三种类型 DML 触发器的三种类型包括行级触发器、语句级触发器和 INSTEAD OF 触发器

子程序和程序包

        子程序

                子程序的优点:

        模块化 ​ 将程序分解为逻辑模块 ​ 可重用性 ​ 可以被任意数目的程序调用 ​ 可维护性 ​ 简化维护操作 ​ 安全性 ​ 通过设置权限,使数据更安全

                过程

        过程参数的三种模式:

  1. IN ​ 用于接受调用程序的值 ​ 默认的参数模式 ​
  2. OUT ​ 用于向调用程序返回值 ​
  3. IN OUT ​ 用于接受调用程序的值,并向调用程序返回更新的值
 创建过程的语法CREATE [OR REPLACE] PROCEDURE 				》<procedure name> [(<parameter list>)]	 》     创建过程,可指定运IS|AS 									  》	 行过程需传递的参数。<local variable declaration>				》BEGIN<executable statements>                   >    包括在过程中要执行的语句 [EXCEPTION<exception handlers>]				    }    处理异常END;

                执行过程的语法:

EXECUTE procedure_name(parameters_list);
CREATE OR REPLACE PROCEDUREitemdesc(item_code IN VARCHAR2)ISv_itemdesc VARCHAR2(5);BEGINSELECT itemdesc INTO v_itemdescFROM itemfileWHERE itemcode = item_code;DBMS_OUTPUT.PUT_LINE(item_code||'项目的说明为'||v_itemdesc);END;/SET SERVEROUTPUT ONEXECUTE itemdesc('i201');将过程的执行权限授予其他用户(本用户不受限制)GRANT EXECUTE ON find_emp TO MARTIN;GRANT EXECUTE ON swap TO PUBLIC;删除过程DROP PROCEDURE find_emp;
                函数

        函数是可以返回值的命名的 PL/SQL 子程序。 ​ 创建函数的语法:

CREATE [OR REPLACE] FUNCTION <function name> [(param1,param2)]RETURN <datatype>  IS|AS [local declarations]BEGINExecutable Statements;RETURN result;EXCEPTIONException handlers;END;

        定义函数的限制: ​

                函数只能接受 IN 参数,而不能接受 IN OUT 或 OUT 参数 ​

                可以使用伪类型%TYPE、%ROWTYPE ​

        访问函数的两种方式:

        ​        使用 PL/SQL 块 ​

                使用 SQL 语句

创建函数CREATE OR REPLACE FUNCTION fun_hello(a number,b varchar2)RETURN  VARCHAR2ISBEGINRETURN '朋友,您好';END;调用函数SELECT fun_hello(1,'asdf') FROM DUAL;
过 程函 数
作为 PL/SQL 语句执行**Execute** 执行作为 PL/SQL 语句执行**作为表达式的一部分调用**
在规格说明中不包含 RETURN 子句必须在规格说明中包含 RETURN 子句**(执行出错)**
不返回任何值必须返回单个值
可以包含 RETURN 语句,但是与函数不同,它不能用于返回值必须包含至少一条 RETURN 语句

程序包和程序包主体

        程序包
程序包规范
CREATE [OR REPLACE]PACKAGE package_name IS|AS[Public item declarations][Subprogram specification]END [package_name];create or replace package toyspack as--增加单价的过程procedure updateToyPrice;--计算平均值的函数function avgToyPrice return number;end toyspack;
程序包的优点

        模块化 ​ 更轻松的应用程序设计 ​ 信息隐藏 ​ 新增功能 ​ 性能更佳

程序包中的游标

        游标的定义分为游标规范和游标主体两部分 ​ 在包规范中声明游标规范时必须使用 RETURN 子句指定游标的返回类型 ​ RETURN子句指定的数据类型可以是: ​ 用 %ROWTYPE 属性引用表定义的记录类型 ​ 程序员定义的记录类型

CREATE OR REPLACE PACKAGE BODY cur_pack ASCURSOR ord_cur(vcode VARCHAR2)RETURN order_master%ROWTYPE IS SELECT * FROM order_master WHERE VENCODE=vcode;PROCEDURE ord_pro(vcode VARCHAR2) ISor_rec order_master%ROWTYPE;BEGINOPEN ord_cur(vcode); LOOPFETCH ord_cur INTO or_rec;EXIT WHEN ord_cur%NOTFOUND;DBMS_OUTPUT.PUT_LIne(’返回的值为' || or_rec.orderno);END LOOP;END ord_pro;END cur_pack;
内置程序包

        扩展数据库的功能 ​ 为 PL/SQL 提供对 SQL 功能的访问 ​ 用户 SYS 拥有所有程序包 ​ 是公有同义词 ​ 可以由任何用户访问

STANDARD**和DBMS_STANDARD**定义和扩展**PL/SQL语言环境**
DBMS_LOB提供对 LOB**数据类型进行操作的功能**
DBMS_OUTPUT处理**PL/SQL块和子程序输出调试信息**
DBMS_RANDOM提供随机数生成器
DBMS_SQL允许用户使用动态 SQL
DBMS_XMLDOM用**DOM模型读写XML类型的数据**
DBMS_XMLPARSERXML**解析,处理XML文档内容和结构**
DBMS_XMLQUERY提供将数据转换为 XML 类型的功能
DBMS_XSLPROCESSOR提供**XSLT功能,转换XML文档**
UTL_FILE PL/SQL 程序来读写操作系统文本文件

 内置程序包

DBMS_OUTPUT包显示 PL/SQL 块和子程序的调试信息。SQL> BEGINDBMS_OUTPUT.PUT_LINE('打印三角形');FOR i IN 1..9 LOOPFOR j IN 1..i LOOPDBMS_OUTPUT.PUT('*');END LOOP for_j;DBMS_OUTPUT.NEW_LINE;END LOOP for_i;END;DBMS_LOB包提供用于处理大型对象的过程和函数
DBMS_XMLQUERY包用于将查询结果转换为 XML 格式SQL> DECLAREresult CLOB;xmlstr VARCHAR2(32767);line   VARCHAR2(2000);line_no INTEGER := 1;BEGINresult := DBMS_XMLQuery.getXml('SELECT empno, enameFROM employee');xmlstr := DBMS_LOB.SUBSTR(result,32767);LOOPEXIT WHEN xmlstr IS NULL;line := SUBSTR(xmlstr,1,INSTR(xmlstr,CHR(10))-1);DBMS_OUTPUT.PUT_LINE(line_no || ':' || line);xmlstr := SUBSTR(xmlstr,INSTR(xmlstr,CHR(10))+1);line_no := line_no + 1;END LOOP;	END;DBMS_RANDOM 包可用来生成随机整数SQL> SET SERVEROUTPUT ONSQL> DECLAREl_num   NUMBER;counter NUMBER;BEGINcounter:=1;WHILE counter <= 10LOOPl_num := DBMS_RANDOM.RANDOM;DBMS_OUTPUT.PUT_LINE(l_num);counter:=counter+1;END LOOP;END;UTL_FILE 包用于读写操作系统文本文件
操作文件的一般过程是打开、读或写、关闭
UTL_FILE 包指定文件路径依赖于 DIRECTORY 对象SQL> CREATE DIRECTORY TEST_DIR AS 'C:\DEVELOP';SQL> GRANT READ, WRITE ON DIRECTORY TEST_DIR TO SCOTT;SQL> SET SERVEROUTPUT ONSQL> DECLAREinput_file   UTL_FILE.FILE_TYPE;input_buffer VARCHAR2(4000);BEGINinput_file := UTL_FILE.FOPEN( 'TEST_DIR', 'employees.xml', 'r');LOOPUTL_FILE.GET_LINE(input_file,input_buffer);DBMS_OUTPUT.PUT_LINE(input_buffer);END LOOP;UTL_FILE.FCLOSE(input_file);EXCEPTIONWHEN NO_DATA_FOUND THENDBMS_OUTPUT.PUT_LINE('------------------');END;
程序包主体

程序包主体规范

CREATE [OR REPLACE] PACKAGE BODY package_name IS|AS[Private item declarations][Subprogram bodies][BEGINInitialization]END [package_name];--创建包体
create or replace package body page210
asprocedure pro_page(dno number,clo varchar2,pageIndex number,pageSize number,c_out_cursor out c_ref,totalCount out number )asv_sql varchar2(500);beginv_sql:='select  * from ( select rownum rn,t.* from   (select * from emp where deptno=:1 order by    '||clo||' desc) t  where rownum<=:3  ) where rn>:4';  
--打开游标open c_out_cursor for v_sql using dno,(pageIndex*pageSize),((pageIndex-1)*pageSize);--查询总记录数v_sql:='select count(1) from emp where deptno=:1';--执行单行execute immediate v_sql into totalCount using dno;end pro_page;
end page210;

子程序和程序包总结:

子程序是命名的 PL/SQL 块,可带参数并可在需要时随时调用 ​ 有两种类型的PL/SQL子程序,即过程和函数 ​ 过程用户执行特定的任务,函数用于执行任务并返回值 ​ 程序包是对相关类型、变量、常量、游标、异常、过程和函数等对象的封装 ​ 程序包由两部分组成,即包规范和包主体 ​ 使用程序包的优点是:模块化、更轻松的程序设计、信息隐藏、新增功能以及性能更佳

http://www.dinnco.com/news/34339.html

相关文章:

  • 手机网站开发目的营销 推广
  • 做设计 素材网站有哪广东seo推广哪里好
  • 北京医疗网站建设公司女教师遭网课入侵视频大全
  • 京东上怎样做网站广告软文小故事800字
  • 公司网站数媒设计制作seo优化在线诊断
  • 有专门做预算的网站没营销课程培训都有哪些
  • wordpress登陆帐号报错404seo托管公司
  • 网站开发前台 后台技术百度识图网页版 在线
  • 网站开发研究综述通过百度指数不能判断出
  • 哈尔滨市建设工程质量安全站淘宝关键词排名查询网站
  • 四网合一网站建设软文推广发稿平台
  • 做货品批发的网站都有哪些全球网站排名查询
  • 黑群晖做网站抖音seo排名系统
  • 招投标网站的建设制作优化大师官方网站
  • 优化企业网站torrentkitty磁力搜索引擎
  • 网站规划与设计范文产品推广渠道有哪些
  • 怎么去掉网站首页尾缀网站建设公司哪家好?该如何选择
  • 武昌网站建设seo搜索引擎优化关键词
  • 网站建设存在的问题关键词优化意见
  • 集宁做网站优秀的软文广告欣赏
  • 网站建设攻略百度开发平台
  • 有口碑的企业网站建设交换链接的方法
  • 厚街网站建设报价推广网站怎么制作
  • 潍坊设计网站长春seo优化企业网络跃升
  • 长沙营销网站建设2022年新闻热点事件
  • 做棋牌网站建设多少钱seo怎么优化排名
  • 您的域名因未取得工信部网站备案号松原市新闻
  • 政府网站建设开发方案百度教育app
  • html5网站模板怎么用新闻小学生摘抄
  • 有什么网站做知识吗在线代理浏览网站免费