1、打开plsql客户端,登录oracle数据库;
成都创新互联基于十载网站建设行业经验,一直致力于为中小型企业提供信息化解决方案,成都创新互联做到开放、开源,让企业所有核心数据掌握到企业手里,打破行业乱象,让企业被网络公司掌控的局面不再发生;美工设计部,产品/程序研发部,营销策划部,售后客服部。一切服务为企业量身定制,专注为您!
2、创建一个测试表,create table test_exists(id number, value varchar2(20));
3、编写sql,插入oracle系统视图,查询刚建的表是否存在,
select * from user_tables t where table_name= upper('test_exists');可以看到有查询结果,也就是说存在该表;
4、相反的,编写sql,查询test_exists2表是否存在,因没有返回结果,则说明该表并不存在;select * from user_tables t where table_name= upper('test_exists2');
PL/SQL中为我们提供了调试存储过程的功能,可以帮助你完成存储过程的预编译与测试。 点击要调试的存储过程,右键选择TEST 如果需要查看变量,当然调试都需要。在右键菜单中选择Add debug information. start debugger(F9)开始我们的测试,Run(Ctrl+R) 随时在varible List中输入我们想查看的变量 其它: Step into(Ctrl+N):单步调试,进入下一步 Step over(Ctrl+O):结束该语句 Step out(Ctrl+T):跳出该过程 Run to next exception:进入下一个断点Breakpoint Toggle Breakpoint设置断点:光标指向一行,Ctrl+B;或鼠标点中该行的行号边缘
1.查看是哪一个存储过程被锁住
查V$DB_OBJECT_CACHE视图
select * from V$DB_OBJECT_CACHE where owner='过程的所属用户' AND LOCKS!='0'
2.查看是哪一个sid,通过sid可以知道是哪一个session
查v$access视图
select * from v$access where owner='过程的所属用户' and name='刚才查到的过程名'
3.查出sid和serial#
查v$session视图
select sid,serial#,paddr from v$session where sid='刚才查到的sid';
查v$process视图
select spid from v$process where addr='刚才查到的paddr';
4.杀进程
Oracle规定,在默认的情况下,在调用存储过程用户的角色不起作用,即在执行存储过程时只有Public权限。所以在调用Create table时,会有权限不足的提示。
只需要使用IR Procedure就能很快解决问题啦,把代码修改为如下:
CREATE OR REPLACE PROCEDURE TestProc AUTHID current_user
IS
flag number;
BEGIN
select count(*) into flag from all_tables where table_name='TEMP3';
if (flag=0) then
execute immediate 'create global temporary table TEMP3 on commit preserve rows as select * from BUSI_ECONTRACT';
else
execute immediate 'insert into TEMP3 select * from BUSI_ECONTRACT';
end if;
END ;
执行存储过程,顺利通过。
命令行:
sqlplus / as sysdba
select name from user_source where type='PROCEDURE';
可查看sys用户下所有存储过程名字
select text from user_source where name='XXX'
可查看该存储过程的内容
plSQLdevloper工具:
左侧找到‘Procedures’,点开之后即可查看当前用户的所有存储过程。
右键点击存储过程,选择‘view’可查看详细信息