0
如何使用DDL语句跟踪PL/SQL块?如何使用DDL语句跟踪PL/SQL块
我试图做这样的事情:
DECLARE TRESULT INTEGER;
BEGIN
SELECT COUNT(1) INTO TRESULT
FROM USER_INDEXES
WHERE INDEX_NAME='IX_SalesmanID';
IF TRESULT > 0 THEN
EXECUTE IMMEDIATE 'DROP INDEX IX_SalesmanID';
END IF;
END;
CREATE INDEX IX_SalesmanID ON Salesmen(SalesmanID);
但我得到一个错误信息:
Error report:
ORA-06550: line 15, column 1:
PLS-00103: Encountered the symbol "CREATE"
06550. 00000 - "line %s, column %s:\n%s"
*Cause: Usually a PL/SQL compilation error.
我应该是块之外,虽然,对不对?
这是一个非常简化的版本,实际的脚本会检查是否存在很多事物,并删除,重新创建并反复更改许多对象及其许多属性。把它们全部放入动态SQL字符串中并使用EXECUTE IMMEDIATE看起来好像过度杀毒。
我在做一些简单的错误尝试关闭上面的例子中的块吗?
感谢您的任何帮助。
把一个 '/'(斜杠符号)之后 “END;” – MaxU
就像需要思考的东西一样,除非您正在进行迁移,否则在Oracle中反复删除和重新创建对象对于生产环境来说不是一个好习惯,并且可能表明您正在尝试解决的问题尚未完全想到。 – kevinsky
任何时候当你发现自己想要在pl/sql块中执行DDL时,都应该从键盘上推回去,去喝一杯咖啡,然后重新思考你在做什么。我永远不会说,但这是一个巨大的红旗,你正在采取错误的做法。这当然是其中的一种情况。 – EdStevens