【问题标题】:I'm getting this error pls 00103 when using netbeans使用 netbeans 时出现此错误 pls 00103
【发布时间】:2019-08-07 19:26:36
【问题描述】:

我已经使用用户名 system 建立了与我的 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','12-apr-2000','student');

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

错误:这是我得到的错误:

感谢您的快速帮助。 提前谢谢...

【问题讨论】:

    标签: java oracle stored-procedures jdbc


    【解决方案1】:

    CallableStatement 的 javadoc 说:

    用于执行 SQL 存储过程的接口。 JDBC API 提供存储过程 SQL 转义语法,允许以标准方式为所有 RDBMS 调用存储过程。这种转义语法有一种形式包含结果参数,另一种形式不包含。如果使用,结果参数必须注册为 OUT 参数。其他参数可用于输入、输出或两者。参数按编号顺序引用,第一个参数为 1。

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-21
      相关资源
      最近更新 更多