plsql delete 表名无效

plsql delete 表名无效,第1张

plsqldelete表名无效原因如下:

问题是不能将绑定变量用于表名,而Oracle文档则是数据库只使用绑定变量的值,不以任何方式解释其内容。

另外,请注意,如果不是双引号,对象名总是大写的,因此必须查找t_name||'_OLD',而不是t_name||'_old'。

首先保证连接的数据库没有错误,不要看的是一个数据库,时间连接串指向的是另一个数据库

然后debug一下,在执行sql前,看一下sql的具体值

如果没有发现问题,直接把sql语句放到数据库中执行一下(再次强调:注意程序连的数据库和你执行sql的数据库要一致),看有没有问题

1. 对于抛错ORA-00942,表或视图不存在或者找不到数据连接:***ull

1.1 解决方案

要先确认数据库里表或字段是否存在,或者是否拼写正确。

当初创建时是以什么用户创建的,现在的连接用户是否有权限查询该表。用建表的用户连接后再查询看看。

2. 对于抛错ORA-00904,标识符无效

2.1 解决方案

需要确定数据库里对应字段类型是否匹配。

字段、表达式的别名在where子句和group by子句都是不能使用的。

3. 对于抛错ORA-01008: 并非所有变量都已绑定

需要结合看一下具体的存储过程是怎么写的,然后在6.5中调用看看。

3.1 解决方案

6.1升级到6.5,存储过程写法需要变一下,原写法如:call username.procname(?,'[?para|?]','[?para|?]','[?para|?]')需要改为6.5里的写法:{call username.procname(?,'[?p_year|?]','[?p_season|?]','[?p_unit|?]')}即可。

改成这种写法后,如果仍然不成功,报ORA-06550的错误。

原因是:ORACLE里面的存储过程,识别包体名,而不是用户名。直接拖得话,默认是用户名,要自己写包名才行。

4. 对于抛错ORA—00936:missing expression

4.1 解决方案

sql里的参数写法问题,and ([?pro_status|?])和前面的参数识别冲突,去掉and ([?pro_status|?])即可。

5. 对于抛错ORA-01401: 插入的值对于列过大

5.1 原因

数据库的字段nvarchar2(2000),只能存储1000的汉字,当插入2000的汉字的时候就会报错。

5.2 解决方案

把nvarchar2(2000)改成nvarchar2(4000)就可以存下你的2000个汉字了。但是有一点,nvarchar2最大也只能够放到4000宽度了。如果还需要存更多的汉字,字段类型就得用Clob类型了。

6. 对于报错ORA-01830: 日期格式图片在转换整个输入字符串之前结束

6.1 原因

在对字符串型数据转化成日期型数据时,字符串的长度大于格式化的长度,如test数据库中的一个数据列notice_date存的数据为:2011/08/12 08:49:23,将其转化为yyyy-mm-dd格式的数据时,如sql语句为:select todate(notice_date,'yyyy-mm-dd') from test就会报错。

6.2 解决方案

使用substr函数将字符串的位数截取的和转换的日期函数相同,如上面的sql语句就改为:select todate(substr(notice_date,1,10,'yyyy-mm-dd') )from test即可。

7. 对于报错:The Network Adapter could not establish the connection

7.1 解决方案

数据库里系统日志满了,删除后重新启动OracleOraDb10g_home1TNSListener服务后就ull能连接成功了。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/6757089.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-27
下一篇 2023-03-27

发表评论

登录后才能评论

评论列表(0条)

保存