[英]PL/SQL Skip value on basic loop
我是 PL/SQL 的新手,只是想知道我可以在这里做什么。
我创建了一个表,该表将显示在表数据中的计数器循环到 10。
我如何实现它以便我可以数到 1-10 但排除一个数字,例如 5,以便它显示 1、2、3、4、6、7、8、9、10?
当前代码如下;
DROP TABLE COUNTER
CREATE TABLE COUNTER (
COUNTER VARCHAR2(60)
);
DECLARE V_COUNTER NUMBER(2) := 1;
BEGIN
LOOP
INSERT INTO COUNTER (COUNTER)
VALUES (V_COUNTER);
V_COUNTER := V_COUNTER + 1
EXIT WHEN V_COUNTER = 11;
END LOOP;
END;
表数据;
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 10
就像是:
DROP TABLE COUNTER
CREATE TABLE COUNTER (COUNTER VARCHAR2(60));
BEGIN
FOR i IN 1 .. 10 LOOP
IF i <> 5 THEN
INSERT INTO COUNTER (COUNTER) VALUES (i);
END IF;
END LOOP;
END;
/
一般来说,最好批量处理此类语句并避免上下文切换( 这里有关于此主题的更多信息。
DECLARE
TYPE t_values IS
TABLE OF NUMBER;
l_values t_values;
BEGIN
SELECT
level counter
BULK COLLECT
INTO l_values
FROM
dual
WHERE
level NOT IN (
6,
7
)
CONNECT BY
level <= 11;
FORALL i IN l_values.first..l_values.last
INSERT INTO counter VALUES ( l_values(i) );
END;
/
如果代码足够简单,您始终可以使用纯插入 stmt。
INSERT INTO counter
SELECT
level
FROM
dual
WHERE
level NOT IN (
6,
7
)
CONNECT BY
level <= 11;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.