FOR LOOP 不起作用,因此它不会将数据插入表中

问题描述 投票:0回答:1

好的,所以,这是代码

DECLARE
    v_remessa_id NUMBER;
    v_count NUMBER;
    v_nm_remessa VARCHAR2(50);
BEGIN

    SELECT COUNT(*) + 1 INTO v_count FROM TB_REMESSA;
    v_nm_remessa := 'REMESSA ' || v_count;
 
    INSERT INTO TB_REMESSA (NM_REMESSA, REGISTRO_REMESSA, STATUS, LOCAL_ENTREGA)
    VALUES (v_nm_remessa, SYSDATE, 1, :P3_SELECT_LOCAL_ENTREGA)
    RETURN REMESSA_ID INTO v_remessa_id;

FOR C_ACEITOS IN (
    SELECT
        tbsol.SOLICITACAO_ID,
        NM_SOLICITACAO,
        tpsol.TIPO_SOLICITACAO,
        tprol.PROTOCOLO,
        REGISTRO,
        locrec.LOCAL_RECEBIMENTO
    FROM TB_SOLICITACAO tbsol
    INNER JOIN
        TB_TIPO_SOLICITACAO tpsol ON tbsol.TIPO_SOLICITACAO_ID = tpsol.TIPO_SOLICITACAO_ID
    INNER JOIN
        TB_PROTOCOLO tprol ON tbsol.PROTOCOLO_ID = tprol.PROTOCOLO_ID
    INNER JOIN
        TB_STATUS_SOLICITACAO stsol ON tbsol.STATUS_ID = stsol.STATUS_ID
    INNER JOIN 
        TB_LOCAL_RECEBIMENTO locrec ON tbsol.LOCAL_RECEBIMENTO = locrec.LOCAL_RECEBIMENTO_ID
    WHERE
        stsol.STATUS_ID = 2
    AND
        locrec.LOCAL_RECEBIMENTO = :P3_SELECT_LOCAL_ENTREGA
    ) 
    LOOP

        INSERT INTO TB_SOLICITACAO_REMESSA (SOLICITACAO_ID, REMESSA_ID)
        VALUES (C_ACEITOS.SOLICITACAO_ID, v_remessa_id);

    END LOOP;
END;

问题是,LOOP部分不起作用,它没有插入到表中,我已经尝试了很多东西,但找不到问题

调试它没有给我任何信息。完全没有错误,我找不到。

for-loop plsql oracle-apex
1个回答
0
投票

基本调试 - 这可能非常令人沮丧,但作为开发人员,您必须仔细检查自己编写的内容,并且很容易忽略基本错误。我们无法为您调试此问题,因为我们无权访问您的代码。首先向您的代码添加 APEX_DEBUG 调用。当您在调试中运行页面时可以查看这些内容。

可能的原因是

  • 循环没有任何迭代。
  • 由于某种原因看不到插入的数据

首先验证循环是否有迭代,例如使用如下所示的一些语句。

DECLARE
    v_remessa_id NUMBER;
    v_count NUMBER;
    v_nm_remessa VARCHAR2(50);
BEGIN
    apex_debug.info( p_message => 'Process: Start');
    SELECT COUNT(*) + 1 INTO v_count FROM TB_REMESSA;
    v_nm_remessa := 'REMESSA ' || v_count;
 
    INSERT INTO TB_REMESSA (NM_REMESSA, REGISTRO_REMESSA, STATUS, LOCAL_ENTREGA)
    VALUES (v_nm_remessa, SYSDATE, 1, :P3_SELECT_LOCAL_ENTREGA)
    RETURN REMESSA_ID INTO v_remessa_id;

FOR C_ACEITOS IN (
    SELECT
        tbsol.SOLICITACAO_ID,
        NM_SOLICITACAO,
        tpsol.TIPO_SOLICITACAO,
        tprol.PROTOCOLO,
        REGISTRO,
        locrec.LOCAL_RECEBIMENTO
    FROM TB_SOLICITACAO tbsol
    INNER JOIN
        TB_TIPO_SOLICITACAO tpsol ON tbsol.TIPO_SOLICITACAO_ID = tpsol.TIPO_SOLICITACAO_ID
    INNER JOIN
        TB_PROTOCOLO tprol ON tbsol.PROTOCOLO_ID = tprol.PROTOCOLO_ID
    INNER JOIN
        TB_STATUS_SOLICITACAO stsol ON tbsol.STATUS_ID = stsol.STATUS_ID
    INNER JOIN 
        TB_LOCAL_RECEBIMENTO locrec ON tbsol.LOCAL_RECEBIMENTO = locrec.LOCAL_RECEBIMENTO_ID
    WHERE
        stsol.STATUS_ID = 2
    AND
        locrec.LOCAL_RECEBIMENTO = :P3_SELECT_LOCAL_ENTREGA
    ) 
    LOOP

        apex_debug.info( p_message => 'Process: In Loop');
        INSERT INTO TB_SOLICITACAO_REMESSA (SOLICITACAO_ID, REMESSA_ID)
        VALUES (C_ACEITOS.SOLICITACAO_ID, v_remessa_id);

    END LOOP;
    apex_debug.info( p_message => 'Process: Start');

END;

在调试中运行页面,检查发生了什么,然后继续调试。

© www.soinside.com 2019 - 2024. All rights reserved.