使用Powerdesigner的物理数据模型生成SQL脚本中开头处多出来的create or replace package PDTypes

来源:互联网 发布:淘宝买汽车吗 编辑:程序博客网 时间:2024/04/29 02:00

使用Powerdesigner有一段时间了,不过要注的地方还真的是很多很多,不懂的地方也很多很多,毕竟它太强大了。

新项目的物理数据模型还是使用Powerdesigner设计的,针对的是Oracle数据库,一切都设计好之后(含有大量触发器),用Powerdesigner直接连接上Oracle数据库进行数据库的生成,很快生成完了!使用PL/SQL Developer查看了一下情况,发现表是生成了,但所有触发器却显器存在错误,如下图所示:

所有触发器均存在问题

顿时觉得不科学,于是随便打开一个触发器看了一下出错的原因,发现都是如下图所示的原因:

触发器错误原因

原因是在由Powerdesigner生成的触发器定义脚本中用到了名为“IntegrityPackage”的包,但执行触发器的定义脚本时却没有发现这个包。于是我再查看了一下包的定义情况,如下图所示:

Powerdesigner生成的包未生成成功

发现确实是有这么一个包没有生成成功,问题是我没有在Powerdesigner的物理模型中定义这么一个包,先不管吧,先看看为什么这个包没有生成成功,先查看了下包PDTYPES的定义,结果显示如下:

PDTYPS的定义失败信息

错误信息中明确指出第7行中多出了一个Create,这个也不科学,第二Create是没问题的,往上查看才发现,定义PDTypes这个包头的脚本块的最后没有执行标识符“/”,才导致两个包头都定义失败,进而导致“IntegrityPackage”包的包体也定义失败,如下图所示:

IntegrityPackage包体定义失败

最终导致使用了“IntegrityPackage”包的触发器通通生成失败。

知道原因在哪儿了,很简单,在PDTYPS包头的定义最后加上脚本块执行标识符“/”就行了,在Powerdesigner生成的脚本中的PDTYPS包头定义的最后加上后,重新生成果然是没有问题了!如下图所示:

加上了PDTYPS包头的执行标识符“/”

然后包头和包体都生成了,最终的触发器也都没问题了,如下图所示:

包头和包体成功生成

所有触发器也成功生成

我的问题是解决了,可是回想下,我其实我并没有定义这两个包,这两个包中的PDTYPS包也只定义了包头,没有包体...“IntegrityPackage”包是在各个触发器中用到了,但PDTYPS好像并没有,能不能在由Powerdesigner生成时就去掉这个呢?Powerdesigner又是在哪儿将这些东西加上去的呢?在Powerdesigner的各个设置面版上找了一圈又一圈,最后发现在Database->Edit Current DBMS...->General->Script->Sql->File里的TrgHeader里加上去的,如下图所示:

TrgHeader位置

真心伤不起呀,藏得这么深!

如果你直接拿生成的SQL脚本到PL/SQL Developer里执行,可能会因为这个问题收到如下的错误信息:

Warning: Package created with compilation errors
Warning: Package body created with compilation errors

我在这里特地发贴,多用点相关的关键字,方便遇到的同学百度到此!还在其他网站上做了一些相关的问题,本着尽可能让大家尽快发现问题所在吧!



0 0
原创粉丝点击