分享好友 数据库首页 频道列表

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

数据库其他  2023-02-10 03:010

转: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(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

0评论2023-02-10893

Oracle SQL七次提速技巧
以下SQL执行时间按序号递减。1,动态SQL,没有绑定变量,每次执行都做硬解析操作,占用较大的共享池空间,若共享池空间不足,会导致其他SQL语句的解析信息被挤出共享池。create or replace procedure proc1as beginfor i in 1..100000 loop    execute imme

0评论2023-02-10755

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

0评论2023-02-10564

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种方法: 

0评论2023-02-10699

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

0评论2023-02-10973

Oracle迁移到MySQL性能下降的注意点 oracle数据库迁移需要注意的问题
背景:最近有较多的客户系统由原来由Oracle改造到MySQL后出现了性能问题CPU 100%,或是后台的CRM系统复杂SQL在业务高峰的时候出现堆积导致业务故障。在我的记忆里面淘宝最初从Oracle迁移到MySQL期间也遇到了很多SQL的性能问题,记忆最为深刻的子查询,当初的

0评论2023-02-10580

ORACLE中通过SQL语句(alter table)来增加、删除、修改字段
1.添加字段:alter table  表名  add (字段  字段类型)  [ default  '输入默认值']  [null/not null]  ;2.添加备注:comment on column  库名.表名.字段名 is  '输入的备注';  如: 我要在ers_data库中  test表 document_type字段添加备注  comm

0评论2023-02-10584

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

0评论2023-02-10914

mysql where条件:某时间字段为今天的sql语句
1.查询:注册时间为今天的所有用户数:select count(*) from customer where TO_DAYS(createtime) = TO_DAYS(NOW())2.获取当前时间到凌晨24点还有多长时间:(Java中可用于判断某时间是否为今天)final Calendar cal = Calendar.getInstance();    ca

0评论2023-02-10717

mysql中的sql
变量用户变量: 在用户变量前加@系统变量: 在系统变量前加@@运算符算术运算符有: +(加), -(减), * (乘), / (除) 和% (求模) 五中运算位运算符有:(位于), | (位或), ^ (位异或), ~ (位取反),(位右移),(位左移)比较运算符有: = (等于),(大于),(小于), = (大

0评论2023-02-10936

Oracle的HINT可以强制指定SQL的执行计划,比如选择索引、表的连接顺序以及表的连接方式等等。(转)
在Oracle中查看所有的表: select * from tab/dba_tables/dba_objects/cat; 看用户建立的表 :  select table_name from user_tables;  //当前用户的表 select table_name from all_tables;  //所有用户的表 select table_name from dba_tables;  //包

0评论2023-02-10857

Oracle sql 子字符串长度判断
Oracle sql 子字符串长度判断 select t.* from d_table t WHEREsubstr(t.col,1,1)='8' and instr(t.col,'/')0 and length(substr(t.col,1,instr(t.col,'/')))5; 字符串的前两位都是数字:select * from d_table t WHERE regexp_like(substr(t.col,1,2), '^[

0评论2023-02-10759

Oracle、MySql、Sql Server比对
MySql:廉价(部分免费):当前,MySQL採用双重授权(DualLicensed),他们是GPL和MySQLAB制定的商业许可协议。假设你在一个遵循GPL的***(开源)项目中使用MySQL,那么你能够遵循GPL协议免费使用MySQL。否则,你须要购买MySQLAB制定的那个商业许可协议。Windows $

0评论2023-02-10441

Oracle 存储过程,临时表,动态SQL测试
--创建事务级别的结果临时表create global temporary table tmp_yshy( c1 varchar2(100), c2 varchar2(100))on commit delete rows;--创建事务级别的存储sql语句的临时表create global temporary table tmp_sql( c1 varchar2(4000))on commit delete rows;测

0评论2023-02-10508

更多推荐