我在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 编译错误。
ORA-00904 意味着您正在尝试使用不存在的列。
违规行是#37,即
INSERT INTO tbl_dm_stress_detail
而 Oracle 抱怨的列名为
DISTRICT_NAME
。
因此,请仔细检查表
tbl_dm_stress_detail
是否包含它。
如果它看起来好像可以,但您的代码仍然无法工作,则发布表描述 -
DESCRIBE
命令的结果,或从user_tab_columns
中选择该表,或者您可能是GUI的屏幕截图使用,...只是不要说“它存在”。我很想看看。
一些提示: