ORA-00936: 缺少表达式

Posted

技术标签:

【中文标题】ORA-00936: 缺少表达式【英文标题】:ORA-00936: missing expression 【发布时间】:2012-05-22 13:38:32 【问题描述】:

你能帮我知道我的 sql 中可能出现的错误吗?ORA-00936:我缺少表达式错误,但我找不到错误。

CREATE TYPE T_ordRef AS OBJECT (
   Ordi REF T_Ordinateur
);
CREATE TYPE T_ordRefs AS TABLE OF REF T_ordRef ;

INSERT INTO THE (SELECT INSTALLESUR FROM LOGICIEL WHERE NUMERO='1')
VALUES (T_ORDREFS( T_ORDREF(SELECT REF(v) 
FROM ORDINATEUR v WHERE v.NUMSERIE='1') ));

错误:

Erreur à la ligne de commande : 81, Colonne : 34 Rapport d'erreur : 错误 SQL:ORA-00936:缺少表达式 00936. 00000 - “缺少表达式” *原因: *行动:

【问题讨论】:

您的插入完全错误。你想达到什么目的? 【参考方案1】:

您在创建类型的行之后缺少 /:

CREATE TYPE T_ordRef AS OBJECT ( Ordi REF T_Ordinateur );
/  -- important!

CREATE TYPE T_ordRefs AS TABLE OF REF T_ordRef ;
/  -- important!

此外,您的insert into 完全错误,因为您不允许在为列名保留的部分中进行选择。 不幸的是,我无法纠正它,因为我什至不明白它应该做什么。

【讨论】:

/ 根本没有必要,因为已经有一个;。事实上,使用; / 是错误的,因为/ 执行SQL*Plus 缓冲区中的任何内容。因此,您的示例实际上会运行两次 CREATE TYPE 语句。 谢谢 Daniel Hilgarth 我有表名“ORDINTEUR”这个表有名称列“Leslogiciels”(这台 PC 中的软件),另一个表名 LOGICIEL(软件)有列这个列类型“T_ordRefs " : 我想从表 ORDINTEUR 中添加 REF,其中表 ID "ORDINTEUR" = ID "LOGICIEL" 我希望你明白我想做什么 @a_horse_with_no_name,我相信你错了。在代码对象的情况下,分号是对象定义的一部分,因此不用于执行代码,因此斜杠是必要的。如果您只输入以分号结尾的第一行,SQL*Plus 会不断提示您输入更多内容:SQL> create type my_type as object( x number ); 2 / Type created. @DaveCosta:嗯,看来CREATE TYPE 确实被区别对待了。我没想到它会被视为“程序代码”,因为它是一个常规的“对象”。 CREATE VIEW 肯定会显示我所说的行为。感谢您的澄清。

以上是关于ORA-00936: 缺少表达式的主要内容,如果未能解决你的问题,请参考以下文章

ORA 00936 缺少表达式

ORA-00936: 缺少表达式解决方案 - 转换函数

出现错误 ORA-00936: 缺少表达式

ora:00936 缺少表达式错误

ORA-00936: 缺少表达式 oracle

ORA-00936: 缺少表达式