欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

缺失关键字解决方案

更新时间: 2014-01-05 02:13:38 责任编辑: Author_N1

 

缺失关键字
下面是我写的一个存储过程,编译的时候没有出错,但是一执行的时候就报缺失关键字的错误,请各位大侠帮忙看一下是怎么个情况吧,谢谢了。

CREATE OR REPLACE PROCEDURE proc_test(table_name IN VARCHAR2,cjsj IN DATE,zryl IN NUMBER,jkgd IN NUMBER,zqwd IN NUMBER,zqsd IN NUMBER)AS
  lzryl NUMBER(10);
  ljkgd NUMBER(10);
  lzqwd NUMBER(10);
  lzqsd NUMBER(10);
  BTime VARCHAR2(20);
  ETime VARCHAR2(20);
  sqlstr VARCHAR2(1000);
  sqlAll VARCHAR2(1000);
BEGIN
  BTime:=To_Char(Trunc(SYSDATE,'HH24'),'YYYY-MM-DD HH24:MI:SS');
  ETime:=To_Char(Trunc(SYSDATE+1/24,'HH24'),'YYYY-MM-DD HH24:MI:SS');

  sqlstr:='SELECT Nvl(Avg(zryl),'||To_Char(zryl)||'),Nvl(Avg(jkgd),'||To_Char(jkgd)||'),Nvl(Avg(zqwd),'||To_Char(zqwd)||'),Nvl(Avg(zqsd),'||To_Char(zqsd)||
           ') INTO lzryl,ljkgd,lzqwd,lzqsd FROM '||table_name||' WHERE cjsj BETWEEN To_Date('''||BTime||''',''YYYY-MM-DD HH24:MI:SS'') AND To_Date('''||ETime
           ||''',''YYYY-MM-DD HH24:MI:SS'')';
           dbms_output.put_line(sqlstr);

  EXECUTE IMMEDIATE sqlstr;
END;
/
EXECUTE proc_test('testwell_H',SYSDATE,0,0,0,0)


出错信息:
ORA-00905: 缺失关键字
ORA-06512: 在 "JKZQGD.PROC_TEST", line 22
ORA-06512: 在 line 2

--参考方法--
...


--你写的
sqlstr;=select col1,col2,col3 into var1,var2,var3 from table
EXECUTE IMMEDIATE sqlstr;
--修改为
sqlstr;=select col1,col2,col3 from table
EXECUTE IMMEDIATE sqlstr into var1,var2,var3;

--参考方法--
引用:
下面是我写的一个存储过程,编译的时候没有出错,但是一执行的时候就报缺失关键字的错误,请各位大侠帮忙看一下是怎么个情况吧,谢谢了。

CREATE OR REPLACE PROCEDURE proc_test(table_name IN VARCHAR2,cjsj IN DATE,zryl IN NUMBER,jkgd IN NUMBER,zqwd IN NUMBER,zqsd IN NUMBER)AS
  lzryl NUMBER(10);
  ljkgd NUMBER(10);
  lzqwd NUMBER(10);
  lzqsd NUMBER(10);
  BTime VARCHAR2(20);
  ETime VARCHAR2(20);
  sqlstr VARCHAR2(1000);
  sqlAll VARCHAR2(1000);
BEGIN
  BTime:=To_Char(Trunc(SYSDATE,'HH24'),'YYYY-MM-DD HH24:MI:SS');
  ETime:=To_Char(Trunc(SYSDATE+1/24,'HH24'),'YYYY-MM-DD HH24:MI:SS');

  sqlstr:='SELECT Nvl(Avg(zryl),'
--参考方法--
To_Char(zryl)
--参考方法--
'),Nvl(Avg(jkgd),'
--参考方法--
To_Char(jkgd)
--参考方法--
'),Nvl(Avg(zqwd),'
--参考方法--
To_Char(zqwd)
--参考方法--
'),Nvl(Avg(zqsd),'
--参考方法--
To_Char(zqsd)
--参考方法--

           ') INTO lzryl,ljkgd,lzqwd,lzqsd FROM '
--参考方法--
table_name
--参考方法--
' WHERE cjsj BETWEEN To_Date('''
--参考方法--
BTime
--参考方法--
''',''YYYY-MM-DD HH24:MI:SS'') AND To_Date('''
--参考方法--
ETime
           
--参考方法--
''',''YYYY-MM-DD HH24:MI:SS'')';
           dbms_output.put_line(sqlstr);

  EXECUTE IMMEDIATE sqlstr;
END;
/
EXECUTE proc_test('testwell_H',SYSDATE,0,0,0,0)


出错信息:
ORA-00905: 缺失关键字
ORA-06512: 在 "JKZQGD.PROC_TEST", line 22
ORA-06512: 在 line 2

错误有点多:
1.动态SQL不能用into
2.你的SQL拼接也有错,帮你改了一下能够实现你想的功能,你需要仔细看看(特别注意动态SQL是怎么改的):

CREATE OR REPLACE PROCEDURE test(table_name IN VARCHAR2,
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 02:13:38
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/7195/
本文WWW.DOC100.NET DOC100.NET版权所有。