我无法解决这个问题,我只想替换&&& QC_NUM部分,但系统会提示我输入&& QC_NUM_Phase1变量。我认为将子变量与字符串的其余部分相结合会修复它,但是没有。
DECLARE
c INT;
BEGIN
SELECT COUNT(*)
INTO c
FROM user_tables
WHERE table_name = upper('QC_'||&&QC_NUM||'_Phase1');
IF c = 1 THEN
EXECUTE immediate 'drop table QC_'||&&QC_NUM||'_Phase1';
END IF;
END;
/
答案 0 :(得分:0)
我无法在Oracle 11g(SQL Plus或SQL Developer)中复制错误 我确实收到了这些错误:annnoymous block:
错误报告 - ORA-06550:第8行,第7栏: PL / SQL:ORA-00904:“BOB”:标识符无效 ORA-06550:第4行,第3栏: PL / SQL:忽略SQL语句 ORA-06550:第11行,第41栏: PLS-00201:必须声明标识符'BOB' ORA-06550:第11行,第5栏: PL / SQL:语句被忽略 06550. 00000 - “行%s,列%s:\ n%s” *原因:通常是PL / SQL编译错误。
当我用单引号包围你的替换变量时,子代变量不会被解释为标识符,而是字符串。
DECLARE
c INT;
BEGIN
SELECT COUNT(*)
INTO c
FROM user_tables
WHERE table_name = upper('QC_' ||'&&QC_NUM'||'_Phase1');
IF c = 1 THEN
EXECUTE immediate 'drop table QC_'||'&&QC_NUM'||'_Phase1';
END IF;
END;
这可以正常执行。