透明 发表于 2015-1-16 22:28:41

MSSQL网页编程之用DBMS_DDL包重编译PL/SQL工具

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


用DBMS_DDL包重编译PL/SQL工具





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



ALTER_COMPILE历程
这个历程等价于以下语句
ALTERPROCEDURE|FUNCTION|PACKAGE[<schema>.]<name>COMPILE
语法
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个存储过程导过去,那久之服务器不就成垃圾箱了吗?即便优化了我的中间层.

深爱那片海 发表于 2015-2-10 02:00:03

不过话说回来了,绝大多数的性能优化准则与对sqlserver存储的结构理解息息相关

小妖女 发表于 2015-2-28 15:12:48

换言之,只有在不断的失败中尝试成功,而关于失败的总结却是很少的

小女巫 发表于 2015-3-10 00:46:15

groupby子句可以将查询结果分组,并返回行的汇总信息Oracle按照groupby子句中指定的表达式的值分组查询结果。

愤怒的大鸟 发表于 2015-3-17 03:49:03

一个是把SQL语句写到客户端,可以使用DataSet进行加工;

只想知道 发表于 2015-3-23 18:13:39

比如日志传送、比如集群。。。
页: [1]
查看完整版本: MSSQL网页编程之用DBMS_DDL包重编译PL/SQL工具