命令中从第 311 行开始的错误 - Oracle sql 中的 DECLARE

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

我在Oracle中编码,当我遇到Declare和语法问题时,但我不知道它在哪里

命令中从第 311 行开始出错 -

DECLARE
    v_commune_id NUMBER;
    v_district_id NUMBER;
BEGIN
    FOR stress IN (SELECT * FROM tbl_dm_stress) LOOP
        BEGIN
            -- Xác ??nh ID c?a District
            BEGIN
                SELECT ID INTO v_district_id
                FROM tbl_dm_district
                WHERE NAME = stress.DISTRICTS;
            EXCEPTION
                WHEN NO_DATA_FOUND THEN
                    INSERT INTO tbl_dm_district (NAME, ACTIVE)
                    VALUES (stress.DISTRICTS, 1)
                    RETURNING ID INTO v_district_id;
            END;
        END;

        BEGIN
            -- Xác ??nh ID c?a Commune v?i ?i?u ki?n theo tên District
            BEGIN
                SELECT ID INTO v_commune_id
                FROM tbl_dm_commune
                WHERE NAME = stress.COMMUNES
                AND ID_DISTRICT = v_district_id;
            EXCEPTION
                WHEN NO_DATA_FOUND THEN
                    INSERT INTO tbl_dm_commune (NAME, ACTIVE, ID_DISTRICT, ID_PROVINCE, CODE_COMMUNE_WEB)
                    VALUES (stress.COMMUNES, 1, v_district_id, NULL, NULL)
                    RETURNING ID INTO v_commune_id;
            END;
        END;

        -- Insert vào b?ng tbl_dm_stress_detail
        INSERT INTO tbl_dm_stress_detail (
            STRESS_ID, STRESS_NAME, COMMUNE_ID, COMMUNE_NAME, DISTRICT_ID, DISTRICT_NAME,
            ACTIVE, CREATE_DATE, CREATE_BY, LAST_UPDATE_DATE, LAST_UPDATE_BY
        )
        VALUES (
            stress.ID, stress.STRESS_NAME, v_commune_id, stress.COMMUNES, v_district_id, stress.DISTRICTS,
            1, SYSDATE, stress.CREATE_BY, SYSDATE, stress.LAST_UPDATE_BY
        );
    END LOOP;
END;

我尝试运行代码,但出现此异常

命令中从第 311 行开始出错 -
声明
v_commune_id NUMBER;
v_district_id NUMBER;

错误报告
ORA-06550: 第 37 行,第 76 列:
PL/SQL:ORA-00904:“DISTRICT_NAME”:无效标识符
ORA-06550: 第 36 行,第 9 列:
PL/SQL:忽略 SQL 语句
06550. 00000 - “第 %s 行,第 %s 列: %s”
*原因:通常是 PL/SQL 编译错误。

sql oracle
1个回答
0
投票

ORA-00904 意味着您正在尝试使用不存在的列。

违规行是#37,即

INSERT INTO tbl_dm_stress_detail

而 Oracle 抱怨的列名为

DISTRICT_NAME

因此,请仔细检查表

tbl_dm_stress_detail
是否包含它。

如果它看起来好像可以,但您的代码仍然无法工作,则发布表描述 -

DESCRIBE
命令的结果,或从
user_tab_columns
中选择该表,或者您可能是GUI的屏幕截图使用,...只是不要说“它存在”。我很想看看。

一些提示:

  • 您在创建表时是否拼错了它的名称?
  • 您是否将列名称括在双引号中,但没有使用大写字母作为该列名称?
© www.soinside.com 2019 - 2024. All rights reserved.