Как найти другое поле в Oracle Function

Таблица 1

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

Таблица 2

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

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

Спасибо!!!

Ваш вопрос кажется непонятным. Вы хотите обновить строку в Table 1, а затем вернуть описание из Table 2? Пожалуйста, также покажите, что вы пробовали до сих пор.

sticky bit 05.06.2018 03:40

ID ---------- Яблочная груша Апельсин 4 5

Jessie Wang 05.06.2018 03:53

СОЗДАТЬ ИЛИ ЗАМЕНИТЬ ФУНКЦИЮ Replace_Value (input_ID IN VARCHAR2) RETURN VARCHAR2 AS v_ID varchar (2); НАЧАТЬ ВЫБОР отличить a.ID от v_id из таблицы 2 a, где a.ID in (input_ID); ВОЗВРАТ v_id; КОНЕЦ Replace_Value;

Jessie Wang 05.06.2018 03:56

Включите в свой вопрос код, который не работает, и объясните, что с ним не так. where a.ID in (input_ID) выглядит немного подозрительно (почему не where a.ID = input_ID?), Но все зависит от того, для чего он нужен.

William Robertson 05.06.2018 10:38
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
4
52
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

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

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;

Привет, Спасибо за ответ. Да и нет, я пытаюсь создать функцию, которую многие из Таблицы 1 могут использовать эту функцию для получения префикса A, а также для поиска значения Desc с учетом идентификационного номера. Тем не менее, я бы не знал, с каким именем таблицы я буду работать, поэтому запрос не должен содержать имя таблицы 1, если это имеет смысл. Спасибо

Jessie Wang 05.06.2018 05:43

@JessieWang, если вас не беспокоит table1, тогда: - (выберите 'A' || input_ID из двойного) или substr (a.ID, 2) в input_ID

Atul Kr Dey 05.06.2018 06:36

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

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.

Ответ принят как подходящий

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

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

Другие вопросы по теме