Oracle PL/SQL开发利器-Toad应用总结(一)-PL/SQL Program基本编写、调试

   2023-02-10 学习力0
核心提示:转:http://ckitpro8086.blog.51cto.com/3653012/770589使用Toad进行Oracle PL/SQL Program的编写及调试需掌握如下视图应用:(1)Schema Broswer    模式浏览器(Schema Browser)可以快速访问数据字典,浏览数据库中的表、索引、存储过程。Toad 提供对数

转:http://ckitpro8086.blog.51cto.com/3653012/770589

使用Toad进行Oracle PL/SQL Program的编写及调试需掌握如下视图应用:

(1)Schema Broswer
    模式浏览器(Schema Browser)可以快速访问数据字典,浏览数据库中的表、索引、存储
过程。Toad 提供对数据库的快速访问,使用极为方便,用户界面简洁,结构安排合理。当点击
一个单独的数据库对象,Toad 立即显示此对象的详细信息。例如,点一个数据库的表,所有和
此表相关的索引、约束、存储过程、SQL 语句、表中的数据以及和其他表的相互引用关系都在
同一界面显示出来。所有针对数据库对象的操作都可以在Schema Browser 一个窗口中进行。
  开发人员查询Oracle数据库当前用户连接的所有对象信息,开发中可由这里浏览各种对象,即Procedure、Function、Package,单击某个对象即走读相关代码,右击可实现重新编译等操作,双击某对象进入对应的开发编辑视图,可进行修改、调试、语句跟踪性能分析等操作;
 (2)SQL Editor
     SQL 编辑器(SQL Editor)的主要功能是编辑、运行和调整SQL 语句。TOAD 的高级编
辑窗口包括众多的特性来提高开发人员编写SQL 语句的产品化程度。例如,简单地生成代码模
板,在编写SQL 前自动发现包的内容和列的名字等等。SQL 编辑器包括一个编辑窗口和运行结
果窗口,允许开发人员在编辑的过程中测试运行结果。SQL 编辑器中不仅包括标准的编辑命令,
也包括一些增强的功能,如快速查询表中的字段、将SQL 语句的内容格式化等等。这个窗口可
以处理大到4GB 的内容,对大的开发项目来说非常有用。便捷的书签可以让开发人员非常容易
地找到相关位置。在运行结果窗口可提供用户定义的配置功能,支持LONG 和LONG RAW 列,
可以将数据卸出到磁盘、打印数据、编辑数据等等。
  (3)Procedure Editor
      存储过程编辑器(Procedure Editor)的主要功能是编辑、编译、测试、调试存储过程和触
发器。TOAD 提供语法标识、错误标识和其他很多易于使用的功能,如在弹出窗口显示表名、列
名和Oracle 函数。和其他的 PL/SQL 编辑工具不同,TOAD 允许在一个文件中操作多个数据
库对象,可以编译一个对象、编译多个对象、编译到当前光标、从光标开始编译。在运行出现错
误时,存储过程停止到有问题的语句。用户可以使用快捷方式或模板来快速编写PL/SQL,也可以
根据需要生成自己的模板。使用Toad 可以非常方便地进行编辑工作,可如设置书签、取消注释、
格式化SQL 语句等等。
  写两个实例如下:
  •   Procedure示例:
 
  1. CREATE OR REPLACE PROCEDURE SCOTT.calc_totalTemp (fudge_factor_in IN NUMBER) 
  2. IS 
  3.   subtotal NUMBER := 0; 
  4.   PROCEDURE compute_running_total (increment_in IN PLS_INTEGER) 
  5.   IS 
  6.   BEGIN 
  7.   subtotal := subtotal + increment_in * fudge_factor_in; 
  8.   END
  9. BEGIN 
  10.   FOR month_idx IN 1..12 
  11.   LOOP 
  12.     compute_running_total (month_idx); 
  13.   END LOOP; 
  14.   DBMS_OUTPUT.PUT_LINE('Fudged total for year: ' || subtotal); 
  15. END
  •  Function示例

 

  1. CREATE OR REPLACE FUNCTION SCOTT.wordcountTemp (str IN VARCHAR2) 
  2. RETURN PLS_INTEGER 
  3. AS 
  4. /* words PLS_INTEGER := 0; ***Commented out for intentional error*** */ 
  5. words PLS_INTEGER := 0; 
  6. len PLS_INTEGER := NVL(LENGTH(str),0); 
  7. inside_a_word BOOLEAN; 
  8. BEGIN 
  9. FOR i IN 1..len + 1 
  10. LOOP 
  11. IF ASCII(SUBSTR(str, i, 1)) < 33 OR i > len 
  12. THEN 
  13. IF inside_a_word 
  14. THEN 
  15. words := words + 1; 
  16. inside_a_word := FALSE
  17. END IF; 
  18. ELSE 
  19. inside_a_word := TRUE
  20. END IF; 
  21. END LOOP; 
  22. RETURN words; 
  23. END
  (4)PL/SQL Debugger
     Toad 提供强大易用的PL/SQL 调试功能,可以节省开发人员在大型项目中用于开发和测
试的宝贵时间,提高应用开发的质量。在存储过程开发的过程中,Toad 可以逐行编辑、调试和
运行代码。运行时可以根据需要输入参数,观察相关参数的变化来检查存储过程的正确性。在调
式过程中,Toad 可以通过窗口显示所有的断点、参数, 调用堆栈和输出参数。使用Toad,非
常容易检测到存储过程的错误,开发人员可以一步一步运行PL/SQL 语句来识别问题。调试会话
可以和其他程序会话同时进行。
    我在刚开始使用Toad对Procedure和Function进行调试的时候,出现了调试按钮置灰无法进行调试、点击调试按钮后程序直接跑完没有在断点处停住等情况,在网上查了很久,大都对这个问题都没有人进行正确的解决;
    解决Toad调试的问题的方法如下:
    首先确认一点:你当前Toad的用户连接是否为Sys、System等DBA用户,如果是的话,就会出现Toad Debug按钮是可用的,断点也可以设置,但是程序直接跑完的情况,应该是Toad不支持DBA用户直接调试PL/SQL程序;
    然后,将用户连接改为其他用户例如Scott重连Toad,当Toad在此用户连接下,直接进行调试PL/SQL是不行的,因为该用户默认是没有Debugger权限的,在此情况下Debug按钮也是置灰的;
    然后,执行如下语句,(假设当前Toad连接Oracle的用户为Toad):
 
  1. grant debug connect session to scott; 
  2. grant debug any procedure to scott; 
  最后,就跟在Eclipse Debug Java程序差不多了,即设置断点,点击Toad上的按钮Execute PL/SQL with Debugger,那就开始调试吧!
   (5)Connection Color-Coding
  Toad 允许同时连接多个数据库,便于在多个数据库之间进行切换和比对。但是这样也增加
了在数据库上进行误操作的风险。Connection Color-Coding 允许用户在定义一个新的数据库连
接时,为该连接指定一种颜色,以便作为醒目提醒。

 

本文出自 “中子星” 博客,请务必保留此出处http://ckitpro8086.blog.51cto.com/3653012/770589

 

 
反对 0举报 0 评论 0
 

免责声明:本文仅代表作者个人观点,与乐学笔记(本网)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
    本网站有部分内容均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,若因作品内容、知识产权、版权和其他问题,请及时提供相关证明等材料并与我们留言联系,本网站将在规定时间内给予删除等相关处理.

  • sql:mysql:函数:TIMESTAMPDIFF函数实现TimeStamp字段相减,求得时间差
    sql:mysql:函数:TIMESTAMPDIFF函数实现TimeS
     函数内指定是minute,则最终结果value值的单位是分钟,如果函数内指定为hours,则最终结果value值单位为小时。//UPLOAD_TIME 减去 CREATE_DTTM 求得时间差,以分钟数计时select avg(TIMESTAMPDIFF(MINUTE,CREATE_DTTM,UPLOAD_TIME)) value,LEFT(CREATE_DTTM
    03-08
  • 去重复的sql(Oracle) 去重复的英文
    1.利用group by 去重复2.可以利用下面的sql去重复,如下  1) select id,name,sex from (select a.*,row_number() over(partition by a.id,a.set order by name) su from test a ) where su=1  2)select id,name,sex from (select a.*,row_number() over(p
    02-10
  • Oracle SQL七次提速技巧
    以下SQL执行时间按序号递减。1,动态SQL,没有绑定变量,每次执行都做硬解析操作,占用较大的共享池空间,若共享池空间不足,会导致其他SQL语句的解析信息被挤出共享池。create or replace procedure proc1as beginfor i in 1..100000 loop    execute imme
    02-10
  • Oracle\SQL  Server等及其他基本语句写法
    Oracle\SQL Server等及其他基本语句写法
    Oracle\SQL  Server等及其他基本语句写法目录一.Excel相关 11.Excel中写脚本范例: 12.提取字节 23. 提取单元格内字符 24.VLOOKUP函数: 2二.SQL语句汇总 21.建表: 22.增 33.删 44.查 65.改 236.Alter的应用 24三.数据库备份与恢复脚本 261. Oracle: 2
    02-10
  • SQL ORACLE case when函数用法
    case when 用法(1)简单case函数:格式:  case 列名   when 条件值1 then 选项1  when 条件值1 then 选项2......  else 默认值 end例如:  select   case job_level  when '1' then '1111'  when '2' then '2222'   when '3' then '3333
    02-10
  • mysql下如何执行sql脚本 执行SQL脚本
    1.编写sql脚本,假设内容如下:  create database dearabao;  use dearabao;  create table niuzi (name varchar(20));  保存脚本文件,假设我把它保存在F盘的hello world目录下,于是该文件的路径为:F:\hello world\niuzi.sql2.执行sql脚本,可以有2种方法: 
    02-10
  • MySQL 5.7版本sql_mode=only_full_group_by问题
    用到GROUP BY 语句查询时com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'col_user_6.a.START_TIME' which is not functionally dependent on colu
    02-10
  • Oracle迁移到MySQL性能下降的注意点 oracle数据
    背景:最近有较多的客户系统由原来由Oracle改造到MySQL后出现了性能问题CPU 100%,或是后台的CRM系统复杂SQL在业务高峰的时候出现堆积导致业务故障。在我的记忆里面淘宝最初从Oracle迁移到MySQL期间也遇到了很多SQL的性能问题,记忆最为深刻的子查询,当初的
    02-10
  • ORACLE中通过SQL语句(alter table)来增加、删除
    1.添加字段:alter table  表名  add (字段  字段类型)  [ default  '输入默认值']  [null/not null]  ;2.添加备注:comment on column  库名.表名.字段名 is  '输入的备注';  如: 我要在ers_data库中  test表 document_type字段添加备注  comm
    02-10
  • MySQL与Oracle 差异比较之六触发器
    触发器编号类别ORACLEMYSQL注释1创建触发器语句不同create or replace trigger TG_ES_FAC_UNIT  before insert or update or delete on ES_FAC_UNIT  for each rowcreate trigger `hs_esbs`.`TG_INSERT_ES_FAC_UNIT` BEFORE INSERT on `hs_esbs`.`es_fac_u
    02-10
点击排行