在oracle中 缺失关键字,缺失关键字解决方案

缺失关键字

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

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,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值