PROC中的NULL值的处理

如果某一字段取出的值是NULL,会报:sqlcode=-1405, sqlerr=ORA-01405: 读取的列值为 NULL

并且相应的宿主变量的值不会被改变,为执行该SQL语句之前的值. 常用的处理NULL值的方法有:

(1)采用指示器变量,此时不会有-1405错误,当必须是所以为NULL的字段都有相应的指示器变量,如果某一字段没有指示器变量,但取出的值

为NULL值,则仍然会有-1405错误.当取出的值是NULL时,相应的指示器变量变量为-1,可根据指示器变量的值做响应的处理。

(2)如果字段较多,可取字段到一个结构体中及与该结构体对应的指示器结构体中.如上面的例子中可定义结构体:

struct str_emp{

long al_empno;

char ac_ename;

char ac_hiredate;

double af_sal;

};

struct str_emp_ind{

long al_empno;

char ac_ename;

char ac_hiredate;

double af_sal;

};

struct str_emp str_emp;

strcut str_emp_ind str_emp_ind;

在取之前可用memset(&str_emp,0,sizeof(str_emp)).清空该结构体,这样如果是字符型的NULL,会为"",整型的NULL会为0,

浮点型的会为0.00。此时不会有-1405错误。

(3)也可采用NVL()函数:举例如下:

EXEC SQL DECLARE authors CURSOR FOR

SELECT EMPNO, NVL(ENAME,chr(0)),nvl(to_char(HIREDATE,'yyyy/mm/dd hh24:mi:ss'),chr(0)),NVL(SAL,0) FROM EMP;

这样也不会有-1405错误不,当取出的值是NULL时,自动用NVL()中指定的值代替.

CHR(0)也可直接用''代替,如下:

SELECT EMPNO, NVL(ENAME,''),nvl(to_char(HIREDATE,'yyyy/mm/dd hh24:mi:ss'),''),NVL(SAL,0) FROM EMP;5、PROC中的错误的处理

所有的SQL语句都有可能出错.所以都要加以判断,但每个SQL语句后都加错误判断,太麻烦,可用一个函数如sql_error()来进行错误处理,

方法:

(1)定义ql_error()函数。

(2)在开头加上EXEC SQL WHENEVER SQLERROR DO sql_error();这样当发生sqlca.sqlcode <0 的错误时,程序自动转到sql_error()中执行. 注意:对sqlca.sqlcode >0的错误如 sqlca.sqlcode =1403 是不会转到sql_error()中执行的.

另外:在UNIX下,可以用OERR 来查找错误的描述。如: ora ORA -1405 查找错误号为-1405的描述.

oracle错误1405,oracle -1405错误解决方法相关推荐

  1. imp导入时 出现IMP-00017:由于 ORACLE 错误 6550, 以下语句失败: 解决方法

    imp导入时 出现IMP-00017:由于 ORACLE 错误 6550, 以下语句失败: 解决方法 参考文章: (1)imp导入时 出现IMP-00017:由于 ORACLE 错误 6550, 以下 ...

  2. oracle 01722 无效数字,Oracle连接字符串报错误ORA-01722:无效数字的解决方法

    Oracle连接字符串报错误ORA-01722:无效数字的解决方法,如下函数,用来查出名字相似于某字符串 Oracle连接字符串报错误ORA-01722:无效数字的解决方法,如下函数,用来查出名字相似 ...

  3. oracle 查看并行数据库,Oracle数据库并行查询出错的解决方法

    Oracle的并行查询是使用多个操作系统级别的Server Process来同时完成一个SQL查询,本文讲解Oracle数据库并行查询出错的解决方法如下: 1.错误描述 ORA-12801: 并行查询 ...

  4. win8oracle10g安装报错,Win8电脑安装Oracle 10g提示程序异常终止的解决方法

    有win8系统用户反映说在安装Oracle 10g的时候,选择高级安装之后,就弹出一个窗口,提示程序异常终止,发生内部错误,导致Oracle 10g安装失败,该怎么解决这样的问题呢?下面随小编一起来看 ...

  5. oracle安装后开机很慢,Windows下安装Oracle拖慢开机速度的解决方法

    环境:win7 + oracle R2 方法:将安装Oracle后自动开机启动的服务改为手动启动 步骤如下: 1.修改服务项 Ctrl + R,输入services.msc,打开服务列表,找到Orac ...

  6. oracle并行查询结果不唯一,Oracle数据库并行查询出错的解决方法

    Oracle的并行查询是使用多个操作系统级别的Server Process来同时完成一个SQL查询,本文讲解Oracle数据库并行查询出错的解决方法如下: 1.错误描述 sql;"> ...

  7. oracle create user identified by,Oracle system用户忘记密码的解决方法

    Oracle system用户是大家经常用到的,下面就为您介绍Oracle system用户在忘记密码情况下的解决方法,如果您在使用Oracle system用户时遇到过类似的问题,不妨一看. SQL ...

  8. Oracle 报错 28000原因和解决方法

    Oracle 报错 28000原因和解决方法 使用PLSQL登录Oracle数据库时提示"ORA-28000:这个帐号被锁定". 出现这个问题的原因是:在Oracle databa ...

  9. 连接oracle的scott数据库,Oracle scott用户连接数据库出错的解决方法

    Oracle scott用户连接数据库出现错误?不要紧,下面就教您一个Oracle scott用户连接数据库出错的解决方法,希望对您能有所帮助. 在安装完Oracle10g之后,想打开sql*plus ...

  10. linux oracle lrm00109,Oracle报ORA-01078和LRM-00109错解决方法

    Oracle报ORA-01078和LRM-00109错解决方法 创建实例后,进入sqlplus启动报错: sqlplus / as sysdba; SQL*Plus: Release 11.1.0.6 ...

最新文章

  1. fatal error C1010: 在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include stdafx.h”?
  2. java Lock 源码分析
  3. WolframAlpha 的使用
  4. python中x_python中round(x,[n])的使用
  5. 二层交换网络_网络中的第2层交换
  6. LeetCode 315. 计算右侧小于当前元素的个数(Count of Smaller Numbers After Self)
  7. 人工智能领域中声源定位的研究与发展------第一章 绪论
  8. 应用程序的可视化图形引擎库控件Vectordraw Developer Framework
  9. 拓端tecdat|matlab如何滤除低频尖峰脉冲
  10. 在线SAS统计分析软件使用简介(2019年最新修订)
  11. 【web素材】02-10款大气的购物商城网站模板
  12. 最近电信宽带换光纤了,免费教大家破解电信光纤猫
  13. java注册功能实现
  14. WORD文档怎么转换成EXCEL
  15. android 360开机启动,手机360设置开机启动项
  16. Matlab迭代算法实现
  17. Oracle19c数据库安装教程【Windows版】
  18. 教你亲手制作一个虚拟数字人,超全步骤详解
  19. python基本数据类型之字典详解
  20. web全栈之ECMAScript6.0

热门文章

  1. ad 原理图 网络对不齐 导致 pcb没有网络连接
  2. insmod mknod
  3. XMLHTTP中setRequestHeader()简单分析
  4. 力扣leetcode之Java刷题121买卖股票的最佳时机
  5. php开启opcache,启用OPCache提高PHP程序性能的方法
  6. 冯雷老师:提高360评估结果准确性的3个关键
  7. Android蓝牙通讯(一)————蓝牙功能的相关权限
  8. 挑战40万年薪,Cocos人才你在哪里
  9. 【Android】 桌面图标右上角显示数字(角标)
  10. bson java_使用Gobson / Mgo解组BSON数据