繁体   English   中英

PL/SQL 跳过基本循环上的值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM