Sql Developer 调试函数和过程 Sql window Command window Program window Test window 区别

plsql的命令(command)窗口与sql窗口有什么区别

2017年09月07日 09:22:55 236004 阅读数:10597 标签: command窗口与sql窗口 更多

个人分类: Oracle数据库工具使用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/QQ578473688/article/details/77877092

PW(程序窗口): 
可以执行 sql,sqlplus 相关的语句,例如存储过程,方法,一般用来开发程序用的。
TW(测试窗口): 
一般是用来测试存储过程等的debug。
SW(SQL窗口): 
执行的是dml,ddl语句,主要用户语句的查询、显示、执行统计信息等(应用最多的一个窗口)。例如 desc table不能在SQL 
window中执行,必须在Command window中才能执行。
RW(报告窗口): 
方便用于展示有聚合查询的用图表形式展示的窗口,例如sum(),count()等,有x,y轴的。
CW(command命令窗口): 
除了可以执行sql/sqlplus 相关的命令、sql脚本,还可以执行更多的命令,例如call 等。
EPW(解释计划窗口): 
解释执行计划的,调优时,经常用到。
DW(图表窗口): 

command窗口是命令窗口,即为sqplus窗口,有命令提示符,识别sqlplus命令,基本的命令都可以执行
sql窗口仅可执行DDL、select、DML等
DML(data manipulation language)是数据操纵语言:它们是SELECT、UPDATE、INSERT、DELETE,就象它的名字一样,这4条命令是用来对数据库里的数据进行操作的语言。
DDL(data definition language)是数据定义语言:DDL比DML要多,主要的命令有CREATE、ALTER、DROP等,DDL主要是用在定义或改变表(TABLE)的结构,数据类型,表之间的链接和约束等初始化工作上,他们大多在建立表时使用。

DCL(DataControlLanguage)是数据库控制语言:是用来设置或更改数据库用户或角色权限的语句,包括(grant,deny,revoke等)语句。

SQL语言16种基本命令:

DDL命令:CREATE,ALTER,DROP,RENAME,TRUNCATE,COMMENT

DML命令:SELECT,INSERT,UPDATE,DELETE,MERGE

TCL命令:SAVEPOINT,ROLLBACK,COMMIT,GRANT,REVOKE

参考:http://blog.csdn.net/ape55/article/details/73530419 http://blog.csdn.net/qq_24452475/article/details/53352458

https://blog.csdn.net/qq578473688/article/details/77877092

pl/sql关于新建不同的窗口

2017年11月09日 10:05:28 墨迹世界 阅读数:661 标签: plsql存储编程调试测试 更多

个人分类: oracle

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_26489817/article/details/78486175

使用pl/sql。用的最多的就是 new sql window.

但是pl/sql,除了提供新建sql查询窗口,还提供了其他的window

1.new sql window:sql窗口主要用于查插删改。还可以管理用户

2.new command window:命令窗口。使用起来更像sqlplus,功能比sql窗口多,比如导入,导出。在这个窗口下操作,等同于在cmd下操作(自我感觉)

3.new report window:报表窗口。将查询结果生成报表。可以保存为HTML,PDF。还可以根据数据,生成柱状图,饼图,折线图。

4.new Explain plan window:解释计划窗口。分析所执行的SQL语句。把SQL执行的过程,一步一步展现出来。

5.new Test window.测试窗口。debug,按F9,单步调试。

6.new Diagram window:图表窗口。没明白怎么用的。

7.new Program window.程序窗口。创建触发器,存储过程,包头(package:声明),包体(package body:具体实现),当然也可以创建一个空白的程序窗口。

使用Program window,更加方便(会帮你造好壳),但是,用sql window写程序也是可以的。

https://blog.csdn.net/qq_26489817/article/details/78486175

PL/SQL如何调试Oracle存储过程

from:http://jingyan.baidu.com/article/3a2f7c2e144d2826aed61167.html

调试过程对找到一个存过的bug或错误是非常重要的,Oracle作为一款强大的商业数据库,其上面的存过少则10几行,多则上千行,免不了bug的存在,存过上千行的话,找bug也很费力,通过调试可以大大减轻这种负担。

工具/原料

  • PL\SQL

  • Oracle

方法/步骤

  1. 首先在PL/SQL的左侧资源栏中展开Procedures项(图中位置1),然后再其上面的搜索框中(图中位置2)输入存过名称的关键词,按回车键搜索要调试的存过,不停的回车,直到找到想要调试的存过。

    PL/SQL如何调试Oracle存储过程

  2. 找到想要调试的存过,左键单击选中该存过(图中位置1),然后右键单击该存过,从弹出菜单中选择“Test”项(图中位置2)。

    PL/SQL如何调试Oracle存储过程

  3. 单击“Test”后,PL\SQL会打开调试界面,图中位置1的按钮就是开始调试的按钮,在调试之前要填写存过的参数,位置2就是填写参数的地方,如果有多个参数,会有多行参数框,按参数名填写相应的参数即可。

    PL/SQL如何调试Oracle存储过程

  4. 填写完参数,单击开始调试按钮后,调试的界面会发生一些变化。图中位置1的变化,说明存过已经处于执行状态,别人不能再编译或者执行。位置2的按钮就是执行按钮,单击这个按钮存过会执行完成或者遇到bug跳出,否则是不会停下来的,调试时不会用这个按钮的。位置3的按钮才是关键——单步执行,就是让代码一行一行的执行,位置4的按钮是跳出单步执行,等待下一个指令。

    PL/SQL如何调试Oracle存储过程

  5. 单击“单步执行”,存过开始单步执行。界面中每一次执行的代码会高亮显示(图中位置1),如果想要看某个变量具体的值,就在位置2的地方输入该变量名,然后变量的值会显示在位置3的地方。

    PL/SQL如何调试Oracle存储过程

  6. 调试的时候,每一次单步执行的时候要记一下执行代码的行数,图中位置3的数字就是当前执行代码的行数,就是第几行。如果过程单步执行到某行后,再单步执行的时候,存过就退出,那么错误就在该行的下一行。

    PL/SQL如何调试Oracle存储过程

  7. 代码执行到24行,在往下执行时,直接转到exception的地方,也就是异常处理的部分。

    PL/SQL如何调试Oracle存储过程

  8. 这说明我们代码中的错误在24和25行上,我们打开存过,浏览到24行和25行附近,发现25行和24行使用了两个变量,记住那两个变量。重新开始调试过程。

    PL/SQL如何调试Oracle存储过程

  9. 单步的执行时候把刚才那两个变量名填写到变量查看框,一边观察变量值变化,一边单步执行,执行到24行的时候,发现一个变量已经有值了,而另一个变量的值为null。错误原因明朗了吧?就是变量没有赋值或者初始话,给该变量赋值后存过就不报错了。

    PL/SQL如何调试Oracle存储过程

https://www.cnblogs.com/liuqiyun/p/6589814.html

 

PL/SQL Developer中调试oracle的存储过程

作者:iamlaosong

唉,真土,曾经用Toad。一直用dbms_output.put_line调试存储过程,仅仅认为不方便,用上PL/SQL Developer后,习惯性的还是用这种方法。人都是有惰性的。今天分析存储过程生成的数据,实在认为不便,网上搜了一下,PL/SQL Developer中调试oracle的存储过程的方法,事实上非常easy。我知道学会使用PL/SQL Developer的调试功能,对于编写复杂的存储过程,包,funtion...非常有帮助,对运行存储过程形成的结果进行分析时也非常实用处,学习之后,果然、当真方便。现将相关步骤摘录例如以下:

1、首先是编写存储过程,编译无误;
2、加入debug信息。为了可以单步跟踪存储过程,须要为其所在的包加入debug信息,右键点击须要调试的存储过程名称。在弹出菜单中选中[add debug information],这样就为包体加入了调试信息;

3、选择须要调试的存储过程名称。点击右键,在弹出菜单中 选择[Test]。进去測试窗体,測试窗体中有为了測试该存储过程自己主动所产生的代码。当然你也能够自己另外增加和改动代码。自己主动生成的代码已经足够了。

begin
  -- Call the procedure
  sxjk_sn_jsgfl(pinput => :pinput);
end;


4、有參数的存储过程须要在以下的參数输入表格中输入參数值,见下图中的參数值“n”。

5、開始调试。点击工具条上Start图标或者按F9进入调试模式。以后的调试过程跟我们熟悉的的调试过程就一样了(以下是菜单或者工具条上的部分调试功能):
Run(Ctrl+R)全速执行,到断点停下。
Step into(Ctrl+N)运行一步。假设是调用过程。进入子过程。
Step over(Ctrl+O)运行一步,不管什么语句。
Step out(Ctrl+T)运行完过程,直到从过程中退出到上一级。
。。

。。。


6、调试过程中能够设置断点(点击断点语句的左側灰色空白处,出现一个红色的叉就是断点,再次点击能够取消),能够查看过程中的变量值(鼠标指向变量时,系统自己主动显示这个变量的值)。


假设无法单步运行或者无法设置断点。可能是上面第二步[add debug information]没有做。

https://www.cnblogs.com/mfrbuaa/p/5406802.html

 

 

pl/sql command window 初步接触

pl/sql command window基本操作

PL/SQL Developer应用两年了,今天第一次应用command window。

command window类似于sqlplus窗口:

1、用Esc键退出到SQL行。

2、调用存储过程:Begin  procedure xxx(); end; 时,先回车到下一行,再/ ,再按enter键,才能执行出结果。

3、调用存储过程前,需要先打开 set serveroutput on 否则执行不出结果。

4、SQL window中调用完存储过程之后,点击SQL旁边的Output小窗口也可以看到输出结果。

5、在Test window中调用也可以看到,底下可以输入变量的值。旁边也有一个DBMS Output可以看到结果。

6、例子:

create table BOOK(编号 number(10),书名 varchar2(20),价格 varchar2(20))

insert into BOOK values(100,'aa','88.77')

create or replace procedure query_BOOK(name IN OUT NUMBER,MY_BOOK OUT VARCHAR2,MY_BOOK2 OUT VARCHAR2) is

begin

select 编号 ,书名,价格 INTO name,MY_BOOK,MY_BOOK2 from BOOK where 编号=name;  

end query_BOOK;

declare v_name number(10);

 v_my_book varchar2(50);

 v_my_book2 varchar2(20);

begin

  v_name := 100;

  query_BOOK(v_name,v_my_book,v_my_book2); --调用存储过程

  dbms_output.put_line('v_name is: '||v_name);

  dbms_output.put_line('v_my_book is: '||v_my_book);  

  dbms_output.put_line('v_my_book2 is: '||v_my_book2);  

exception

  when others then

  dbms_output.put_line(sqlerrm);

end;

标签: pl/sqlcommand window

https://www.cnblogs.com/yayazi/p/5156612.html

关于在PLSQL中实现DEBUG调试功能的方法

2017年04月07日 14:27:52 samt007 阅读数:2179 标签: oracle调试plsql 更多

个人分类: Oracle PL/SQL技巧

前言 
一个健康的PLSQL,应该都带有一套完整的调试逻辑。特别是那些功能很复杂的PLSQL,就更加有必要具备调试功能了。否则,当PLSQL处理数据出现问题的时候,分析(处理)起来会相当的困难。 
举个例子,Oracle EBS标准功能的PLSQL(特别是API),如果Oracle没有自带调试功能给我们做看每一步骤的调试结果,单单通过看代码模拟其执行逻辑来找问题,基本上是不可能处理问题的! 
当然,我们编写的代码,实际上大部分的都并没有很复杂,所以对调试部分没太高的要求。这里也建议按照实际情况来做。但是一些重要的并且是复杂的功能,还是必须要考虑如何添加调试! 
实现调试的办法 
现在根据这几年写PLSQL的经验,得出的一套如何在PLSQL中实现调试的方法,特意分享一下。如果有更加好的方法,也可以一起讨论一下!

具体实现办法: 
1 首先,统一新建3个客户化的Profile配置来实现调试功能的开关: 
CUX:程序调试级别 
设置调试的级别。这里是仿照标准功能的调试逻辑来做的一个设定。作用就是是否启用调试,以及调试的数据输出的明细级别! 
具体: 
XYG_ALD_DEBUG_LEVEL:设置查看调试消息的级别 
0:不查看调试(默认值) 
1:查看调试程序主要消息级别=1的消息 
2:查看消息的调试级别<=2的信息 
3:查看消息的调试级别<=3的信息 
4:查看消息的调试级别<=4的信息 
5:查看消息的调试级别<=5的信息

举个例子,如果我的调试消息设置是:调试级别3,调试显示3的信息。 
则当XYG_ALD_DEBUG_LEVEL级别是2的时候,这个3的调试信息是不会显示的。 
当XYG_ALD_DEBUG_LEVEL级别大于等于3的时候,这个消息才会显示出来! 
具体可以自己写一个例子来理解。

CUX:程序调试方式 
就是调试结果显示的方式。 
一般来说有下面几种方式: 
调试方式XYG_ALD_DEBUG_TYPE: 
DBMS_OUTPUT直接输出 
FILE_DEBUGLOG文档输出 
REQUEST_DEBUGLOG请求日志输出 
DATA_DEBUGLOG表格数据输出 
DBMS_OUTPUT:这个不用多说了,实际上就是调用DBMS_OUTPUT.PUT_LINE在开发工具直接显示消息。 
FILE_DEBUGLOG:这个很重要!不过要配合一些额外的定义,才可以看到这种输出的结果。这种方式的调试结果以文件的形式存在服务器里面。适合那种超大数据量输出的调试信息。 
REQUEST_DEBUGLOG:如果PLSQL是在请求中调用的话,可以考虑用这种方式查看调试信息。调试信息会直接显示在请求的日志里面。 
DATA_DEBUGLOG表格数据输出:就是将调试的结果输出在fnd_log_messages表。和标准功能的保持一致!

CUX:程序调试文件 
结合调试方式= FILE_DEBUGLOG文档输出使用。 
就是定义调试结果产生的文件是什么。 
注意:如果这个设定为空,则默认文件= XYG_PUB_AUTOMAIL_PKG.XYG_DF_UTL_FILE_DIR||’/’||userenv(‘SESSIONID’)||’.log’

2 PLSQL里面如何使用调试的方法: 
首先,在要添加调试逻辑的PKG包体里面,建议直接添加下面这些脚本,二次简单封装一下公用的调试处理包,方便调用: 
例如:

CREATE OR REPLACE PACKAGE BODY APPS.XYG_ALBND_PACK_PKG
AS
   --===============================================================
   -- Debug 处理
   --===============================================================
   --P_DEBUG_LEVEL:该调试信息的级别
   PROCEDURE DEBUGLOG (P_DEBUG_LEVEL IN NUMBER,P_DEBUG_MSG IN VARCHAR2)
   IS
   BEGIN
      XYG_ALD_DEBUG_PKG.DEBUGLOG(' XYG_ALBND_PACK_PKG ',P_DEBUG_LEVEL,P_DEBUG_MSG);
   END DEBUGLOG;
   --简化版本,默认该消息的是level=1的
   PROCEDURE DEBUGLOG1 (P_DEBUG_MSG IN VARCHAR2)
   IS
   BEGIN
      XYG_ALD_DEBUG_PKG.DEBUGLOG(' XYG_ALBND_PACK_PKG ',1,P_DEBUG_MSG);
   END DEBUGLOG1;
….
接着,在需要显示调试消息的地方,直接调用这个函数即可:
DEBUGLOG(1,'GENERATE_XXXXXXXXXXXXX(+)');   或者:DEBUGLOG1('GENERATE_XXXXXXXXXXXXX(+)');
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

需要注意的是,DEBUGLOG的第一个参数是该消息的显示级别。换句话说,就是你希望这个消息在什么级别显示它! 
举个例子,如果设置为3,则消息基本是3级,当设置显示的消息级别大于等于3的时候,该消息会显示。

3 程序如何查看调试的结果:

------------------------------
---1 普通在Toad的output调试样例:
DECLARE
   L_RETCODE NUMBER;
   L_ERRBUF VARCHAR2(4000);
BEGIN
   FND_PROFILE.PUT('XYG_ALD_DEBUG_LEVEL',1);
   FND_PROFILE.PUT('XYG_ALD_DEBUG_TYPE','DBMS_OUTPUT');
   XYG_ALBND_PACK_PKG.AUTO_CREATE_PACK(
          'PO_HEADERS_ALL'
         ,2579287
         ,SYSDATE
         ,5954
         ,'NORMAL'
         ,l_retcode
         ,l_errbuf
       );
   DBMS_OUTPUT.PUT_LINE(L_RETCODE||'-'||L_ERRBUF);
END;

------------------------------
---2 调试结果文件输出样例:
DECLARE
   L_RETCODE NUMBER;
   L_ERRBUF VARCHAR2(4000);
BEGIN
   FND_PROFILE.PUT('XYG_ALD_DEBUG_LEVEL',2);
   FND_PROFILE.PUT('XYG_ALD_DEBUG_TYPE','FILE_DEBUGLOG');
   FND_PROFILE.PUT('XYG_ALD_DEBUG_FILE'
,'/oracle/vis/apps/apps_st/appl/attchment/12.0.0/BATCH_UPLOAD_TEMP/SAMT_TEST001.log');
   XYG_ALBND_PACK_PKG.AUTO_CREATE_PACK(
          'PO_HEADERS_ALL'
         ,2579287
         ,SYSDATE
         ,5954
         ,'NORMAL'
         ,l_retcode
         ,l_errbuf
       );
   DBMS_OUTPUT.PUT_LINE(L_RETCODE||'-'||L_ERRBUF);
END;

--查看文件的路径
SELECT FND_PROFILE.VALUE('XYG_ALD_DEBUG_FILE') FROM DUAL

------------------------------
--3 如果用数据输出的
DECLARE
   L_RETCODE NUMBER;
   L_ERRBUF VARCHAR2(4000);
BEGIN
   FND_PROFILE.PUT('XYG_ALD_DEBUG_LEVEL',2);
   FND_PROFILE.PUT('XYG_ALD_DEBUG_TYPE','DATA_DEBUGLOG');
   XYG_ALBND_PACK_PKG.AUTO_CREATE_PACK(
          'PO_HEADERS_ALL'
         ,2579287
         ,SYSDATE
         ,5954
         ,'NORMAL'
         ,l_retcode
         ,l_errbuf
       );
   DBMS_OUTPUT.PUT_LINE(L_RETCODE||'-'||L_ERRBUF);
END;
---查看调试信息:
select to_char(systimestamp, 'yyyy-mm-dd hh24:mi:ss:ff3') debug_time,session_id,module||'[---]'||message_text
  from fnd_log_messages
 where timestamp > sysdate-1
   and session_id=userenv('SESSIONID')
 order by LOG_SEQUENCE;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71

完工!就是这么的简单,让您写的PLSQL就拥有了完整的而且有非常好扩展性的调试功能!

文档下载以及源代码下载的链接: 
http://download.csdn.net/detail/samt007/9806450

https://blog.csdn.net/samt007/article/details/69537289

试玩了plsql中test窗口declare声明变量|lpad函数||plsql sql command test window区别|

在这里先感谢一下itpub高手的帖子答复

Q:

看到的oracle中的for循环or i in 1..100 loop,i都是从1,2,3这样递增的,可是我这里需要i从01,02,03这样递增,9开始是09,10,11,12.
请问这样的for循环怎么写。
具体问题可见http://www.itpub.net/thread-1620912-1-1.html,我想在触发器中加入循环变量,精简我的触发器长度。
ps:我是新手,谢谢大家的帮助

A:

lpad('tech', 7);        would return ' tech'

lpad('tech', 2);        would return 'te'

lpad('tech', 8, '0');        would return '0000tech'

lpad('tech on the net', 15, 'z');        would return 'tech on the net'

lpad('tech on the net', 16, 'z');        would return 'ztech on the net'

每次看到itpub的答复都很激动,一个恢复解决问题。

lpad函数说明

语法格式如下:

  lpad( string, padded_length, [ pad_string ] )

  string

  准备被填充的字符串;

  padded_length

  填充之后的字符串长度,也就是该函数返回的字符串长度,如果这个数量比原字符串的长度要短,lpad函数将会把字符串截取成从左到右的n个字符;

  pad_string

  填充字符串,是个可选参数,这个字符串是要粘贴到string的左边,如果这个参数未写,lpad函数将会在string的左边粘贴空格。 

下面说plsq中的块。

经常看到有人和书上直接写declare,也不在触发器或者存储过程中,可是照样使用,比如:http://zhidao.baidu.com/question/113921713.html

1,我刚开始直接在plsql中的查询窗口sql window使用,报错:

13:51更新:

sql windows窗口也是可以显示的,在第二列就是output,仅仅select不行

 

2,想到在测试窗口test window,通过(需要点击左上角的start debugger按钮,然后点击run)

复制代码

-- Created on 2012-6-13 by DELL 
declare 
  -- Local variables here
  i number;
begin
  -- Test statements here
  for i in 1..100 loop
    dbms_output.put_line(lpad(i,2,'0'));
    end loop;
end;

复制代码

下面是结果

 拓展:

1 Command window实现了SQL*Plus的所有功能,允许运行sql*plus命令,sql命令,sql脚本。
2 SQL window用于执行sql语句,显示sql输出,执行统计信息。(测试sql语句,查看表中的数据,更新数据)
  例如 desc table(查看表结构)不能在SQL window中执行,必须在Command window中才能执行。

3 Program window中创建一个存储过程(或者直接在plsql左边对应的procedures和trigger右键新建),如下:

create or replace procedure TEST is
begin
DBMS_SESSION.set_nls('NLS_DATE_FORMAT','''YYYY-MM-DD HH24:MI:SS''');
DBMS_OUTPUT.PUT_LINE('HelloWorld!');
DBMS_OUTPUT.put_line(SYSDATE);
end TEST;

需要注意,SET_NLS的第二个参数VALUE
输入的值除了需要的格式外,还需要包含引号,否则会引发错误(选项缺失或无效)
在Command window中执行(或者在Test window中测试),如下:
set   serveroutput   on
exec TEST();
或者begin
  2  test();
  3  end;
  4  / ......

分类: ORACLE

好文要顶 关注我 收藏该文  

sumsen
关注 - 5
粉丝 - 21

+加关注

https://www.cnblogs.com/sumsen/archive/2012/06/13/2547512.html

猜你喜欢

转载自blog.csdn.net/xuheng8600/article/details/84667748