ORACLE SQLPLUS 创建过程语法错误。

yangchengl 2010-03-16 05:43:19
写了个最简单的,仍报错。在网上搜到一些类似的报错,但解决方法对我的不适用

SQL> create or replace procedure insertdmdata_proc as begin end ;/
2 /

警告: 创建的过程带有编译错误。

SQL> show err
PROCEDURE INSERTDMDATA_PROC 出现错误:

LINE/COL ERROR
-------- -----------------------------------------------------------------
1/38 PLS-00103: 出现符号 "END"在需要下列之一时:
begin case declare exit for
goto if loop mod null pragma raise return select update while
with <an identifier> <a double-quoted delimited-identifier>
<a bind variable> << close current delete fetch lock insert
open rollback savepoint set sql execute commit forall merge
<a single-quoted SQL string> pipe

SQL>
...全文
107 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
yangchengl 2010-03-17
  • 打赏
  • 举报
回复
对。我是用powerdesigner生成Sql语句的,实际上可以经过设置,改为对大小写不敏感,这样就不会加引号了。
下面这个问题如何解释呢?
SQL> desc tab_dm_qqdmzhtc_full;
名称 是否为空? 类型
----------------------------------------- -------- ----------------------------

QZH NUMBER(38)
WATCHDATETIME DATE
TEMPERATURE FLOAT(5)
DEWPOINT NUMBER(5)
DMOTH VARCHAR2(64)
CBHH NUMBER(4)
LAT FLOAT(8)
JINGDU FLOAT(8)
CBOTH VARCHAR2(64)

SQL> CREATE OR REPLACE PROCEDURE InsertDMdata_Proc(maxnum IN NUMBER) AS
2 BEGIN
3 FOR i IN 1..maxnum LOOP
4 insert into TAB_DM_QQDMZHTC_FULL (QZH,WatchDateTime,Temperature,DewPoint,DM
OTH,CBHH,LONGTITUDE,Lat,CBOTH)
5 Values(mod(i,255), to_date('2009-01-01 01:00:00','yyyy-mm-dd hh:mi:ss',dbms
_random.value(-50,50),
6 dbms_random.value(-1,15),dbms_random.STRING('A',20),25,
7 dbms_random.value(-90,90),dbms_random.value(-180,180),'abc'
8 );
9 END LOOP;
10 COMMIT;
11 END Insertdmdata_proc;
12 /

警告: 创建的过程带有编译错误。

SQL> show err;
PROCEDURE INSERTDMDATA_PROC 出现错误:

LINE/COL ERROR
-------- -----------------------------------------------------------------
4/1 PL/SQL: SQL Statement ignored
8/2 PL/SQL: ORA-00917: 缺少逗号
inthirties 2010-03-17
  • 打赏
  • 举报
回复
见表时估计Jingdu加了""

把sql里的字段jingdu 改成 Jingdu 区分大小写
yangchengl 2010-03-17
  • 打赏
  • 举报
回复
大家说的对。
我执行以下语句,又出错了,这个才是原本的问题,帮我看看,那个jingdu也不是关键字啊
SQL> insert into tab_dm_qqdmzhtc_full (qzh,watchdatetime,temperatrue,dewpoint,dm
oth,cbhh,lat,jingdu,cboth) values(5,to_date('2009-01-01 01:00:00','yyyy-mm-dd hh
:mi:ss'),45,10,'aaa',23,45,46,'aaa');
insert into tab_dm_qqdmzhtc_full (qzh,watchdatetime,temperatrue,dewpoint,dmoth,c
bhh,lat,jingdu,cboth) values(5,to_date('2009-01-01 01:00:00','yyyy-mm-dd hh:mi:s
s'),45,10,'aaa',23,45,46,'aaa')

*
ERROR 位于第 1 行:
ORA-00904: "JINGDU": 无效的标识符


SQL> desc tab_dm_qqdmzhtc_full;
名称 是否为空? 类型
----------------------------------------- -------- ----------------------------

QZH NUMBER(38)
WatchDateTime DATE
Tempeterature FLOAT(5)
DewPoint NUMBER(5)
DMOTH VARCHAR2(64)
CBHH NUMBER(4)
Lat FLOAT(8)
Jingdu FLOAT(8)
CBOTH VARCHAR2(64)
huangyunzeng2008 2010-03-17
  • 打赏
  • 举报
回复
对,begin 和end之间必须有内容,如果什么都不做,也得写null
ojuju10 2010-03-16
  • 打赏
  • 举报
回复
过程体需要有内容

SQL> create or replace procedure insertdmdata_proc as begin .... end ;
Adebayor 2010-03-16
  • 打赏
  • 举报
回复
begin end之间必须要有内容的
加句null;
Phoenix_99 2010-03-16
  • 打赏
  • 举报
回复
create or replace procedure insertdmdata_proc as begin end ;/
斜线不要和语句在一行上

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧