ORA-00984: 此处不允许列

Alb*_*gía 2 oracle oracle-10g

我正在运行 Oracle 10g。我正在编写将在 SQL*Plus 中执行的脚本(基于创建的数据库的增量脚本)。需要修复一个错误。

我需要知道表中是否存在一行,如果不存在,则插入它。所以我开始:

BEGIN
    DECLARE
        COL_EXIST NUMBER(10);
    BEGIN
        -- Reset ET_SEVERITY_LEVEL
        UPDATE ET_SEVERITY_LEVEL 
        SET ID_SEVERITY_LEVEL = 5
        WHERE CODE='FATAL';

        UPDATE ET_SEVERITY_LEVEL 
        SET ID_SEVERITY_LEVEL = 4
        WHERE CODE='ERROR';

        UPDATE ET_SEVERITY_LEVEL 
        SET ID_SEVERITY_LEVEL = 3
        WHERE CODE='WARNING';

        UPDATE ET_SEVERITY_LEVEL 
        SET ID_SEVERITY_LEVEL = 2
        WHERE CODE='INFO';

        -- Insert ET_SEVERITY_LEVEL register DEBUG
        SELECT COUNT(*) INTO COL_EXIST
        FROM ET_SEVERITY_LEVEL
        WHERE CODE like 'DEBUG';

        IF COL_EXIST = 0 THEN
            EXECUTE IMMEDIATE 'INSERT INTO ET_SEVERITY_LEVEL(ID_SEVERITY_LEVEL, CODE, DESCRIPTION) VALUES (1, "DEBUG", "Debugging")';   
        END IF;
    END;
END;
/
Run Code Online (Sandbox Code Playgroud)

但我收到以下错误:

ORA-00984: column not allowed here
ORA-06512: in line 30
00984. 00000 -  "column not allowed here"
*Cause:    
*Action:
Run Code Online (Sandbox Code Playgroud)

我怎么能这样做?有没有办法写一个脚本同时查询表和DML?

Phi*_*lᵀᴹ 6

您需要在EXECUTE IMMEDIATE语句中使用转义单引号,如下所示:

EXECUTE IMMEDIATE 'INSERT INTO ET_SEVERITY_LEVEL(ID_SEVERITY_LEVEL, CODE, DESCRIPTION) VALUES (1, ''DEBUG'', ''Debugging'')';   
Run Code Online (Sandbox Code Playgroud)