仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 798|回复: 8
打印 上一主题 下一主题

[学习教程] MSSQL网页编程之用DBMS_DDL包重编译PL/SQL工具

[复制链接]
透明 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:28:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
导致了一个使用几乎和mSQL一样的API接口的用于他们的数据库的新的SQL接口的产生,这样,这个API被设计成允许为用于mSQL而写的第三方代码更容易移植到MySQL。编译|工具


用DBMS_DDL包重编译PL/SQL工具





本篇文章,我们将会看到如何用DBMS_DDL包中的ALTER_COMPILE历程从头编译已存储在数据库的工具.



ALTER_COMPILE历程
这个历程等价于以下语句
ALTERPROCEDURE|FUNCTION|PACKAGE[<schema>.]<name>COMPILE[BODY]
语法
DBMS_DDL.ALTER_COMPILE(
typeVARCHAR2,
schemaVARCHAR2,
nameVARCHAR2);
参数:



Type

数据库工具的范例.准确值以下:

PROCEDUREC重编译指定的历程

FUNCTIONC重编译指定的函数

PACKAGE-重编译指定的包头和包体

PACKAGE_BODY-重编译指定的包体

TRIGGER-重编译指定的触发器

Schema



重编译工具的计划称号,若为null,则为以后计划称号(巨细写敏感)

name



重编译工具的称号(巨细写敏感)



如今,假如想重编译一个程序,Oracle起首会重编译被标识invalid的程序所依附的一切工具.



例1:
编译MYUSER计划的ACCESS_RIGHTS历程:
DBMS_DDL.ALTER_COMPILE(PROCEDURE,MYUSER,ACCESS_RIGHTS);



例2:
差未几每一个实例中,PL/SQL工具称号以年夜写体例存储,假如创立时指定一个双引号的工具称号,那末当编译时应指定一样的体例.


假如指定不准确,则会报以下的毛病
SQL>dbms_ddl.alter_compile(PROCEDURE,MYUSER,access_rights);
BEGINdbms_ddl.alter_compile(PROCEDURE,MYUSER,access_rights);END;
*
ERRORatline1:
ORA-20000:UnabletocompilePROCEDURE"MYUSER"."access_rights",
insufficientprivilegesordoesnotexist
ORA-06512:at"SYS.DBMS_DDL",line68
ORA-06512:atline1

因而假如你创立以下的工具:
CREATEorREPLACEPROCEDURE"My_Object"IS
BEGIN
...
得利用:
DBMS_DDL.ALTER_COMPILE(PROCEDURE,MYUSER,My_Object);

也能够利用ALTERPROCEDURE<procedurename>COMPILE命令来编译工具,用DBMS_DDL包最年夜的上风在于能够在今后的程序或PL/SQL中编译,这将具有完整的天真性以创立强无力的利用代价(请参照以下例子)



例3:
这个例子将取得一切有效的工具而且从头编译
settermouton
setserverouton
DECLARE
cursorcur_invalid_objectsis
selectobject_name,object_typefromuser_objectswherestatus=INVALID;
rec_columnscur_invalid_objects%ROWTYPE;
err_statusNUMERIC;
BEGIN
dbms_output.enable(10000);
opencur_invalid_objects;
loop
fetchcur_invalid_objectsintorec_columns;
EXITWHENcur_invalid_objects%NOTFOUND;

dbms_output.put_line
(Recompiling||rec_columns.object_type||||rec_columns.object_name);
dbms_ddl.alter_compile(rec_columns.object_type,NULL,rec_columns.object_name);
endloop;
closecur_invalid_objects;
EXCEPTION
Whenothersthen
begin
err_status:=SQLCODE;
dbms_output.put_line(Recompilationfailed:||SQLERRM(err_status));

if(cur_invalid_objects%ISOPEN)then
CLOSEcur_invalid_objects;
endif;

exceptionwhenothersthen
null;
end;
end;
/


总结:
ALTER_COMPILE能够取代手工而主动编译工具,查找那些有效的工具从而一个一个地编译.
MySQL是一个开放源码的小型关联式数据库管理系统,开发者为瑞典MySQLAB公司。目前MySQL被广泛地应用在Internet上的中小型网站中。
分手快乐 该用户已被删除
沙发
发表于 2015-1-19 14:04:03 | 只看该作者
但是随着数据量的增大,这种成本差距会逐渐减小,趋于相等。(500万数量级只相差10%左右)
谁可相欹 该用户已被删除
板凳
发表于 2015-1-26 10:05:18 | 只看该作者
这是一个不错的新特性。虽然索引的附加字段没有索引键值效率高,但是相对映射到数据表中效率还是提高了很多。我做过试验,在我的实验环境中会比映射到表中提高30%左右的效率。
精灵巫婆 该用户已被删除
地板
发表于 2015-2-4 14:22:43 | 只看该作者
现在是在考虑:如果写到服务器端,我一下搞他个10个存储过程导过去,那久之服务器不就成垃圾箱了吗?即便优化了我的中间层.
深爱那片海 该用户已被删除
5#
发表于 2015-2-10 02:00:03 | 只看该作者
不过话说回来了,绝大多数的性能优化准则与对sqlserver存储的结构理解息息相关
小妖女 该用户已被删除
6#
发表于 2015-2-28 15:12:48 | 只看该作者
换言之,只有在不断的失败中尝试成功,而关于失败的总结却是很少的
小女巫 该用户已被删除
7#
发表于 2015-3-10 00:46:15 | 只看该作者
groupby子句可以将查询结果分组,并返回行的汇总信息Oracle按照groupby子句中指定的表达式的值分组查询结果。
愤怒的大鸟 该用户已被删除
8#
发表于 2015-3-17 03:49:03 | 只看该作者
一个是把SQL语句写到客户端,可以使用DataSet进行加工;
只想知道 该用户已被删除
9#
发表于 2015-3-23 18:13:39 | 只看该作者
比如日志传送、比如集群。。。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 00:44

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表