|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
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上的中小型网站中。 |
|