如何在Oracle Function中查找另一个字段

时间:2018-06-05 01:34:09

标签: oracle function plsql

表1

ID
----------
1
2
3
4
5

表2

ID                    Desc
------------------------------
A1                    Apple
A2                    Pear
A3                    Orange

我正在尝试在Oracle中创建一个Function,以便它添加前缀' A'在表1中,之后我想在表2中查找以返回DESC。它必须是一个功能。

谢谢!!!

3 个答案:

答案 0 :(得分:0)

我不确定你的问题 - 你是否想要达到这样的目标: -

startForeground

答案 1 :(得分:0)

你在尝试这样的事吗?

CREATE OR replace FUNCTION replace_value (table_name IN VARCHAR2, 
                                          input_id   IN INTEGER) 
RETURN VARCHAR2 
AS 
  v_desc VARCHAR(20); 
BEGIN 
    SELECT descr 
    INTO   v_desc 
    FROM   table2 
    WHERE id  = 'A' || input_id  
           AND ROWNUM = 1; -- only needed if there are multiple rows for each id. 
    RETURN v_desc; 
END replace_value;

您还可以为NO_DATA_FOUNDINVALID_NUMBER

添加例外处理

答案 2 :(得分:0)

您可以使用以下方法创建此类功能:

Create or Replace Function Get_Fruit( i_id table2.description%type ) 
  Return table2.description%type Is
  o_desc table2.description%type;
Begin
  for c in ( select description from table2 where id = 'A'||to_char(i_id) )
  loop
    o_desc := c.description; 
  end loop;
  return o_desc;
End; 

其中

  • 因为使用cursor而无需包含异常处理 而不是select into条款。
  • 使用table_name.col_name%type声明数据类型 参数或变量生成列的相关数据类型 动态。即那些能够依赖于数据的类型 相关栏目。

  • desc等保留关键字不能用作列名 表格,除非用双引号("desc"

  • 表示

要调用该功能,可能首选以下内容:

SQL> set serveroutput on
SQL> declare
  2     i_id    pls_integer := 1;
  3     o_fruit varchar2(55);
  4  begin
  5     o_fruit := get_fruit(  i_id  );
  6     dbms_output.put_line( o_fruit );
  7  end;
  8  /

Apple

PL/SQL procedure successfully completed