Java代码中的调用Oracle过程

Java代码中的调用Oracle过程,java,Java,我尝试用Java代码调用此过程: create or replace procedure statistics_function ( namein in varchar2 , lob_out out nocopy clob ) is cursor last_60_cpu_cursor is select 1 as last_60_cpu, sysdate

我尝试用Java代码调用此过程:

create or replace procedure statistics_function
    ( namein                        in varchar2
    , lob_out                       out nocopy clob )
is
    cursor last_60_cpu_cursor       is
        select 1 as last_60_cpu, sysdate as last_60_event_date
        from dual
    ;
begin
    dbms_lob.createtemporary(lob_loc => lob_out, cache => true, dur => dbms_lob.session);

    for cv in last_60_cpu_cursor loop
        dbms_lob.append(lob_out, to_char(cv.last_60_event_date)||'i'||to_char(cv.last_60_cpu)||chr(10));
    end loop;

    dbms_lob.append(lob_out, 'last_60_cpu'||chr(10)||chr(10));
end statistics_function;
public static void main(String Args[]) throws SQLException
{
    DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
    Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@31.187.70.163:1521:xe", "admin", "qwerty");

    CallableStatement cstmt = conn.prepareCall("statistics_function(?, ?); end;");

    cstmt.registerOutParameter(2, Types.VARCHAR);
    cstmt.setString(1, "agent");

    cstmt.execute();
    String result = cstmt.getString(1);
    conn.close();
    System.out.println(result);
}
Java代码:

create or replace procedure statistics_function
    ( namein                        in varchar2
    , lob_out                       out nocopy clob )
is
    cursor last_60_cpu_cursor       is
        select 1 as last_60_cpu, sysdate as last_60_event_date
        from dual
    ;
begin
    dbms_lob.createtemporary(lob_loc => lob_out, cache => true, dur => dbms_lob.session);

    for cv in last_60_cpu_cursor loop
        dbms_lob.append(lob_out, to_char(cv.last_60_event_date)||'i'||to_char(cv.last_60_cpu)||chr(10));
    end loop;

    dbms_lob.append(lob_out, 'last_60_cpu'||chr(10)||chr(10));
end statistics_function;
public static void main(String Args[]) throws SQLException
{
    DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
    Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@31.187.70.163:1521:xe", "admin", "qwerty");

    CallableStatement cstmt = conn.prepareCall("statistics_function(?, ?); end;");

    cstmt.registerOutParameter(2, Types.VARCHAR);
    cstmt.setString(1, "agent");

    cstmt.execute();
    String result = cstmt.getString(1);
    conn.close();
    System.out.println(result);
}
我得到这个错误:

Exception in thread "main" java.sql.SQLSyntaxErrorException: ORA-00900: invalid SQL statement 
你能帮我解决这个问题吗。我想我在Java代码中有一些错误

您能为这个问题提出一些解决方案吗?

您的语法错误: 试试这个:

CallableStatement cstmt=conn.prepareCall(“{call statistics_function(?,)}”)