标题:出现格式不正确的SQL92串
只看楼主
liugy52
Rank: 1
等 级:新手上路
帖 子:89
专家分:0
注 册:2006-10-1
 问题点数:0 回复次数:6 
出现格式不正确的SQL92串

在Oracle 10g中创建下面的存储函数balance:

CREATE OR REPLACE FUNCTION balance(acct_id NUMBER) RETURN NUMBER IS
acct_bal NUMBER;
BEGIN
SELECT bal INTO acct_bal FROM accts
WHERE acct_no = acct_id;
RETURN acct_bal;
END;
/


然后创建CalculateBalance类来调用存储函数balance:

/*
* @(#) CalculateBalance.java
*/


import java.sql.*;

import oracle.jdbc.*;
import oracle.jdbc.pool.*;


public class CalculateBalance {

public static void main(String[] args) throws SQLException {
OracleDataSource ods = new OracleDataSource();
String url = "jdbc:oracle:thin:@taurus:1521/oracle.mybizinfo.com";
ods.setURL(url);
ods.setUser("scott");
ods.setPassword("tiger");
Connection conn = ods.getConnection();

try {
CallableStatement cstmt = conn.prepareCall(
"{ ? = CALL balance(?) }");
cstmt.registerOutParameter(1, Types.FLOAT);
cstmt.setInt(2, 115);
cstmt.executeUpdate();
float acctBal = cstmt.getFloat(1);
System.out.println("acct_id = 115, bal = " + acctBal);
cstmt.close();
conn.close();
}
catch (SQLException e) {
System.err.println(e.getMessage());
}

System.exit(0);
}
}


运行结果为:出现格式不正确的 SQL92 串: 6. Expecting "call"
我不清楚是什么地方出错误了?该怎么改正?


附:表accts
ACCT_NO BAL
---------- ----------
115 10000
116 20000
129 15000

搜索更多相关主题的帖子: SQL 格式 
2006-12-06 09:29
angeloc
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:36
帖 子:1353
专家分:0
注 册:2006-11-21
得分:0 
? = CALL balance(?)这个是什么意思?

老牛明知夕阳晚,不用扬鞭自奋蹄; Angelo\'s BLOG
2006-12-06 11:15
liugy52
Rank: 1
等 级:新手上路
帖 子:89
专家分:0
注 册:2006-10-1
得分:0 
{? = CALL balance(?)} // 我的理解:问号是变量占位符,用来在以后填入实际的变量名称。

CallableStatement cstmt = conn.prepareCall("{ ? = CALL balance(?) }");
。。。
cstmt.setInt(2, 115); // 用115代替第2个问号
。。。
float acctBal = cstmt.getFloat(1); // 用acctBal代替第1个问号

相当于SQL*Plus里的 call balance(:acct_no) into :acctBal;


根据提示信息 :出现格式不正确的 SQL92 串: 6. Expecting "call"

我把上面大写的CALL改成call,然后就正确了。

平时我CALL都用大写,这里却要小写的 !!!

我在大家热情的帮助下进步,谢谢你们!
2006-12-06 14:46
angeloc
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:36
帖 子:1353
专家分:0
注 册:2006-11-21
得分:0 

{? = CALL balance(?)} 这里的第一个问号做什么的?你确定这样的语法没问题?
你的意思是想要返回值么?


老牛明知夕阳晚,不用扬鞭自奋蹄; Angelo\'s BLOG
2006-12-06 15:32
liugy52
Rank: 1
等 级:新手上路
帖 子:89
专家分:0
注 册:2006-10-1
得分:0 

{acctBal = call balance(acct_no)}
语法正确,就是将存储函数的返回值存入变量acctBal。

我把{? = CALL balance(?)} 改成 {? = call balance(?)} 后就完全正确了。

开始没有想到是call大写会导致错误


我在大家热情的帮助下进步,谢谢你们!
2006-12-06 15:40
angeloc
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:36
帖 子:1353
专家分:0
注 册:2006-11-21
得分:0 
没问题了就好,得多注意大小写和中文字符问题

老牛明知夕阳晚,不用扬鞭自奋蹄; Angelo\'s BLOG
2006-12-06 15:43
食恶不色
Rank: 2
等 级:新手上路
威 望:3
帖 子:632
专家分:5
注 册:2006-11-8
得分:0 

写JAVA程式要注意大小写


做人要厚道,看帖要回帖!回帖是尊重,回帖是美德! 美德要发扬,我们要顶帖!顶帖是好事,千万莫灌水!
2007-01-08 17:38



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-107539-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.051730 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved