1/43使用OracleSQLDeveloper开发和调试PL/SQL目的本教程向您介绍如何使用OracleSQLDeveloper创建、运行以及调试PL/SQL过程。所需时间大约30分钟主题本教程包括下列主题:概述前提条件创建数据库连接浏览数据库创建并编译PL/SQL过程运行PL/SQL过程调试PL/SQL过程总结概述OracleSQLDeveloper是一个免费的图形工具,可提高工作效率并简化数据库开发任务。利用OracleSQLDeveloper,您可以浏览数据库对象、运行SQL语句和SQL脚本,以及编辑和调试PL/SQL语句。您还可以运行所提供的任何数量的报表,以及创建和保存您自己的报表。本教程集中讨论PL/SQL的创建、编译、运行和调试。返回主题列表前提条件2/43开始本教程之前,您应该:1.安装Oracle数据库11g。注:您可以使用9.2.0.1以上的任何Oracle数据库版本2.如果您使用的不是Oracle数据库11g,请安装OracleSQLDeveloper1.2.1。注:从OTN可以免费下载OracleSQLDeveloper。要安装OracleSQLDeveloper,将其解压缩到计算机上的任一目录。3.下载plsql.zip并将其解压缩到您的工作目录(即d:\wkdir)。4.可以访问附带的HR模式。如果尚未进行此操作,DBA用户需要解锁模式以提供访问。使用以下命令可以完成此操作:ALTERUSERhrACCOUNTUNLOCK;ALTERUSERhrIDENTIFIEDBYhr;返回主题列表创建数据库连接要创建数据库连接,请执行以下步骤:1.打开Windows资源管理器,双击\sqldeveloper\sqldeveloper.exe。注:如果显示一个对话框窗口,询问您是否想移植早期版本的设置,单击No。2.在Connections选项卡中,右键单击Connections并选择NewConnection。3/433.在ConnectionName域中输入HR_ORCL(或者标识您的连接的任何其他名称),在Username和Password域中输入HR,在Hostname域中指定您的主机名,在SID域中输入ORCL。单击Test。4/434.连接状态测试成功,但没有保存连接。要保存连接,单击Connect。5/435.连接已保存,您可以在列表中看到该数据库。展开HR_ORCL。6/436.打开连接时,SQLWorksheet会自动打开。SQLWorksheet允许您针对您刚创建的连接执行SQL。7/43返回主题列表浏览数据库OracleSQLDeveloper中的Connections导航器允许您浏览和编辑数据库对象。本教程创建并调试PL/SQL,使用从HR模式中选择的表。在本主题中,您将了解本教程后面部分中将使用的表。执行以下步骤:1.展开Tables节点。8/432.单击EMPLOYEES表,查看表定义。9/433.要查看数据,单击Data选项卡。10/434.单击导航器中的DEPARTMENTS表。11/435.DEPARTMENTS表有许多约束。当表定义显示时,选择Constraints选项卡。12/436.单击Edit图标。13/437.该对话框有多个选项卡,选择ForeignKeys选项卡。14/43查看外键,然后单击OK。15/438.通过在导航器中依次选中JOBS和LOCATIONS表并查看定义和数据,验证这两个表存在且具有数据。返回主题列表创建并编译PL/SQL过程在本主题中,您创建、编辑并编译一个PL/SQL过程。执行以下步骤:1.在Connections导航器中,右键单击Procedures节点以调用上下文菜单,然后选择CreatePROCEDURE。16/432.输入EMP_LIST作为过程名。然后单击+,添加一个参数。17/433.双击参数,您可以将值更改为pMaxRows,然后将VARCHAR2更改为NUMBER。确保在单击OK之前按了Enter键。18/434.随即显示已指定参数的过程的框架。19/435.替换以下PL/SQL:BEGINNULL;END;使用以下代码:(此代码还包含在解压缩plsql.zip的工作目录(即d:\wkdir)中的emp_cursor.sql文件中)CURSORemp_cursorISSELECTl.state_province,l.country_id,d.department_name,e.last_name,j.job_title,e.salary,e.commission_pctFROMlocationsl,departmentsd,employeese,jobsjWHEREl.location_id=d.location_idANDd.department_id=e.department_idANDe.job_id=j.job_id;emp_recordemp_cursor%ROWTYPE;TYPEemp_tab_typeISTABLEOFemp_cursor%ROWTYPEINDEXBYBINARY_INTEGER;emp_tabemp_tab_type;20/43iNUMBER:=1;BEGINOPENemp_cursor;FETCHemp_cursorINTOemp_record;emp_tab(i):=emp_record;WHILE((emp_cursor%FOUND)AND(i=pMaxRows)LOOPi:=i+1;FETCHemp_cursorINTOemp_record;emp_tab(i):=emp_record;ENDLOOP;CLOSEemp_cursor;FORjINREVERSE1..iLOOPDBMS_OUTPUT.PUT_LINE(emp_tab(j).last_name);ENDLOOP;END;注意OracleSQLDeveloper对保留字的格式设置。要进一步设置代码的格式,单击右键以调用上下文菜单,然后选择FormatSQL...单击工具栏中的Save按钮,编译PL/SQL子程序。21/436.在导航器中展开Procedures。22/437.注意,当OracleSQLDeveloper检测到无效PL/SQL子程序时,Connections导航器中该子程序的图标会以红色的X来指示状态。23/43Log窗口中显示编译错误。只需双击错误,即可导航到错误中报告的对应行。OracleSQLDeveloper还在右侧边列(gutter)中显示错误和提示。如果您将鼠标放在边列中每个红色方块上,将显示错误消息。在本例中,错误消息指示LOOP语句中存在格式错误。仔细检查代码后,您会发现WHILE语句中多了一个圆括号。删除多余的圆括号。24/438.单击Compile图标。25/439.该过程成功编译。您现在可以运行该过程。26/43返回主题列表运行PL/SQL过程创建并编译了一个PL/SQL过程之后,您可以使用OracleSQLDeveloper运行它。执行以下步骤:1.在左侧导航器中,右键单击EMP_LIST并选择Run。27/432.该操作将调用RunPL/SQL对话框。RunPL/SQL对话框允许您选择要运行的目标过程或函数(对程序包有用),并显示所选目标的参数列表。PL/SQL块文本区域中包含的是OracleSQLDeveloper用来调用所选程序的生成代码。您可以使用该区域填充要传送到程序单元的参数以及处理复杂的返回类型。28/43将PMAXROWS:=NULL;更改为PMAXROWS:=5;然后,单击OK。29/433.Log窗口中显示了返回的5行结果。30/43返回主题列表调试PL/SQL过程OracleSQLDeveloper还支持使用Oracle数据库进行PL/SQL调试。在本主题中,您调试一个PL/SQL过程、单步调试代码并在运行时修改值。执行以下步骤:1.通过在OPENemp_cursor;语句所在行对应的代码左侧区中单击,可在EMP_LIST过程中设置一个断点。31/432.单击Debug图标(瓢虫)。32/433.DebugPL/SQL对话框应仍显示值PMAXROWS=5;单击OK。33/434.调试器应在您设置断点处暂停。您现在可以控制执行流程、修改变量值以及执行其他调试函数。34/43注:如果您此时收到错误消息“ThissessionrequiresDEBUGCONNECTSESSIONandDEBUGANYPROCEDUREuserprivileges”,您需要完成前提条件中的步骤4。5.单击StepInto。35/436.这将转至光标所在的第一行。再次单击StepInto。36/437.您现在应该选择光标所在的第一行。第3次单击StepInto。37/438.单击Data选项卡。38/439.Data窗口开始显示有限的变量列表,这些变量用在要执行的代码行中以及之前执行的代码中。10.右键单击DBMS_OUTPUT.PUT_LINE(emp_tab(j).last_name);这行,然后选择RuntoCursor。39/4311.展开emp_tabvalues[1]_value。您会看到表中给定记录中域的值。选择LAST_NAME域。40/4312.右键单击LAST_NAME域并选择ModifyValue。41/4313.将名称更改为别的内容,单击OK。14.单击Resume图标以允许PL/SQL运行直至完成。42/4315.查看修改后的值是否显示在Log窗口中。43/43总结在本教程中,您学习了如何:创建数据库连接浏览数据库创建并编译PL/SQL过程运行PL/SQL过程调试PL/SQL过程