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: 缺少表达式的主要内容,如果未能解决你的问题,请参考以下文章