updatesql="update DocClauses set CLAUSEORDER=CLAUSEORDER-1 where (CLAUSEID=?) or (ITEMID=? and CLAUSEORDER=?) ";
解决方案 »
- 存储过程中使用游标时效率的问题
- 急求Sql语句呀,在线等。
- 如何看不到输出信息?
- c# 连ORACLE 我的程序不好使,请大家帮助!!! 谢谢
- oracle 9i 在window 2000server 上的安装
- ★★求一句较难的SQL 关于行列转换的
- 错误PLS-00201: identifier 'SYS.V_$SESSION' must be declared
- 奇怪的问题,请指教!
- ?求助,ORACLE中在SELECT 语句 使用GROUP BY 分类查询时,提示‘GROUP BY 不是表达式’请问什么原因?
- 请教关于连接oracle rac,tnsping 发生tns-12547(lost contact)错误问题
- into 问题
- 在oracle里面能不能进行与或非的操作?用什么运算符?
update DocClauses set CLAUSEORDER=CLAUSEORDER-1 where CLAUSEID=?;
update DocClauses set CLAUSEORDER=CLAUSEORDER+1 where ITEMID=? and CLAUSEORDER=?;
"
语句后加上分号
procedure proc_test(iCLAUSEID number, iITEMID number, iCLAUSEORDER number);
end cw;
/CREATE or Replace package body pktest is
procedure proc_test((iCLAUSEID number, iITEMID number, iCLAUSEORDER number)
as
begin
update DocClauses set CLAUSEORDER=CLAUSEORDER-1 where CLAUSEID=iCLAUSEID;
update DocClauses set CLAUSEORDER=CLAUSEORDER+1 where ITEMID=iITEMID
and CLAUSEORDER = iCLAUSEORDER ;
end proc_test;
是為什麼呢?两句SQL语句分開執行或合在一起執行在同一個事務下是完全沒有區別的!update table b
set b.id=
(
select a.id
from (
select id,id-1 id_x from table
where id = 8
union
select id,id+1 id_x from table
where id = 7
) a
where b.id=a.id_x
)
where b.id in (7,8);
('A','A',
2 (CLAUSEID='487'),'B',(ITEMID='484' and CLAUSEORDER='3'));
(CLAUSEID='487'),'B',(ITEMID='484' and CLAUSEORDER='3'))
*
ERROR 位于第 2 行:
ORA-00907: 缺少右括号
CLAUSEID=? 和 ITEMID=? and CLAUSEORDER=? 都满足,执行什么?
update DocClauses set CLAUSEORDER = (
select CLAUSEORDER-1 where CLAUSEID=?
);
update DocClauses set CLAUSEORDER=CLAUSEORDER-1 where CLAUSEID=?";
tempsql="update DocClauses set CLAUSEORDER=CLAUSEORDER+1 where ITEMID=? and CLAUSEORDER=?";
如果没有同时满足CLAUSEID=? 和 ITEMID=? and CLAUSEORDER=? 这种情况则可以这样写:
update DocClauses a
set CLAUSEORDER = (
select CLAUSEORDER-1 from DocClauses b
where a.识别码= b.识别码 and CLAUSEID=?
union
select CLAUSEORDER-1 from DocClauses b
where a.识别码= b.识别码 and ITEMID=?
and CLAUSEORDER=?
)
where CLAUSEID=? or (ITEMID=? and CLAUSEORDER=?);
如果有那种情况则要再加个查询:
update DocClauses a
set CLAUSEORDER = (
select max(c.aa) --你要的函数
from
(select CLAUSEORDER-1 aa from DocClauses b
where a.识别码= b.识别码 and CLAUSEID=?
union
select CLAUSEORDER+1 aa from DocClauses b
where a.识别码= b.识别码 and ITEMID=?
and CLAUSEORDER=?
)c
)
where CLAUSEID=? or (ITEMID=? and CLAUSEORDER=?);