Таблица 1
ID
----------
1
2
3
4
5
Таблица 2
ID Desc
------------------------------
A1 Apple
A2 Pear
A3 Orange
Я пытаюсь создать функцию в Oracle, чтобы она добавляла префикс «A» в таблицу 1, а после этого я хочу найти в таблице 2, чтобы вернуть DESC. Это должна быть функция.
Спасибо!!!
ID ---------- Яблочная груша Апельсин 4 5
СОЗДАТЬ ИЛИ ЗАМЕНИТЬ ФУНКЦИЮ 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;
Включите в свой вопрос код, который не работает, и объясните, что с ним не так. where a.ID in (input_ID) выглядит немного подозрительно (почему не where a.ID = input_ID?), Но все зависит от того, для чего он нужен.





Я не уверен в вашем вопросе - вы пытаетесь достичь чего-то вроде этого: -
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, если это имеет смысл. Спасибо
@JessieWang, если вас не беспокоит table1, тогда: - (выберите 'A' || input_ID из двойного) или substr (a.ID, 2) в input_ID
Вы пытаетесь сделать что-то подобное?
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
Ваш вопрос кажется непонятным. Вы хотите обновить строку в
Table 1, а затем вернуть описание изTable 2? Пожалуйста, также покажите, что вы пробовали до сих пор.