存储过程和数据库的生成

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

存储过程
前面提到,严格的来说,触发器就是一个特殊的存储过程。

那么,什么是存储过程?存储过程(Stored Procedure):
是一组为了完成特定功能的SQL语句集,是利用SQL Server所提供的Transact-SQL语言所编写的程序。

经编译后存储在数据库中。

存储过程是数据库中的一个重要对象,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。

存储过程是由流控制和SQL语句书写的过程,这个过程经编译和优化后存储在数据库服务器中,存储过程可由应用程序通过一个调用来执行,而且允许用户声明变量。

同时,存储过程可以接收和输出参数、返回执行存储过程的状态值,也可以嵌套调用。

在SQL Server 中使用存储过程而不使用存储在客户端计算机本地的Transact-SQL 程序的好处包括:
存储过程已在服务器注册。

存储过程具有安全特性(例如权限)和所有权链接,以及可以附加到它们的证书。

用户可以被授予权限来执行存储过程而不必直接对存储过程中引用的对象具有权限。

存储过程可以强制应用程序的安全性。

存储过程允许模块化程序设计。

存储过程一旦创建,以后即可在程序中调用任意多次。

这可以改进应用程序的可维护性,并允许应用程序统一访问数据库。

存储过程可以减少网络通信流量。

1.1.1为存储过程和函数定义模板
(1)选择Database->Edit Current DBMS以打开DBMS属性窗口,如下图示:
(2)展开DBMS树形视图中的Script节点,继续展开Objects节点。

(3)展开Procedure节点。

(4)单击CustomProc条目以编辑存储过程模板,或单击CustomFunc条目以编辑函数模板。

(5)输入你想要进行的更改,单击”确认”即完成模板定义过程。

1.1.2创建存储过程和函数
注意,在powerdesigner中,存储过程和用户自定义函数都是在同一个组件中设置的。

现在来创建一个查询操作的存储过程:根据关键字查询包含此关键字(包括商品信息中的名称,所属产品的名称或分类名称中包含此关键字的都算)的所有商品信息。

(1)单击Palette面板中Procedure工具。

(2)在模型图表空白区域单击鼠标左键,即在图表中添加了一个Procedure图符。

(3)单击Palette面板中的Pointer工具或单击鼠标右键使鼠标鼠标处于选择状态。

(4)双击刚添加的图符,弹出存储过程或函数属性窗口,如下图:
(5)输入相应的Name和Code后(注意,Code的命名我们一般采用Pascal命名法,让你的存储过程更加直观,避免后期维护困难),选择Definition属性页,在下拉列表中选择需要创建的类别:Procedure或Function。

(6)在文本框中输入详细的Procedure或Function定义信息,你也可以通过使用工具栏中的一些脚本项来编辑定义。

此处输入如下脚本,点击Preview可以查看到生成的存储过程代码。

查询宠物信息
(7)单击”确认”,完成存储过程或函数的创建过程。

当然,您也可以同时使用菜单栏上Model->Procedure来完成创建过程,这里不再赘述。

1.1.3将存储过程与表关联
如果当前DBMS支持存储过程的话,你可以使存储过程与数据表关联,该特性允许更新表或从表中读取数据。

当我们将PDM向OOM转换时,与数据表关联的存储过程就会转化为所生成的类中的Stereotype为《procedure》的操作。

通过将存储过程与数据表相关联,你可以定义所生成的类中的操作。

当我们将OOM转化为PDM时,Stereotype为《procedure》的类操作将转化为与最终生成的表相关联的存储过程。

步骤:
(1)打开目标数据表的属性窗口。

(2)选择Procedure属性页。

(3)单击工具栏中Add Objects工具以打开对象选择(Selection)窗口.
(4)在现有存储过程列表中选择你所需要关联该表的存储过程,单击”OK”,则相应存储过程已经添加进存储过程列表中。

(5)单击”确认”完成关联过程。

这两个步骤你也可以合并在一起,比如要创建一个最简单的删除操作的存储过程:输入一个Category产品分类的Id,删除分类Id和其相等的产品。

在编辑存储过程属性的窗口中选择你要操作的表:
此后切换到Definition选项卡,就会发现多了几个模板可以选择:
此后点击Preview就会看到将会生成的存储过程的预览了。

阶段任务:
完成分类表的添加、查询和删除三个基本存储过程。

完成实现商品模糊搜索的存储过程。

完成库存变动的存储过程:输入参数为商品Id和变动数量,完成数据更新,注意如果跟新
前应判断如果是出货数量大于库存量,那么不应进行操作,或跟新后进行回滚操作。

2数据库的创建修改和测试数据的生成
到目前为止,我们已经完成了全部PDM的操作,那么,最终如何将这些PDM变为SQL2008中真正的数据库呢?、
2.1生成SQL脚本
(1)选择Database->Generate Database,弹出Database Generation窗口,其中包含生成数据库的各种参数选项,如下图:
(2)选择相应的脚本文件存放目录,并输入相应的脚本文件名称。

(3)在Generation选项栏中选择Script generation单选框,确认生成数据库方式为直接生成脚本文件。

(4)勾选上One file on,表示所生成脚本将包含于一个文件中,否则PowerDesigner 会为生成的每个不同表格都单独生成一个脚本文件.
(5)选择options选项卡,调整设置当前生成参数,你可以选择生成或不生成哪些内容或设置它们的生成方式:
(6)同样在Selection选项卡中选择要参与生成的表、视图、存储过程和域。

(9)在Preview中预览无误后,单击”确定”,完成生成脚本配置过程.
PowerDesigner开始执行脚本生成过程,这时输出窗口会显示相应的生成过程信息,最后弹出Result窗口,如下图:
点击编辑Edit,可以在文本框中拷贝处生成的脚本,在你的SQL2008中建立一个新建查询,选择对应数据库后运行脚本即可。

这个过程如果有错误,请根据提示检查问题。

这时让我们利用已经生成的脚本文件来创建数据库,这里我们使用的DBMS是MS SQLServer2000,其原因在前面提到,涉及主外键的问题。

如果你不需要生成主外键,那么可以使用SQL2008,这样的话,你就可以直接将powerdesigner和你的SQL2008关联起来,直接在SQL2008中生成代码,而不必通过脚本来中转实现了。

阶段任务:
1.参照上述操作过程,生成数据库脚本,并在SQL2008中执行,生成数据库。

2.阅读生成的数据库脚本,明确代码内容和CDM、PDM的关系。

2.2直接创建数据库(使用ODBC)
除了通过数据库脚本可以创建数据库外,我们还可以通过ODBC来直接创建数据库。

其操作如下:
(1)选择Database->Generate Database。

(2)选择相应的脚本存储目录,输入相应脚本名称。

注意:不管使用哪种方式,数据库脚本都是会生成的,毕竟这是一个重要的项目文档。

(3)在Generation选项栏中选择ODBC generation单选框。

(4)后续其它参数设置同前面生成脚本文件类似,不再赘述。

(5)单击”确定”按纽,会弹出Connect to an ODBC Data Source窗口,如下图:
(6)选中ODBC Machine data source单选框后在下拉列表中选择对应的数据源;或选中File data source并选取对应数据库文件。

(7)输入对应用户登录信息(如果是使用windows验证登陆,那么就不要输入任何信息),单击”Connect”,确认连接,PowerDesigner随即开始脚本生成进程,完毕后弹出Execute SQL Query窗口,如下图:
(8)单击”Run”,即开始数据库创建过程。

这个过程中,请注意DBMS的设置中数据库的选择要和ODBC中的设置对应。

如果要增加新的ODBC数据源,那么可以点击Configure,出现下面界面:
红色方框中分别为属性编辑和增加新的ODBC。

点击Add Data Sourece,出现增加数据源的设置页面:
你可以选择一个数据源进行设置,这里我们选择第2个,然后点击下一步进行操作,出现下面界面选择数据源驱动程序:
这里我们用的是SQL2008,找到SQL Server,点击下一步,再点击完成,即可完成数据源的增加,并进入这个新数据源的设置页面:
这里我们输入对该数据源的名称和描述,然后输入正确的SQL服务器的连接信息,
并点击下一步进行登录方式的设置(windows验证或用户名认证),完成后连续点击下一步,采用默认设置即可完成数据库的配置。

最终,将出现如下信息:
点击“测试数据源”,确定配置正常可以使用后即可在后面操作中应用新增加的ODBC数据源了。

提示:
在这个教程中,我们是先设计了CDM,再设计PDM,但这并不是固定的,项目的大小、熟悉程度、起步和个人习惯不一样,熟练业务的,项目小的直接用PDM设计未尝不可。

小技巧:
如何设置生成的sql脚本不含外键定义?
有些时候,为了防止后期程序开发过程中应约束导致的异常,可能在生成的sql脚本中,你并不需要外键的约束,而是仅仅需要保留外键就可以了。

因为部分人保持数据的一致性并不想通过数据库提供的外键约束来做,而是通过自己的程序逻辑来保持一致性,这样的好处坏处在此就不多讨论了。

当然你可以删除其关系而保留外键后再生成代码,但这样PDM上就不直观了。

你也可以通过下面方式来实现:
设置方法为,选择[Database]–>[Generate Database]的Option选项卡中,去掉Foreign Key 选项即可,如图:
注意此处出了外键,你可以选择去掉或增加任何配置而得到你需要的PDM。

·
如何在生成的SQL脚本中增加一些中文的说明信息?
你在设计CDM和PDM的时候,每个表、每列数据都是由中文的Name和英文的Code 组成的,但是最终得到的SQL脚本中,会发现实际用到的仅仅是Code,此时你是否希望当初的Name中的信息可以作为提醒性的文字在脚本中出现?
因数据列为例:
选择Database—>Edit Current DBMS,再选择Script -> Object -> Column -> Add
在显示的脚本开头加上“--%COLNNAME%,这里的%COLNNAME%就是指列的Name,前面的--是SQl注释标示。

然后按提示保存修改。

这样生成代码后你会发现脚本如下:
……
create table Inventory (
--编号
ItemId varchar(10) not null,
--库存
Qty int null
)
……
很棒吧,同样的原理,其他地方如果你想使用Name作为脚本的提示信息,都可以参照上面进行设置。

相关文档
最新文档