Oracle Pl / SQl: пользовательская функция с промежуточными результатами - PullRequest
1 голос
/ 22 февраля 2011

Мне нужно преобразовать строку в число, используя некоторые встроенные методы оракула (синтаксический анализ, strlength, ...)
Я не знаю, как присвоить значение переменной внутри метода, и я не знаю, где разместить раздел объявлений.

CREATE OR REPLACE FUNCTION EXAMPLE (param IN VARCHAR2) 
RETURN NUMBER AS
BEGIN

  SELECT <string_handling_using_param> 
    INTO var 
    FROM DUAL;

  RETURN TO_NUMBER(<some computation using var>);

END EXAMPLE ;

Я пробовал некоторые варианты этой функции, такие как добавление параметра OUT для хранения промежуточной переменной, но тогда я не могу вызвать функцию из обычного SQL ...

Есть предложения о том, как этого добиться?

Ответы [ 2 ]

4 голосов
/ 22 февраля 2011

Если я правильно понимаю, вам просто нужно определить переменную "var" ...

create or replace FUNCTION EXAMPLE (param IN VARCHAR2)
RETURN NUMBER
AS
   var VARCHAR2(100);  -- This datatype may need modification
BEGIN
  select <string_handling>
  into   var
  from   dual;

  return to_number(<some computation using var>);
END EXAMPLE ;

В зависимости от того, что именно вы делаете, может быть лучший подход, который не нуждается вВЫБРАТЬ ... ИЗ ДВОЙНОГО:

create or replace FUNCTION EXAMPLE (param IN VARCHAR2)
RETURN NUMBER
AS
   var VARCHAR2(100);  -- This datatype may need modification
BEGIN
  var := <string_handling>;

  return to_number(<some computation using var>);
END EXAMPLE ;
1 голос
/ 22 февраля 2011
create or replace FUNCTION EXAMPLE (param IN VARCHAR2) 
RETURN NUMBER AS 
    -- declare section between AS and BEGIN
    var varchar2(100);
BEGIN   
   select <string_handling> into var from dual;  
   -- also note that many built-in functions can be done directly
   -- without calling a select, so in many cases
   -- var := substr(param,1,10) <or some other string handling>;
   -- is perfectly acceptable too. 
   return to_number(<some computation using var>); 
EXCEPTION -- if you need an exception handler
   when value_error then
      <do something with it or set a default return value or whatever>
END EXAMPLE ; 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...