oracle 存储过程 空值赋值问题

前省略
使用游标

select pk_period into v_pk_period_hb from demo_dim_period where datestr=v_datestr_hb;----当我查询记录中 pk_period 数据为空赋值怎么解决

后省略
nvl() 函数我早试过,不可以
第一、pk_period 不是数字类型
第二、datestr=v_datestr_hb v_datestr_hb的记录在数据库中不存在 所以查询出来的记录一行也没有
不知二位的结果是验证过没?
并且
select
case
when pk_period is null then
'<N/A>'
else
pk_period
end
from demo_dim_period
where datestr = '19990101'

这样也试过也不行

第1个回答  2009-09-27
有2种方法解决
1 Select nvl(pk_period,null,'空值') Into
这样的话把空值赋个值了

2 用到EXCEPTION
Begin
Select aa Into bb From Talbe_Test;
Exception
When Others Then
...
End aabb;
...
End;

-----补充------
一般而言 对空值的处理要用到nvl函数。
看我的示例:
sql@kokooa>set serveroutput on;
sql@kokooa>
sql@kokooa>declare
2 var_name varchar2(20);
3 cursor test034_cur(p_test034_id number) is
4 select nvl(subject_name,'空值') from test034 where grade_id=p_test034_id;
5 begin
6 if test034_cur%isopen=false then
7 open test034_cur(3);
8 end if;
9
10
11 loop
12 fetch test034_cur into var_name;
13
14 exit when test034_cur%notfound;
15 dbms_output.put_line('课程名称为:'||var_name);
16 end loop;
17
18 close test034_cur;
19 end;
20 /
课程名称为:空值

PL/SQL procedure successfully completed.

如果还有什么问题 请补充
第2个回答  2009-09-25
如1楼,使用nvl()函数即可,

select nvl(pk_period,0) into...
若pk_period为空,那么v_pk_period_hb=0
前提:pk_period与v_pk_period_hb都是数字类型
第3个回答  2009-09-26
1、你说的问法有点问题,对数据是null的值要操作的话,自然是要用nvl函数。

2、如果你是想,当数据库中没有数据的时候,对变量初期化的话,就要判断下:【ONTFOUND】了。
if 有标名%ONTFOUND then
....
end if;

---
以上,希望对你有所帮助。本回答被网友采纳

oracle 存储过程 空值赋值问题
1 Select nvl(pk_period,null,'空值') Into 这样的话把空值赋个值了 2 用到EXCEPTION Begin Select aa Into bb From Talbe_Test;Exception When Others Then ...End aabb;...End;---补充--- 一般而言 对空值的处理要用到nvl函数。看我的示例:sql@kokooa>set serveroutput on;sql@koko...

oracle存储过程中轮循insert语句插入一条之后,下一条数据可能某些字段为...
1. 在Oracle存储过程中,使用轮循INSERT语句时,若下一条数据中某些字段为空,可能是因为在插入过程中使用了变量赋值的方法。2. 例如,查询出的数据被放在一个变量中,然后通过INSERT语句将该变量插入到表中。3. 如果有空值出现,该变量会被赋值为空,不会保留上一次的结果。4. 这种问题在一些编程语...

oracle存储过程中轮循insert语句插入一条之后,下一条数据可能某些字段为...
我理解一下哈,你的意思是不是插入的时候使用了变量赋值的方法,比如说,查询出数据来,放在一个变量里面,然后把这个变量用一个insert语句插入表,如果是这样的,当有空值出现时,该变量会被赋值为空,不会保留上一次的结果。个别编程语言会有这个缺陷,例如PB就有这个问题,所以。通常来说好的变成习惯...

oracle存储过程中如何判断一个字段为空
1. 使用IS NULL关键字:IS NULL是Oracle中专门用于检查字段值是否为空的关键字。在存储过程中,可以通过WHERE子句结合IS NULL来筛选空值。例如,假设有一个名为“table_name”的表,其中有一个字段名为“column_name”,若要查询该字段的值为空的所有记录,可以使用以下SQL语句:...

oracle 现有表A 其中字段a为空值 我现在需要一个存储过程把字段的的值...
v_count number;begin v_count := 0;for cur_data in (select t.id form table_name t where t.column is null) loop update table_name t set t.column = 0 where t.id = cur_data.id;v_count := v_count + 1;if v_count > 0 and mod(v_count, 10000) = 0 then commit;...

在使用oracle创建存储过程部分代码: EXCEPTION WHEN NO_DATA_FOUND THE...
NULL 当没有数据时,抛出空值 RAISE 是用来抛出异常的,没带参数的如你上面的这种,就是将当前的异常传到外部程序。

oracle存储过程的=>是什么意思
oracle存储过程的=>是什么意思 传递参考,=>前面的是参数名,后面的是参数值。 这种语法可以只传自己在意的参数值进去,其他用默认的,或空值

C#如何向存储过程传递NULL值或空参数~
第一个问题,首先你确定你的sqlparameter参数里的确是提供了相应的参数,然后给参数赋值DbNull.value;第二个问题,我觉得首先你确定datagridview绑定的数据源里有结果,可以通过添加断点查看一下,我估计数据源里的结果为空,原因可能是你传递的参数值有误 本回答由提问者推荐 举报| 答案纠错 | 评论 6 0 alicus 采纳...

Oracle调用存储过程多个入参可以不全部传参么?
不行,就算没有对应的参数,也要传一个空值,不然会调用不到方法。

请问oracle的把全部空值的字段修改为0的sql语句怎么写
1、遍历user_tables里面所有的表 2、遍历每一个表的所有列 3、update操作 这个要循环嵌套一个循环才能完成。存储过程代码如下(未测试):CREATE OR REPLACE PROCEDURE UpdateTableSetNull ISDECLARE CURSOR C_JOB IS SELECT TABLE_NAME FROM USER_TABLES; C_ROW C_JOB%ROWTYPE; VAR_TAB...

相似回答