【发布时间】:2015-01-15 06:49:24
【问题描述】:
我写了一个存储过程,从一个表中选择(一些列有空数据)并插入到另一个表中而不重复。
我的部分存储过程代码:
LOOP
BEGIN
SELECT ID
INTO ROWCOUNT
FROM TBL_EMPLOYEE
WHERE
NAME = TEMPTABLE.NAME
AND AGE =TEMPTABLE.AGE
EXCEPTION
WHEN no_data_found THEN
ROWCOUNT := 0;
END;
IF ROWCOUNT = 0 THEN
INSERT INTO TARGET TABLE ......
在上面的代码中,某些列的数据为空(例如:TEMPTABLE.AGE 等)。 当有空值时,它会抛出 no_data_found 异常并插入数据。我们也尝试过放置 nvl 函数,这需要更多时间。
LOOP
BEGIN
SELECT ID
INTO ROWCOUNT
FROM TBL_EMPLOYEE
WHERE
nvl(NAME,0000) = nvl(TEMPTABLE.NAME,0000)
AND nvl(AGE,0000) =nvl(TEMPTABLE.AGE,0000)
EXCEPTION
WHEN no_data_found THEN
ROWCOUNT := 0;
END;
IF ROWCOUNT = 0 THEN
INSERT INTO TARGET TABLE ......
任何人都可以建议任何替代方法如何使用等于运算符进行空检查。 我也用 LIKE 试过了,但是没用。
【问题讨论】:
-
为什么你不想使用空检查?
-
我想使用的是空值,但是当没有数据时它会作为空值出现。但是当有数据时,它应该用“=”检查。如有错误请指正。
-
我也尝试使用 LIKE,但无法检查 null。有什么想法吗?
-
你为什么不一直使用 nvl?不检查异常,或者我不明白你的问题
-
嗨@Dom84,我一直在尝试它,但是,它正在达到性能。我必须像这样处理超过 20k 条记录,它本身在 2k 条记录中失败/超时。