oracle

您所在的位置:网站首页 oracle错误码17002 oracle

oracle

#oracle | 来源: 网络整理| 查看: 265

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的错误如 sqlca.sqlcode =1403 是不会转到sql_error()中执行的. 另外:在UNIX下,可以用OERR 来查找错误的描述。如: ora ORA -1405 查找错误号为-1405的描述.



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3