oracle sql替换变量用于表前缀

时间:2014-06-04 12:23:14

标签: sql oracle variables substitution

我无法解决这个问题,我只想替换&&& 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;
/

1 个答案:

答案 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; 

这可以正常执行。