Я получаю эту ошибку pls 00103 при использовании netbeans

#java #oracle #stored-procedures #jdbc

#java #Oracle #хранимые процедуры #jdbc

Вопрос:

Я установил соединение с моей базой данных Oracle с именем пользователя system

Соединение успешно, и я могу выполнять все свои основные операции sql, такие как вставка, обновление, удаление… но я не могу выполнить свои хранимые процедуры. Пока я пытаюсь вызвать свою хранимую процедуру из netbeans, я получаю некоторые ошибки. Пожалуйста, помогите мне в решении этой проблемы.

выполненный netbeans buttonPerformed код

     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 апреля 2000′, ‘student’);

Я получаю требуемый o / p. Но когда я делаю то же самое в netbeans, я получаю не предполагаемую операцию, а некоторую ошибку.

Ошибки: Это ошибка, которую я получаю:
Сообщение об ошибке, которое я получаю в netbeans здесь

Приветствуется быстрая помощь. Заранее спасибо…

Ответ №1:

Javadoc CallableStatement говорит:

Интерфейс, используемый для выполнения хранимых процедур SQL. JDBC API предоставляет синтаксис escape SQL хранимых процедур, который позволяет вызывать хранимые процедуры стандартным способом для всех СУБД. Этот синтаксис escape имеет одну форму, которая включает параметр результата, и другую, которая этого не делает. Если используется, параметр результата должен быть зарегистрирован как параметр OUT. Другие параметры могут использоваться для ввода, вывода или обоих. Параметры упоминаются последовательно, по номеру, причем первый параметр равен 1.

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

Как вы можете видеть, аргументы разделяются запятыми, так же, как и практически любой синтаксис для передачи параметров функции / процедуре / методу на любом языке.

Это означает, что ваш код должен быть:

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