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

解决方案 »

  1.   

    Cause: The column name entered is either missing or invalid Action: Enter a valid column name. A valid column name must begin with a letter, be less than or equal to 30 characters, and consist of only alphanumeric characters and the special characters $, _, and #. JAVA我没用过,不过,我觉得你是不是最好定义一个string类型的变量,把“黄杰”赋给变量。
    在调用setString的时候,用变量呢?
      

  2.   

    写英文会不会报错,将"黄杰":修改为"huangjie"
    试试
      

  3.   

    改成下面的试一下
    v_sql:='Update Card set name='''||name||''',password='''||password||''',balance='''||balance||''',isUse='||isUse||' where Id='||Id;
      

  4.   

    是单引号的问题造成的,应该如下才正确
    v_sql:='Update Card set name='''||name||''',password='''||password||''',balance='''||balance||''',
    isUse='''||isUse||'' where Id='||Id;
      

  5.   


    以后动态 SQL,尽量使用绑定变量的方式,这样出错几率小很多
    我写一个简单示例给你v_sql := 'update card set name = :name where id = :id';
    execute immediate v_sql using name, password;
      

  6.   


    v_sql := 'update card set name = :name where id = :id';
    execute immediate v_sql name, id;手误,把变量名写错了
      

  7.   


    是用Java代码调用存储过程的....