如何使用DDL语句跟踪PL/SQL块

Ron*_*ble 0 oracle plsql

如何使用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);
Run Code Online (Sandbox Code Playgroud)

但是我收到一条错误消息:

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.
Run Code Online (Sandbox Code Playgroud)

不过,我应该在街区之外,对吗?

这是一个非常简化的版本,实际的脚本将检查是否存在许多内容,并删除,重新创建并重复更改许多对象及其许多属性.将它们全部放在动态SQL字符串中并使用EXECUTE IMMEDIATE似乎有点矫枉过正.

在上面的示例中尝试关闭块时,我做了一些简单的错误吗?

谢谢你的帮助.

MT0*_*MT0 5

A ;终止PL/SQL语句并/终止SQL范围中的PL/SQL块:

DECLARE
  TRESULT INTEGER;
BEGIN
  SELECT COUNT(1)
  INTO   TRESULT
  FROM   USER_INDEXES
  WHERE  INDEX_NAME='IX_SALESMANID'; -- All UPPERCASE

  IF TRESULT > 0 THEN
    EXECUTE IMMEDIATE 'DROP INDEX IX_SalesmanID';
  END IF;
END;
/

CREATE INDEX IX_SalesmanID ON Salesmen(SalesmanID);
Run Code Online (Sandbox Code Playgroud)