【问题标题】:inserting data select into with loop in plsql在plsql中使用循环插入数据选择
【发布时间】:2019-12-27 18:49:25
【问题描述】:

我只想将表单详细列数据从详细信息块输入到数据库列中,并且当我输入数据数据保存在其他表中但在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;

请帮帮我 请小脚丫

【问题讨论】:

    标签: oracle plsql oracleforms


    【解决方案1】:

    如果我理解正确,它会是这样的(检查代码中的 cmets):这里的关键似乎是 LOOP 中的 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;
    

    【讨论】:

    • 非常感谢,但这会抛出异常 frm-40735 ora-01422 的错误,我只想将表中的 token_status 列设置为详细块,它也是:token_status 列,用于所有 agt token_No 从这里刚刚进入表中的是 loopt2 列中的 token_status ,其中 token_no 已经有,所以 Token_status 只需比较 To Token_No 并将 Token 状态从 :Token_Status 放入表中
    • ORA-01442 表示 TOO_MANY_ROWS,这意味着该表中已存在相同 TOKEN_NO 的一些重复项。如果你没问题,那么就处理它(如我的示例所示 - 请参阅第二个 WHEN 异常)。如果不是,请先从表中删除重复项。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-26
    • 1970-01-01
    • 2011-10-31
    • 2014-08-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多