update SYS_WORDBOOK T set col_name=nvl(
(select item_name from RS_SAL_ITEM_ON where table_item_on=T.COL_CODE), col_name ),
show_name=nvl(
(select item_name from RS_SAL_ITEM_ON where table_item_on=T.COL_CODE),col_name ),
T.issearch=decode(
(select count(*) from RS_SAL_ITEM_ON where table_item_on=T.Col_Code),1,'Y','N')
WHERE T.Table_Code='RS_SAL_TABLE_FILE'
and instr(T.COL_CODE,'ITEM_')=1这个语句执行是错误的,“单行子查询返回多于一行”我不知怎么改,再就是看不懂
decode((select count(*) from RS_SAL_ITEM_ON where table_item_on=T.Col_Code),1,'Y','N')
是什么意思,我查了一下decode函数,如果第一个参数是个表达式,如果值是1是“Y”否则是“N”,但我试了一下
count(*)是个数字,是84,子查询结果是“N”
我搞不清怎么回事
(select item_name from RS_SAL_ITEM_ON where table_item_on=T.COL_CODE), col_name ),
show_name=nvl(
(select item_name from RS_SAL_ITEM_ON where table_item_on=T.COL_CODE),col_name ),
T.issearch=decode(
(select count(*) from RS_SAL_ITEM_ON where table_item_on=T.Col_Code),1,'Y','N')
WHERE T.Table_Code='RS_SAL_TABLE_FILE'
and instr(T.COL_CODE,'ITEM_')=1这个语句执行是错误的,“单行子查询返回多于一行”我不知怎么改,再就是看不懂
decode((select count(*) from RS_SAL_ITEM_ON where table_item_on=T.Col_Code),1,'Y','N')
是什么意思,我查了一下decode函数,如果第一个参数是个表达式,如果值是1是“Y”否则是“N”,但我试了一下
count(*)是个数字,是84,子查询结果是“N”
我搞不清怎么回事
update sys_wordbook t
set col_name = nvl((select item_name
from rs_sal_item_on
where table_item_on = t.col_code),
col_name),
show_name = nvl((select item_name
from rs_sal_item_on
where table_item_on = t.col_code),
col_name),
t.issearch = decode((select count(*)
from rs_sal_item_on
where table_item_on = t.col_code),
1,
'Y',
'N')
where t.table_code = 'RS_SAL_TABLE_FILE'
and instr(t.col_code, 'ITEM_') = 1col_name和show_name赋值的时候,要求从rs_sal_item_on中查询出来的是唯一的值,如果查出来的是2rows或更多的记录,则会报错。
可以理解为
if (select count(*) from RS_SAL_ITEM_ON where table_item_on=T.Col_Code)=1 then
return 'y';
else
return 'n';
SELECT COUNT(1)
FROM SYS_WORDBOOK T
WHERE T.Table_Code = 'RS_SAL_TABLE_FILE'
AND instr(T.COL_CODE, 'ITEM_') = 1;如果是大于1的,那么报错就是肯定了的。因为对col_name和show_name进行update操作时要保证查询出来的值唯一、也就是只有一个值。2: T.issearch = decode((select count(*)
from RS_SAL_ITEM_ON
where table_item_on = T.Col_Code),
1,
'Y',
'N')
这段sql代码的意思是:当你count出来的值是1的时候,那decode()的值就是'Y';如果不是1(也就是除了1之外的情况),那么decode()的值就是'N'.
所以我觉得应该是'instr(T.COL_CODE, 'ITEM_') = 1'这里的原因,LZ看看就可以知道了 ..
decode((select count(*) from RS_SAL_ITEM_ON where table_item_on=T.Col_Code),1,'Y','N')
是什么意思,我查了一下decode函数,如果第一个参数是个表达式,如果值是1是“Y”否则是“N”,但我试了一下
count(*)是个数字,是84,子查询结果是“N”
我搞不清怎么回事 *********************这个语句的意思是:(select count(*) from RS_SAL_ITEM_ON where table_item_on=T.Col_Code) 返回的结果如果是 1 (也就是只有一条记录)的话,就将t.issearch 赋值为 “Y”,否则 赋值为 “N”至于语句报错则是heyixiang 所说的
col_name和show_name赋值的时候,要求从rs_sal_item_on中查询出来的是唯一的值,如果查出来的是2rows或更多的记录,则会报错。 你要从业务逻辑上分析是不是哪里有什么条件没有限制好,或者那个值根本就不可能唯一,那就是你的业务方面的问题了。
或者虽然有两个或多个值但每个值都是相同的,那么你可以加一个ROWNUM<2来限制一下。