我运行此命令:
select * from LIST where JCODE = 8 and
KCODE = 01 and LCODE = 2011
和如果上面没有重复行,请执行以下操作:
insert into LIST
select * from LIST@LNDB where JCODE = 8 and
KCODE = 01 and LCODE = 2011 and ban
in (select BAN from billing_account)
Update LIST set STS = null where JCODE = 8
AND KCODE = 01;
Update LIST set NO = '1' where JCODE = 8 AND
KCODE = 01;
而且我可以在begininng中使用一些变量 集
JCODE= somevalue
KCODE= anothervalue
LCODE=someothervalue
这样我每次运行时都不必编辑每一行。 我正在使用:
Oracle 9i Enterprise Edition release 9.2.8.0 - 64 bit Production
答案 0 :(得分:2)
我无法告知SELECT
,但您应该被允许同时UPDATE
多个字段:
UPDATE LIST set STS = null , NO = '1' WHERE JCODE = 8 AND KCODE = 01;
编辑:我不明白你为什么需要第二个SELECT
(LIST@LNDB
),但在这两个查询中我都不认为你真的需要所有的字段,所以不要使用{ {1}}对系统来说很重要,只使用并明确地使用主键的字段名称(如SELECT *
)。
并且有一种方法可以在一个请求中执行此操作,可能类似于:
SELECT id FROM ...
这样,如果UPDATE LIST set STS = null , NO = '1' WHERE JCODE = 8 AND KCODE = 01 AND 0<(SELECT COUNT(*) FROM LIST WHERE JCODE = 8 AND KCODE = 01 AND LCODE = 2011);
找不到结果,则SELECT
中的WHERE
子句对于每一行都将为false,因为0 <0为false。可能还有一种方法可以将UPDATE
与命名字段而不是COUNT()
一起使用,我不太了解Oracle。
重新编辑:的确,如果您的第二个*
实际上是SELECT
,您可能需要INSERT
:)但我不认为您可以应用相同的技巧*
上的INSERT
...
重新编辑:更好地写下我在评论中添加的内容 - 取自http://www.oradev.com/oracle_insert.jsp - 您的唯一请求可能是:
UPDATE
当然,您可以添加GuZzie触控,使用INSERT
WHEN (0=(SELECT COUNT(id) FROM LIST WHERE JCODE=8 AND KCODE=01 AND LCODE=2011))
INTO LIST (field1, field2, field3, STS, field4, field5, NO, field6)
SELECT field1, field2, field3, null, field4, field5, 1, field6
FROM LIST@LNDB
WHERE JCODE=8 AND KCODE=01 AND LCODE=2011
AND ban IN (SELECT BAN FROM billing_account)
,DECLARE
和BEGIN
来简化参数的编写;)
答案 1 :(得分:1)
您可以合并两个更新查询。
Update LIST set STS = null, NO = '1' where JCODE = 8 AND KCODE = 01;
如果你想使用变量,你需要声明它们,然后只需在查询中调用它们
DECLARE
v_JCODE NUMBER := 8;
v_KCODE NUMBER := 01;
v_LCODE NUMBER := 2011;
BEGIN
Update LIST set STS = null, NO = '1' where JCODE = v_JCODE and KCODE = v_KCODE;
END;
/
编辑:由于下面的讨论和评论,我做了一个PL / SQL程序,它应该做你想要的。请注意,您需要替换第1行中的schemaname.procedure,因为这是您当前正在使用的方案中的过程名称。
CREATE OR REPLACE PROCEDURE schemaname.procedure is
-- Declare vars
v_JCODE NUMBER := 8;
v_KCODE NUMBER := 01;
v_LCODE NUMBER := 2011;
v_checkvar NUMBER;
BEGIN
select count(*)
into v_checkvar
from LIST
where JCODE = v_JCODE
and KCODE = v_KCODE
and LCODE = v_LCODE;
if v_checkvar = 0 then
insert into LIST
select * from LIST@LNDB
where JCODE = v_JCODE
and KCODE = v_KCODE
and LCODE = v_LCODE
and ban in (select BAN from billing_account);
update LIST
set STS = null, NO = '1'
where JCODE = v_JCODE
and KCODE = v_KCODE;
end if;
END;