函数 PL/SQL ORACLE

Function PL/SQL ORACLE

我需要用下面的函数做一个函数sql

这个sql从数字到字母的转换

With
  Numero as (
  select 3 N from dual
  )
  ,
  PreProcesado1 as (
  select   N
        , floor(mod(N, 10)) Unidades
    from Numero
  )
  select   N,     case Unidades 
                  when 0 then ''
                  when 1 then 'one'
                  when 2 then 'two'
                  when 3 then 'three'
                  when 4 then 'four'
                  when 5 then 'five'
                  when 6 then 'six'
                  when 7 then 'seven'
                  when 8 then 'eight'
                  when 9 then 'nine'
                end
              end
            from PreProcesado1;

我是这样做的,但它不起作用,必须有一个输入参数,在这种情况下是 entry_numero 并且应该转换

create or replace function fun_departamento(entry_numero number)
return varchar2 is
response varchar2(120);
begin
  With
      Numero as (
      select entry_numero N from dual
      )
      ,
      PreProcesado1 as (
      select   N
            , floor(mod(N, 10)) Unidades
        from Numero
      )
      select   N,     case Unidades 
                      when 0 then ''
                      when 1 then 'one'
                      when 2 then 'two'
                      when 3 then 'three'
                      when 4 then 'four'
                      when 5 then 'five'
                      when 6 then 'six'
                      when 7 then 'seven'
                      when 8 then 'eight'
                      when 9 then 'nine'
                    end
                  end
                  into response
                  from PreProcesado1; 
return response;
end;
/

我收到此错误,非常感谢您的帮助

PL/SQL: SQL Statement ignored
PL/SQL: ORA-00947: not enough values

这是一种更简单的方法来满足您的需求:

to_char( to_date(n,'J'),'jsp')

例如:

SQL> select to_char( to_date(4,'J'),'jsp') as n from dual;

N
----------
four

请注意,这不处理 0,因此您可能需要:

select
  case
    when n != 0 then to_char( to_date(n,'J'),'jsp')
  end
from ...

Here 你发现了更多东西。

正如您所说的那样您的方式,然后查看第 16 行和第 29 行

  • 第 16 行:您正在选择两个值(NCASE 表达式)
  • 第 29 行:您试图将 2 个值放入单个变量中 (response)

因此,从第 16 行删除 N(或添加另一个要插入的变量)。

SQL> create or replace function fun_departamento(entry_numero number)
  2  return varchar2 is
  3  response varchar2(120);
  4  begin
  5    With
  6        Numero as (
  7        select entry_numero N from dual
  8        )
  9        ,
 10        PreProcesado1 as (
 11        select   N
 12              , floor(mod(N, 10)) Unidades
 13          from Numero
 14        )
 15        select
 16                 --  N,                  --> without it! ...
 17                   case Unidades
 18                        when 0 then ''
 19                        when 1 then 'one'
 20                        when 2 then 'two'
 21                        when 3 then 'three'
 22                        when 4 then 'four'
 23                        when 5 then 'five'
 24                        when 6 then 'six'
 25                        when 7 then 'seven'
 26                        when 8 then 'eight'
 27                        when 9 then 'nine'
 28                    end
 29                    into response      --> ... as you're inserting into a single variable
 30                    from PreProcesado1;
 31  return response;
 32  end;
 33  /

Function created.

测试:

SQL> select fun_departamento(5) from dual;

FUN_DEPARTAMENTO(5)
--------------------------------------------------------------------------------
five

SQL>