不会吧,一天了,没有一个人帮助我。
大家帮我看一下吧。
可能是我的数据存储写错了。我只是想取出select username into  v_username from all_users where user_id = 5 ;
里面的v_username,然后用java调用数据存储,把他取出来,

解决方案 »

  1.   

    cs = con.prepareCall("{call all_users_seleproc()}");
    cs.execute();
    user=cs.getString("username");
      

  2.   

    这样可以有返回值吗?
    我看到有介绍如果要有返回值,必须这样("? ={call all_users_seleproc}");你这种方法我也试过,好象不行。今天休息,由于现在没有环境,没法调试了。数据存储不能有返回值,我怎么才能用
    程序取得我要的值。
      

  3.   

    如果是单个返回值这样就可以了,但是如果是结果集需要在存储过程中自定义数组类型 
    eg:
    TYPE type_varchar IS TABLE OF VARCHAR2(80) INDEX BY BINARY_INTEGER
      

  4.   

    对。只有一个返回值。你看以下我的存储过程写的有问题吗?
    如果取出来的话,结果v_username=system,不知道怎么搞的,取不出来。  
      

  5.   

    Joyyu() :你的存储过程没有返回参数?那我该怎么写呢?
      

  6.   

    如果返回参数,那应该是"{?=call xxxx(?,?,?)}"吧?
      

  7.   

    create or replace procedure all_users_seleproc
    (  result out varchar2
      ) is
       v_username  all_users.username%type;
    begin
         select username into  v_username from all_users
         where user_id = 5 ;
         result := v_username ;
    end all_users_seleproc;
      

  8.   

    我用你写存储,他报D:\test>java testDB
    SQLException: ORA-06550: 第 1 行, 第 7 列:
    PLS-00306: 调用 'ALL_USERS_SELEPROC' 时参数数量或类型错误
    ORA-06550: 第 1 行, 第 7 列:
    PL/SQL: Statement ignored没有错误啊
      

  9.   

    上面我用得你写的java程序和存储,
    如果我把它改成我写的程序
    CallableStatement cs = con.prepareCall( "? ={call all_users_seleproc}");
    cs.registerOutParameter(1, java.sql.Types.INTEGER);   cs.executeQuery();
    他也保错误:
    Exception in thread "main" java.lang.NullPointerException
            at oracle.jdbc.ttc7.TTCAdapter.newTTCType(TTCAdapter.java:270)
            at oracle.jdbc.ttc7.TTCAdapter.createNonPlsqlTTCColumnArray(TTCAdapter.j
    ava:256)
            at oracle.jdbc.ttc7.TTCAdapter.createNonPlsqlTTCDataSet(TTCAdapter.java:
    231)
            at oracle.jdbc.ttc7.TTC7Protocol.doOall7(TTC7Protocol.java:1269)
            at oracle.jdbc.ttc7.TTC7Protocol.parseExecuteFetch(TTC7Protocol.java:738
    )
            at oracle.jdbc.driver.OracleStatement.executeNonQuery(OracleStatement.ja
    va:1313)
            at oracle.jdbc.driver.OracleStatement.doExecuteOther(OracleStatement.jav
    a:1232)
            at oracle.jdbc.driver.OracleStatement.doExecuteWithBatch(OracleStatement
    .java:1353)
            at oracle.jdbc.driver.OracleStatement.doExecute(OracleStatement.java:176
    0)
            at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStateme
    nt.java:1805)
            at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePrepar
    edStatement.java:322)
            at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePrepare
    dStatement.java:280)
            at testDB.main(testDB.java:3
      

  10.   

    你相应的JAVA程序也要改阿!cs = con.prepareCall("{call all_users_seleproc(?)}");
    cs.registerOutParameter(1,Types.VARCHAR);
    cs.execute();
    user=cs.getString(1);
      

  11.   

    按照你的方法也不对。
    CallableStatement cs = con.prepareCall("{call all_users_seleproc(?)}");cs.execute();
    String user=cs.getString("username");D:\test>java testDB
    SQLException: ORA-01008: 并非所有变量都已关联
      

  12.   

    刚才贴错了。按照你的方法
    CallableStatement cs = con.prepareCall("{call all_users_seleproc(?)}");
      cs.registerOutParameter(1, java.sql.Types.INTEGER);    
     cs.executeQuery();D:\test>java testDB
    SQLException: ORA-06502: PL/SQL: 数字或值错误 :  字符到数值的转换错误
    ORA-06512: 在line 1
    好象存储还不对。
      

  13.   

    cs = con.prepareCall("{call all_users_seleproc(?)}");
    cs.registerOutParameter(1,Types.VARCHAR);
    cs.execute();
    user=cs.getString(1);按照我的写,
      

  14.   

    多谢。已经成功。
    cs.executeQuery();可能我用的这句话不对。
    为了表示感谢给你介绍本书:
    http://javaalmanac.com/egs/?里面有很多的例子可以查阅。
      

  15.   

    我一直以为应该用它的。因为这是在sun网站上查到这样调用的。CallableStatement cs = con.prepareCall("{call SHOW_SUPPLIERS}");
    ResultSet rs = cs.executeQuery();executeQuery与execute区别是什么?
      

  16.   

    你的错误原因不是在你的JAVA程序,而是你的存储过程没有一个出参,所以在执行之后,不能通过结果集或者Get出参来获取返回值!
      建议看看Oracle PL/SQL 这本书。