Oracle中的存储过程 create or replace procedure card1_pro
(
name in varchar2,--姓名
password in varchar2, --密码
balance in number,--余额
isUse in number,--是否使用
Id in number--卡的编号
)is
--定义部分
v_sql varchar2(1000);
begin
--执行部分
v_sql:='Update Card set name='||name||',password='||password||',balance='||balance||',
isUse='||isUse||' where Id='||Id;
--执行sql,并把返回的值
execute immediate v_sql;
end;
/ 在java代码中
cs=con.prepareCall("{call card1_pro(?,?,?,?,?)}");
//赋值
cs.setString(1,"黄杰");
cs.setString(2,"125");
cs.setInt(3,123);
cs.setInt(4,1);
cs.setInt(5,1020);
//执行
cs.execute();
System.out.print("执行成功!");有错....错误是:
java.sql.SQLException: ORA-00904: "黄杰": 标识符无效
ORA-06512: 在 "SCOTT.CARD1_PRO", line 16
ORA-06512: 在 line 1
(
name in varchar2,--姓名
password in varchar2, --密码
balance in number,--余额
isUse in number,--是否使用
Id in number--卡的编号
)is
--定义部分
v_sql varchar2(1000);
begin
--执行部分
v_sql:='Update Card set name='||name||',password='||password||',balance='||balance||',
isUse='||isUse||' where Id='||Id;
--执行sql,并把返回的值
execute immediate v_sql;
end;
/ 在java代码中
cs=con.prepareCall("{call card1_pro(?,?,?,?,?)}");
//赋值
cs.setString(1,"黄杰");
cs.setString(2,"125");
cs.setInt(3,123);
cs.setInt(4,1);
cs.setInt(5,1020);
//执行
cs.execute();
System.out.print("执行成功!");有错....错误是:
java.sql.SQLException: ORA-00904: "黄杰": 标识符无效
ORA-06512: 在 "SCOTT.CARD1_PRO", line 16
ORA-06512: 在 line 1
解决方案 »
- oracle中order by 字段A,对于字段A的值相同的几条数据,是怎么排序的?
- 求解:ora-28547:连接服务器失败,可能是 Oracle Net 管理失败
- 游标问题-没有输出?
- oracle数据库怎么装啊?
- Does anyone know if it is possible to supply multiple queries and tables to exp - so that the result is a single export file ?
- 如何实现以下SQL功能,谢谢
- oracle 数据库恢复问题,请大家帮帮忙?在线等
- 关于字符集,字符集改变后原来插入的汉字显示乱码,新插入的正常
- 程序中如何实现Oracle数据库的备份和恢复?
- 如何去除当创建database link时oracle自动添加的US.ORACLE.COM后缀?
- Oracle Enterprise Manager无法启动,oracle11密码过期
- 将Oracle从10.2.0.1升级到10.2.0.3时运行补丁包中的runInstaller时出错
在调用setString的时候,用变量呢?
试试
v_sql:='Update Card set name='''||name||''',password='''||password||''',balance='''||balance||''',isUse='||isUse||' where Id='||Id;
v_sql:='Update Card set name='''||name||''',password='''||password||''',balance='''||balance||''',
isUse='''||isUse||'' where Id='||Id;
以后动态 SQL,尽量使用绑定变量的方式,这样出错几率小很多
我写一个简单示例给你v_sql := 'update card set name = :name where id = :id';
execute immediate v_sql using name, password;
v_sql := 'update card set name = :name where id = :id';
execute immediate v_sql name, id;手误,把变量名写错了
是用Java代码调用存储过程的....