if else里面不能有CREATE TABLE

rsd*_*rsd 4 sql oracle

当我运行此查询时

DECLARE
      num NUMBER;
BEGIN

    SELECT COUNT(*) INTO num FROM user_all_tables WHERE TABLE_NAME=upper('DatabaseScriptLog')
    ;

    IF num < 1 THEN

      CREATE TABLE DatabaseScriptLog 
      (ScriptIdentifier VARCHAR(100) NOT NULL,
       ScriptType VARCHAR(50), 
       StartDate TIMESTAMP, 
       EndDate TIMESTAMP, 
       PRIMARY KEY (ScriptIdentifier)
       );

    END IF;

END;
Run Code Online (Sandbox Code Playgroud)

执行上述操作时,我得到以下信息:

PLS-00103:遇到以下其中一项时遇到符号"CREATE":

如果循环mod为空pragma raise返回选择更新,则使用<< close current delete delete fetch lock insert open rollback
savepoint set sql execute commit forall merge pipe 06550. 00000 - "line%s,column%s:\n %s"*原因:通常是PL/SQL编译错误.

Thi*_*ilo 10

您不能运行这样的DDL语句.您需要使用动态SQL(EXECUTE IMMEDIATE).

IF num < 1 THEN

  EXECUTE IMMEDIATE 'CREATE TABLE DatabaseScriptLog (ScriptIdentifier VARCHAR(100) NOT NULL, ScriptType VARCHAR(50), StartDate TIMESTAMP, EndDate TIMESTAMP, PRIMARY KEY (ScriptIdentifier))'

END IF;
Run Code Online (Sandbox Code Playgroud)