条件 PL SQL 过程不起作用

Posted

技术标签:

【中文标题】条件 PL SQL 过程不起作用【英文标题】:Conditional PL SQL Procedure not working 【发布时间】:2017-05-11 13:59:44 【问题描述】:

我正在编写一个简单的 PL SQL 过程。但是它抛出了我声明忽略的错误。我是否需要将它们调用到单个变量中,然后插入到最终表中?请检查下面的代码。

  PROCEDURE EMP_MAIN IS BEGIN

FOR CUR1 IN
      (SELECT STG.INT1 INT1
    , STG.OPT1 OPT1
    , STG.FDT1 DT1
        , STG.HDR_SRC_LEAD_ID HDR_LEAD_ID
    , STG.HDR_SRC_NAME HDR_SRC_NAME
    FROM MAIN_EMP STG)

  BEGIN  IF (INT1 IS NOT NULL)
    THEN 
    INSERT INTO EMP_FIN(
                                          ROW_ID
                                        , INT
                                        , OPTION
                                        , DATE
                                        , TYPE                                      
                                        , RATING
                                    )
                 VALUES
                                    (
                                       ROWNUM
                                     , CUR1.INT1
                                     , CUR1.OPT1
                                     , CUR1.DT1
                                     , 'Prospect'
                                     , '1'
                 );
            COMMIT;
            END IF; END EMP_MAIN;

如果我遗漏了什么,请告诉我。

【问题讨论】:

一个提示:首先创建一个更简单的过程,检查CREATE PROCEDURE 的工作原理,然后,当您能够创建一个只执行null; 的过程时,尝试添加一些代码。 您缺少LOOP...END LOOPFOR CUR1 IN (...) LOOP <statements> END LOOP; 【参考方案1】:

这段代码完全错误地解决了这个问题,并使用 Oracle [基于集合的处理引擎] 来实现一次一行/一次缓慢的流程。 我建议改为:

INSERT INTO EMP_FIN (ROW_ID, INT, OPTION
                                        , DATE
                                        , TYPE
                                        , RATING
                                    )
SELECT rownum, STG.INT1 INT1
    , STG.OPT1 OPT1
    , STG.FDT1 DT1
    , STG.HDR_SRC_LEAD_ID HDR_LEAD_ID
    , STG.HDR_SRC_NAME HDR_SRC_NAME
    FROM MAIN_EMP STG
    WHERE INT1 IS NOT NULL;

【讨论】:

以上是关于条件 PL SQL 过程不起作用的主要内容,如果未能解决你的问题,请参考以下文章

我的 PL/SQL 过程异常似乎不起作用

过程中的 PL/SQL 游标不起作用

从存储过程调用时,PL SQL Execute Immediate 不起作用

for循环后的最后一个过程语句在pl sql中不起作用

为啥这个 PL/SQL 不起作用?

PL/SQL 语句的 SQL 查询不起作用