как искать другое поле в Oracle Function - PullRequest
0 голосов
/ 05 июня 2018

Таблица 1

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

Таблица 2

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

Я пытаюсь создать функцию в Oracle, чтобы добавить префикс 'A' в таблицу 1, а послечто я хочу посмотреть в таблице 2, чтобы вернуть DESC.Это должна быть функция.

Спасибо !!!

Ответы [ 3 ]

0 голосов
/ 05 июня 2018

Вы пытаетесь что-то подобное?

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_FOUND или INVALID_NUMBER

0 голосов
/ 05 июня 2018

Вы можете использовать следующее для создания такой функции:

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; 

, где

  • нет необходимости включать обработку исключений, потому что вместо * используется cursor1008 * предложение.
  • Использование 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
0 голосов
/ 05 июня 2018

Я не уверен с вашим вопросом - вы пытаетесь достичь чего-то вроде этого: -

CREATE OR REPLACE FUNCTION Replace_Value 
(
input_ID IN VARCHAR2
) RETURN VARCHAR2 
AS 
    v_ID varchar(2); 
BEGIN 
    begin
    SELECT distinct a.ID into v_id from Table 2 a where a.ID in (select 'A'||b.id from table1 b where b.id=input_ID); 
    exception
        when others then
            dbms_output.put_line(sqlcode);
    end;
    RETURN v_id; 
END Replace_Value;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...