在SQL PLUS中调试Oracle存储过程
开发和调试Oracle存储过程都是用可视化工具,如PL SQL DEVELOPER,TOAD等等。不会有人傻到要用 vim 去开发,再用 sql plus 去调试
我们在通常情况下,开发和调试Oracle存储过程都是用可视化工具,如PL SQL DEVELOPER,TOAD等等。不会有人傻到要用 vim 去开发,再用 sql plus 去调试的存储过程的。但在有些情况下,我们知道在 sql plus 中如何调试存储过程,还是有收益的。
像我的有些客户的数据库环境,我只能通过ssh 连接进去看。开发人员告诉我,,一个存储过程使用pl sql developer 调试一下就死掉,再调再死。
我在数据库的系统管理视图中看不到任何错误,怎么办呢?
没办法,只能自己使用sql plus 这个工具去调试存储过程啦!
在绕过几层网络设置,连接上数据库服务器操作系统,打开sqlplus 工具窗口。
要调试的存储过程是这样子:
CREATE OR REPLACE PROCEDURE "PROC_OBJECT_GET_ID"(p_id_name varchar2,
result out integer,
p_message out varchar2)
一个输入变量和两个输出变量,分别为varchar,integer,varchar 类型。
在sql plus 中,使用var 声明变量,使用exec 赋值和执行存储过程
SQL> VAR P_ID_NAME VARCHAR2(100)
SQL> VAR RESULT NUMBER
SQL> VAR P_MESSAGE VARCHAR2(100)
SQL> EXEC :P_ID_NAME:= 'com.css.cms.document'
SQL> execute PROC_OBJECT_GET_ID1(:P_ID_NAME,:result,:p_message);
PL/SQL 过程已成功完成。
SQL> PRINT RESULT
RESULT
----------
-1
SQL> PRINT P_MESSAGE
P_MESSAGE
--------------------------------------------------------------------------------
ORA-01422: 实际返回的行数超出请求的行数
变量的类型只有帮助中列出来的这些。
SQL> variable result integer;
用法 : VAR[IABLE] [
VARCHAR2 (n [CHAR|BYTE]) | NCHAR | NCHAR (n) |
NVARCHAR2 (n) | CLOB | NCLOB | REFCURSOR |
BINARY_FLOAT | BINARY_DOUBLE ] ]
sqlplus 工具还有一些功能,可以使用help 方式去学习。
更多Oracle相关信息见Oracle 专题页面 ?tid=12