我正在运行 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?
您需要在EXECUTE IMMEDIATE
语句中使用转义单引号,如下所示:
EXECUTE IMMEDIATE 'INSERT INTO ET_SEVERITY_LEVEL(ID_SEVERITY_LEVEL, CODE, DESCRIPTION) VALUES (1, ''DEBUG'', ''Debugging'')';
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
9597 次 |
最近记录: |