Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle SQL“;立即执行;ORA-00922/06512创建表格_Sql_Oracle_Execute Immediate - Fatal编程技术网

Oracle SQL“;立即执行;ORA-00922/06512创建表格

Oracle SQL“;立即执行;ORA-00922/06512创建表格,sql,oracle,execute-immediate,Sql,Oracle,Execute Immediate,我搜索了很多,很多人都遇到了类似的问题,但似乎没有找到匹配的 这没有问题: create table CUSTOM_WORKFLOW_ID_COUNTER ( id_ NUMBER (19) GENERATED by default on null as IDENTITY, type_ VARCHAR2(50 CHAR), masterId_ VARCHAR2(100 CHAR), counter_ NUMBER (19), primary key (id

我搜索了很多,很多人都遇到了类似的问题,但似乎没有找到匹配的

这没有问题:

create table CUSTOM_WORKFLOW_ID_COUNTER (
    id_ NUMBER (19) GENERATED by default on null as IDENTITY,
    type_ VARCHAR2(50 CHAR),
    masterId_ VARCHAR2(100 CHAR),
    counter_ NUMBER (19),
    primary key (id_)
    );
由于Oracle不支持“如果存在删除表”,我必须检查该表是否以其他方式存在:

  DECLARE cnt NUMBER;
  BEGIN
   SELECT COUNT(*) INTO cnt FROM user_tables WHERE table_name ='CUSTOM_WORKFLOW_ID_COUNTER';
   IF cnt <> 0 THEN
     EXECUTE IMMEDIATE 'DROP TABLE CUSTOM_WORKFLOW_ID_COUNTER';              
   END IF;       
 END;
申报cnt编号;
开始
从用户表格中选择COUNT(*),其中表格名称为“自定义”工作流ID为“计数器”;
如果cnt为0,则
立即执行“DROP TABLE CUSTOM_WORKFLOW_ID_COUNTER”;
如果结束;
结束;
这两种方法都很有魅力,但如果我尝试在一条SQL语句中同时执行这两种方法:

  DECLARE cnt NUMBER;
  BEGIN
  SELECT COUNT(*) INTO cnt FROM user_tables WHERE table_name = 'CUSTOM_WORKFLOW_ID_COUNTER';
    IF cnt <> 0 THEN
      EXECUTE IMMEDIATE 'DROP TABLE CUSTOM_WORKFLOW_ID_COUNTER';              
    END IF;       
  END;
 create table CUSTOM_WORKFLOW_ID_COUNTER (
    id_ NUMBER (19) GENERATED by default on null as IDENTITY,
    type_ VARCHAR2(50 CHAR),
    masterId_ VARCHAR2(100 CHAR),
    counter_ NUMBER (19),
    primary key (id_)
    );
申报cnt编号;
开始
从user_tables中选择COUNT(*),其中table_name='CUSTOM_WORKFLOW_ID_COUNTER';
如果cnt为0,则
立即执行“DROP TABLE CUSTOM_WORKFLOW_ID_COUNTER”;
如果结束;
结束;
创建表自定义\u工作流\u ID\u计数器(
默认情况下,以null作为标识生成的id_uuu编号(19),
类型uuvarchar2(50个字符),
masterId_uuvarchar2(100字符),
计数器编号(19),
主键(id_389;)
);
我得到:

ORA-06550:Zeile 9,Spalte 1: PLS-00103:Fand das符号“创建” 655000000-“行%s,列%s:\n%s” *原因:通常是PL/SQL编译错误

如果尝试在块内执行create语句,则会出现另一个错误:

  DECLARE cnt NUMBER;
  BEGIN
   SELECT COUNT(*) INTO cnt FROM user_tables WHERE table_name = 'CUSTOM_WORKFLOW_ID_COUNTER';
  IF cnt <> 0 THEN
   EXECUTE IMMEDIATE 'DROP TABLE CUSTOM_WORKFLOW_ID_COUNTER';
   EXECUTE IMMEDIATE 'create table CUSTOM_WORKFLOW_ID_COUNTER (
    id_ NUMBER (19) GENERATED by default on null as IDENTITY,
    type_ VARCHAR2(50 CHAR),
    masterId_ VARCHAR2(100 CHAR),
    counter_ NUMBER (19),
    primary key (id_)
    );';
 ELSE
    EXECUTE IMMEDIATE 'create table CUSTOM_WORKFLOW_ID_COUNTER (
    id_ NUMBER (19) GENERATED by default on null as IDENTITY,
    type_ VARCHAR2(50 CHAR),
    masterId_ VARCHAR2(100 CHAR),
    counter_ NUMBER (19),
    primary key (id_)
    );';      
  END IF;
END;
申报cnt编号;
开始
从user_tables中选择COUNT(*),其中table_name='CUSTOM_WORKFLOW_ID_COUNTER';
如果cnt为0,则
立即执行“DROP TABLE CUSTOM_WORKFLOW_ID_COUNTER”;
执行立即“创建表自定义\u工作流\u ID\u计数器”(
默认情况下,以null作为标识生成的id_uuu编号(19),
类型uuvarchar2(50个字符),
masterId_uuvarchar2(100字符),
计数器编号(19),
主键(id_389;)
);';
其他的
执行立即“创建表自定义\u工作流\u ID\u计数器”(
默认情况下,以null作为标识生成的id_uuu编号(19),
类型uuvarchar2(50个字符),
masterId_uuvarchar2(100字符),
计数器编号(19),
主键(id_389;)
);';      
如果结束;
结束;
我得到这个错误:

ORA-00922:Fehlende oder ungültige选项 ORA-06512:在Zeile 18 92200000-“缺少或无效选项”

我做错了什么

编辑: 删除分号后:

  DECLARE cnt NUMBER;
  BEGIN
   SELECT COUNT(*) INTO cnt FROM user_tables WHERE table_name = 'CUSTOM_WORKFLOW_ID_COUNTER';
 IF cnt <> 0 THEN
  EXECUTE IMMEDIATE 'DROP TABLE CUSTOM_WORKFLOW_ID_COUNTER';
  EXECUTE IMMEDIATE 'create table CUSTOM_WORKFLOW_ID_COUNTER (
id_ NUMBER (19) GENERATED by default on null as IDENTITY,
type_ VARCHAR2(50 CHAR),
masterId_ VARCHAR2(100 CHAR),
counter_ NUMBER (19),
primary key (id_)
)';
ELSE
EXECUTE IMMEDIATE 'create table CUSTOM_WORKFLOW_ID_COUNTER (
id_ NUMBER (19) GENERATED by default on null as IDENTITY,
type_ VARCHAR2(50 CHAR),
masterId_ VARCHAR2(100 CHAR),
counter_ NUMBER (19),
primary key (id_)
)';      
 END IF;
END;
申报cnt编号;
开始
从user_tables中选择COUNT(*),其中table_name='CUSTOM_WORKFLOW_ID_COUNTER';
如果cnt为0,则
立即执行“DROP TABLE CUSTOM_WORKFLOW_ID_COUNTER”;
执行立即“创建表自定义\u工作流\u ID\u计数器”(
默认情况下,以null作为标识生成的id_uuu编号(19),
类型uuvarchar2(50个字符),
masterId_uuvarchar2(100字符),
计数器编号(19),
主键(id_389;)
)';
其他的
执行立即“创建表自定义\u工作流\u ID\u计数器”(
默认情况下,以null作为标识生成的id_uuu编号(19),
类型uuvarchar2(50个字符),
masterId_uuvarchar2(100字符),
计数器编号(19),
主键(id_389;)
)';      
如果结束;
结束;
我又犯了一个错误;)

ORA-00054:RESOURCE belegt和ANOFORDERUNG mit NOWAIT angegeben OR Timeout abgelaufen ORA-06512:在Zeile 5中 5400000-“资源繁忙,并在指定NOWAIT或超时过期的情况下获取” *原因:感兴趣的资源正忙。 *措施:必要时重试或增加超时


但这似乎是另一个问题。

只需删除create表末尾的分号:

  DECLARE cnt NUMBER;
  BEGIN
   SELECT COUNT(*) INTO cnt FROM user_tables WHERE table_name = 'CUSTOM_WORKFLOW_ID_COUNTER';
  IF cnt <> 0 THEN
   EXECUTE IMMEDIATE 'DROP TABLE CUSTOM_WORKFLOW_ID_COUNTER';
   EXECUTE IMMEDIATE 'create table CUSTOM_WORKFLOW_ID_COUNTER (
    id_ NUMBER (19) GENERATED by default on null as IDENTITY,
    type_ VARCHAR2(50 CHAR),
    masterId_ VARCHAR2(100 CHAR),
    counter_ NUMBER (19),
    primary key (id_)
    )';
 ELSE
    EXECUTE IMMEDIATE 'create table CUSTOM_WORKFLOW_ID_COUNTER (
    id_ NUMBER (19) GENERATED by default on null as IDENTITY,
    type_ VARCHAR2(50 CHAR),
    masterId_ VARCHAR2(100 CHAR),
    counter_ NUMBER (19),
    primary key (id_)
    )';      
  END IF;
END;
申报cnt编号;
开始
从user_tables中选择COUNT(*),其中table_name='CUSTOM_WORKFLOW_ID_COUNTER';
如果cnt为0,则
立即执行“DROP TABLE CUSTOM_WORKFLOW_ID_COUNTER”;
执行立即“创建表自定义\u工作流\u ID\u计数器”(
默认情况下,以null作为标识生成的id_uuu编号(19),
类型uuvarchar2(50个字符),
masterId_uuvarchar2(100字符),
计数器编号(19),
主键(id_389;)
)';
其他的
执行立即“创建表自定义\u工作流\u ID\u计数器”(
默认情况下,以null作为标识生成的id_uuu编号(19),
类型uuvarchar2(50个字符),
masterId_uuvarchar2(100字符),
计数器编号(19),
主键(id_389;)
)';      
如果结束;
结束;

问题是由黄色分号引起的(第12行和第20行):

)


谢谢你的提示。但是在删除它们之后,我得到了另一个错误;)ORA-00054:RESOURCE belegt和ANFORDURUNG mit NOWAIT ANGEBEN ORD超时abgelaufen ORA-06512:in Zeile 5 00054。00000-“资源正忙,并在指定NOWAIT或超时过期的情况下获取”*原因:感兴趣的资源正忙*操作:如有必要,请重试或增加超时。这是因为您的表上可能有一个正在运行的事务,您无法删除该表,因为它已被其他正在对其执行DML的人锁定。感谢您的提示。
EXECUTE IMMEDIATE 'create table CUSTOM_WORKFLOW_ID_COUNTER (
id_ NUMBER (19) GENERATED by default on null as IDENTITY,
type_ VARCHAR2(50 CHAR),
masterId_ VARCHAR2(100 CHAR),
counter_ NUMBER (19),
primary key (id_)
)