java - 我在使用 netbeans 时收到此错误 pls 00103

标签 java oracle stored-procedures jdbc

我已经使用用户名系统建立了与我的 Oracle 数据库的连接

连接成功,我能够执行所有基本的 sql 操作,例如插入、更新、删除...但我无法执行我的存储过程。 当我尝试从 netbeans 调用我的存储过程时,我遇到了一些错误。请帮我解决这个问题。

netbeans按钮执行的代码

    int eid = Integer.parseInt(eidtf.getText());
    String ename = enametf.getText();
    String dob = dobtf.getText();

    String sex = male.getText();
    if (female.isEnabled() == true) {
        sex = female.getText();
    }

    String designation = destf.getText();
    int basic = Integer.parseInt(basictf.getText());

    //String sql = "exec calc(" +eid +","+ basic +",'"+ ename +"','"+ sex +"','"+ dob +"','"+ designation +"')";

    try {
        CallableStatement cs = con.prepareCall("{call calc(? ? ? ? ? ?)}");

        cs.setInt(2, 50);
        cs.setInt(1, 126);
        cs.setString(3, ename);
        cs.setString(4, sex);
        cs.setString(5, dob);
        cs.setString(6, designation);

        cs.execute();

        JOptionPane.showMessageDialog(this, "Insertion has been done successfully!!!");
    } catch (SQLException ex) {
        JOptionPane.showMessageDialog(this, "Error: " + ex.getMessage() + "\nCause: " + ex.getCause() + "\nError Code: " + ex.getErrorCode() + "\nStack: " + ex.getClass());
    }

下表和程序如下:

create table emp_payroll
(eid number(4) primary key,
ename varchar(20),
dob date,
sex char(1),
designation varchar(20),
basic number(5,2),
da number(5,2),
hra number(5,2),
pf number(5,2),
mc number(5,2),
gross number(5,2),
ded number(5,2),
net_pay number(5,2)
);

create or replace procedure calc
(x_eid in emp_payroll.eid%type :=123,
x_basic in emp_payroll.basic%type,
x_name in emp_payroll.ename%type,
x_sex in emp_payroll.ename%type,
x_dob in emp_payroll.ename%type,
x_des in emp_payroll.ename%type
)
as

x_da  emp_payroll.basic%type;
x_hra  emp_payroll.basic%type;
x_pf  emp_payroll.basic%type;
x_mc  emp_payroll.basic%type;
x_gross  emp_payroll.basic%type;
x_ded  emp_payroll.basic%type;
x_net_pay  emp_payroll.basic%type;

begin

    x_da:=.6* x_basic;
    x_hra:=.6* x_basic;
    x_pf:=.6* x_basic;
    x_mc:=.6* x_basic;
    x_gross:=x_basic+x_da+x_hra;
    x_ded:=x_pf+x_mc;
    x_net_pay:=x_gross-x_ded;
  insert into emp_payroll values(x_eid,x_name,x_dob,x_sex,x_des,x_basic,x_da,x_hra,x_pf,x_mc,x_gross,x_ded,x_net_pay) ;

end calc;
/

当我在 sqlplus 中运行以下命令时:

exec calc(123,50,'Har','m','2000年4月12日','学生');

我得到了预期的o/p。 但是当我在 netbeans 中做同样的事情时 我没有得到预期的操作,但出现了一些错误。

错误:这是我收到的错误:
Error Msg i'm getting in netbeans here

感谢快速帮助。 提前致谢...

最佳答案

CallableStatement 的 javadoc说:

The interface used to execute SQL stored procedures. The JDBC API provides a stored procedure SQL escape syntax that allows stored procedures to be called in a standard way for all RDBMSs. This escape syntax has one form that includes a result parameter and one that does not. If used, the result parameter must be registered as an OUT parameter. The other parameters can be used for input, output or both. Parameters are referred to sequentially, by number, with the first parameter being 1.

{?= call <procedure-name>[(<arg1>,<arg2>, ...)]}
{call <procedure-name>[(<arg1>,<arg2>, ...)]}

如您所见,参数之间用逗号分隔,这与任何语言中将参数传递给函数/过程/方法的语法几乎相同。

这意味着您的代码应该是:

CallableStatement cs = con.prepareCall("{call calc(?,?,?,?,?,?)}");

关于java - 我在使用 netbeans 时收到此错误 pls 00103,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55204233/

相关文章:

sql - 在 oracle 中查找重复值

java - 如何创建一个更新查询来更改带有 sysdate 的字段值?

sql-server - 如何从生成的sql返回本地临时表

java - 使用 Cargo maven2 插件运行测试时出现 ClassNotFoundException : oracle. jdbc.OracleDriver

java - 有什么方法可以使标签在 SWT 中可选?

java - 按另一个表中的最大值或最小值排序

oracle - 如何使用参数 'table of foo' 执行 SP?

PostgreSQL 触发器将更改从一个表复制到另一个表

java - 将数据库设置从一个项目复制到另一个项目

java - 如何使用 RequestFixture 在 Ratpack 中模拟 session ?