Хранимые процедуры Oracle ... есть проблемы с размещением параметра OUT перед параметром IN? - PullRequest
0 голосов
/ 05 января 2011

Должен ли порядок типов параметров иметь значение при вызове хранимой процедуры в oracle?

Например (пожалуйста, прости синтаксические ошибки)

my_proc (
param_a IN NUMBER
, param_b IN STRING
, param_c OUT NUMBER
, param_d OUT STRING
) begin
param_c = param_a
param_d = param_b
end

Когда мы делаем что-то подобное, мы получаемзначения, переданные обратно в параметрах OUT (снова, пожалуйста, простите за особый синтаксис).

Однако, когда мы перемещаем param_c по param_b, мы получаем 0.0 и NULL вместо значений, переданных в.

my_proc (
param_a IN NUMBER
, param_c OUT NUMBER
, param_b IN STRING
, param_d OUT STRING
) begin
param_c = param_a
param_d = param_b
end

Мы тестируем это в PL / SQL.

Есть что-то, что мы пропускаем?

Спасибо BayouBob

Ответы [ 2 ]

0 голосов
/ 05 января 2011

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

Должен признаться, это был вопрос java / oracle, который мы пытались подтвердить с помощью PL / SQL.

Если мы назвали хранимую процедуру как 'call my_proc (...)', порядок параметров IN и OUT представляется важным; тогда как 'begin my_proc (...) end' работает просто отлично.

Примечание: это относится к созданию callablestatement в Java 6 с ojdbc6.

0 голосов
/ 05 января 2011

Вы можете определить свои параметры IN / OUT в любом порядке.Как вы называете эту процедуру?Если вы передадите пустую строку, вы получите значение NULL.Например:

declare
   param_c   NUMBER;
   param_d   VARCHAR2(100);
begin

  my_proc (
    0,
    param_c,
    '',
    param_d
  );

  dbms_output.put_line(param_c);

  dbms_output.put_line(nvl(param_d, 'null'));

end;

Это должно вывести:

0
null
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...