将数据 select 插入到 plsql 中的 with 循环中

inserting data select into with loop in plsql

我只是想将表单详细信息列数据从详细信息块输入到数据库列中,并且必须检查当我输入数据时该列中已有的第一个输入数据数据保存在其他表中但在 token_staus 未输入数据并向我发送消息 未找到相关数据 我编写了一个对我不起作用的循环 我显然犯了某种错误但不确定它在哪里

DECLARE 
TOKEN_NO NUMBER;
TOKEN_STATUS1 NUMBER;
--TOKEN_STATUS2 := :TOKEN_STATUS;
BEGIN
SELECT SR_NO, TOKEN_STATUS INTO TOKEN_NO, TOKEN_STATUS1 FROM LOOPT2 WHERE SR_NO = :TOKEN_NO;
--IF :TOKEN_STATUS IS NULL
--THEN
LOOP
GO_BLOCK('TOKEN_REC2');
FIRST_RECORD; 
INSERT INTO LOOPT2(TOKEN_STATUS) VALUES(:TOKEN_STATUS);
NEXT_RECORD;
EXIT WHEN :SYSTEM.LAST_RECORD = 'TRUE';

END LOOP;  
--END IF;
EXCEPTION
  when others then
  message (sqlerrm);
END;

请帮帮我 小脚丫

如果我理解正确的话,它会是这样的(检查代码中的注释):这里的关键似乎是 LOOP.[=13= 中的 BEGIN-EXCEPTION-END 块]

DECLARE 
  TOKEN_NO NUMBER;
  TOKEN_STATUS1 NUMBER;
BEGIN
  GO_BLOCK('TOKEN_REC2');
  FIRST_RECORD; 

  LOOP
    BEGIN
      SELECT SR_NO, TOKEN_STATUS 
        INTO TOKEN_NO, TOKEN_STATUS1 
        FROM LOOPT2 
        WHERE SR_NO = :TOKEN_NO;

      -- if such a :TOKEN_NO exists, that SELECT will return some values
      -- which means that you want to skip it, so - don't do anything
    EXCEPTION
      -- if such a :TOKEN_NO does not exist, SELECT will return
      -- NO_DATA_FOUND which means that you want to perform insert
      WHEN NO_DATA_FOUND THEN
        INSERT INTO LOOPT2 (TOKEN_STATUS) 
          VALUES (:TOKEN_STATUS);
      WHEN TOO_MANY_ROWS THEN
        NULL;
    END;

    EXIT WHEN :SYSTEM.LAST_RECORD = 'TRUE';
    NEXT_RECORD;
  END LOOP;  
END;