本以为昨日取得重大进展,只差一个存储过程就能解决问题,今天剧情大反转,可能需要大返工了。
上午针对存储过程研究了几个问题,收获挺大的
1、Oracle是大小写敏感的,并且建表时会自动转换为大写,可以通过添加双引号阻止这种转换。
2、修改表结构等情况会导致存储过程进入“INVALID”状态,需要重新编译
在dba_objects表里找到无效的对象,通过下面的语句编译
alter procedure <NAME> compile
编译失败还可以通过在命令页使用show errors procedure <NAME>查看具体原因,复制下来再粘贴,可以看到更多信息
3、接触到了job的概念
select * from user.jobs
4、存储过程:表或视图不存在的原因
a. 最蠢的,表真的不存在
b. 大小写,参见第一点
c. 权限问题,不是特别清楚
5、接触到了spool的概念
6、decode(条件,值1,返回值1,值2,返回值2,默认值)
if
条件=值1
then
return 返回值1
7、使用PL SQL的时候,如果是SQL窗口,需用用begin、end执行存储过程,在命令行窗口,如常