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_)
)