Гость
Map
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Привести plsql тип к типу sql / 14 сообщений из 14, страница 1 из 1
20.12.2021, 14:26
    #40121679
Lemkoleg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Привести plsql тип к типу sql
Здравствуйте. Подскажите, есть ли возможность реализовать пожобный код:

create or replace package PKG_CONSTANTS
is
TYPE R_RECORD IS RECORD (
L_STRING_1 VARCHAR2(1000) := null,
L_STRING_2 VARCHAR2(1000) := null,
L_STRING_3 VARCHAR2(1000) := null,
L_STRING_4 VARCHAR2(1000) := null,
L_STRING_5 VARCHAR2(1000) := null,
L_STRING_6 VARCHAR2(1000) := null,
L_STRING_7 VARCHAR2(1000) := null,
L_STRING_8 VARCHAR2(1000) := null,
L_STRING_9 VARCHAR2(1000) := null,
L_STRING_10 VARCHAR2(1000) := null);

TYPE CUR_RECORD IS REF CURSOR RETURN R_RECORD;
end;

create or replace function F_CREATE_RECORD
(
P_STRING_1 in VARCHAR2 := null,
P_STRING_2 in VARCHAR2 := null,
P_STRING_3 in VARCHAR2 := null,
P_STRING_4 in VARCHAR2 := null,
P_STRING_5 in VARCHAR2 := null,
P_STRING_6 in VARCHAR2 := null,
P_STRING_7 in VARCHAR2 := null,
P_STRING_8 in VARCHAR2 := null,
P_STRING_9 in VARCHAR2 := null,
P_STRING_10 in VARCHAR2 := null)
return PKG_CONSTANTS.R_RECORD
is
LR_RECORD PKG_CONSTANTS.R_RECORD;
begin

LR_RECORD.L_STRING_1 := P_STRING_1;
LR_RECORD.L_STRING_2 := P_STRING_2;
LR_RECORD.L_STRING_3 := P_STRING_3;
LR_RECORD.L_STRING_4 := P_STRING_4;
LR_RECORD.L_STRING_5 := P_STRING_5;
LR_RECORD.L_STRING_6 := P_STRING_6;
LR_RECORD.L_STRING_7 := P_STRING_7;
LR_RECORD.L_STRING_8 := P_STRING_8;
LR_RECORD.L_STRING_9 := P_STRING_9;
LR_RECORD.L_STRING_10 := P_STRING_10;

return LR_RECORD;

end F_CREATE_RECORD;


declare
L_CUR_RECORD PKG_CONSTANTS.CUR_RECORD;
begin
OPEN L_CUR_RECORD FOR select F_CREATE_RECORD(
P_STRING_1 => D.COLUMN_VALUE1,
P_STRING_2 => D.COLUMN_VALUE2,
P_STRING_5 => D.COLUMN_VALUE3,
P_STRING_10 => D.COLUMN_VALUE4)
FROM SOME_TABLE D;

for c in (select * from table(F_PIPELINE_FUNCTION(L_CUR_RECORD)))
loop
--some doing;
end loop;

end;


Смысл: зделать универсальный курсор для разных запросов, записи которого обрабатываются в конвеерной функции.
...
Рейтинг: 0 / 0
20.12.2021, 16:04
    #40121716
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Привести plsql тип к типу sql
Lemkoleg

Смысл: зделать универсальный курсор для разных запросов, записи которого обрабатываются в конвеерной функции.

что-то очень сложно
так чем хуже
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
declare
TYPE R_RECORD IS RECORD (
L_STRING_1 VARCHAR2(1000) := null,
L_STRING_2 VARCHAR2(1000) := null,
L_STRING_3 VARCHAR2(1000) := null);

TYPE CUR_RECORD IS REF CURSOR RETURN R_RECORD;
L_CUR_RECORD CUR_RECORD;
begin
OPEN L_CUR_RECORD FOR select to_char(empno),ename,job from emp;

--for c in (select * from table(F_PIPELINE_FUNCTION(L_CUR_RECORD)))
--loop
--some doing;
--end loop;
close L_CUR_RECORD;
end;



.....
stax
...
Рейтинг: 0 / 0
20.12.2021, 17:48
    #40121745
Lemkoleg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Привести plsql тип к типу sql
Stax,
Тем, ято строка должна соответствовать строке выборки. А, это нужно создавать отдельные строки, для каждой выборки. Соответственно, конвеерных функций , тоже. Т.к. у них будут разные типы входных данных
...
Рейтинг: 0 / 0
20.12.2021, 18:14
    #40121751
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Привести plsql тип к типу sql
Lemkoleg,

я примерно так понимаю
в F_PIPELINE_FUNCTION передается курсор, чтоб вернуть несколько другие записи (добавить, исключить, заменить)

для етого достаточно обьявить табличний тип со структурой аля R_RECORD

курсор будет универсальный в плане до 10-ти полей varchar2(1000),а дальше что ...


.....
stax
...
Рейтинг: 0 / 0
20.12.2021, 18:24
    #40121756
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Привести plsql тип к типу sql
LemkolegСмысл: зделать универсальный курсор для разных запросов, записи которого
обрабатываются в конвеерной функции.

И что Вы будете делать если очередной "разный запрос" будет иметь меньше полей,
чем требуется функции для работы?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
20.12.2021, 18:42
    #40121760
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Привести plsql тип к типу sql
Dimitry Sibiryakov,

"разный" в плане разные from,where ....

.....
stax
...
Рейтинг: 0 / 0
20.12.2021, 18:45
    #40121761
Lemkoleg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Привести plsql тип к типу sql
Stax
Lemkoleg,

я примерно так понимаю
в F_PIPELINE_FUNCTION передается курсор, чтоб вернуть несколько другие записи (добавить, исключить, заменить)

для етого достаточно обьявить табличний тип со структурой аля R_RECORD

курсор будет универсальный в плане до 10-ти полей varchar2(1000),а дальше что ...


.....
stax

А, дальше: конвеерная функция обрабатывает все не нулл поля одинаково. По-этому, нужно привести результат запроса к одному типу. Что и пытается зделать функция F_CREATE_RECORD. Но, т к. это тип PLSQL , то вызывается ошибка. Вот я и ищу решение (если оно существует)
...
Рейтинг: 0 / 0
20.12.2021, 18:57
    #40121763
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Привести plsql тип к типу sql
Так и не понял гениальной задумки.
Чисто технически - чтобы заставить работать Ваш код, можно создать тип уровня схемы.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
create TYPE R_RECORD as object(
L_STRING_1 VARCHAR2(1000),
L_STRING_2 VARCHAR2(1000),
L_STRING_3 VARCHAR2(1000),
L_STRING_4 VARCHAR2(1000),
L_STRING_5 VARCHAR2(1000),
L_STRING_6 VARCHAR2(1000),
L_STRING_7 VARCHAR2(1000),
L_STRING_8 VARCHAR2(1000),
L_STRING_9 VARCHAR2(1000),
L_STRING_10 VARCHAR2(1000))
/



функцию create_record вполне заменит умолчательный конструктор
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
 select R_RECORD (
D.COLUMN_VALUE1,
D.COLUMN_VALUE2,
...
D.COLUMN_VALUE3,
D.COLUMN_VALUE4
...
) my_rec
FROM SOME_TABLE D;
...
Рейтинг: 0 / 0
20.12.2021, 19:05
    #40121765
Lemkoleg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Привести plsql тип к типу sql
andrey_anonymous,
а, курсор какого типа данных будет?
...
Рейтинг: 0 / 0
20.12.2021, 19:09
    #40121766
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Привести plsql тип к типу sql
Вопрос не понял
...
Рейтинг: 0 / 0
20.12.2021, 19:22
    #40121769
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Привести plsql тип к типу sql
Stax"разный" в плане разные from,where ....

Воот... И тут мы приходим к тому, что в части select-list запросы все
одинаковые. Остаётся всего один шаг: выкинуть из картины "PL/SQL тип" и
передавать из курсора в функцию поля этого select-list одно за другим.
Единственное что мешает этому простому и надёжному решению - топикстартеру лень
набирать имена всех этих полей. Очевидно, тонкая кожа на пальцах стирается до
кровавых мозолей.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
20.12.2021, 19:36
    #40121770
Lemkoleg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Привести plsql тип к типу sql
andrey_anonymous
Вопрос не понял

Курсор имееь жестску привьязку к типу. Для того, чтоб была ОДНА конвеерная функция. Значик, курсор должен быть приведенным к этому типу.
...
Рейтинг: 0 / 0
20.12.2021, 19:42
    #40121772
Lemkoleg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Привести plsql тип к типу sql
Dimitry Sibiryakov

Stax"разный" в плане разные from,where ....

Воот... И тут мы приходим к тому, что в части select-list запросы все
одинаковые. Остаётся всего один шаг: выкинуть из картины "PL/SQL тип" и
передавать из курсора в функцию поля этого select-list одно за другим.
Единственное что мешает этому простому и надёжному решению - топикстартеру лень
набирать имена всех этих полей. Очевидно, тонкая кожа на пальцах стирается до
кровавых мозолей.

Нн только лень набирать имена полей. А еще, для каждого запроса, лень создавать свой тип записи и конвеерную функцию. Зачем мне столько шлака
...
Рейтинг: 0 / 0
20.12.2021, 19:53
    #40121775
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Привести plsql тип к типу sql
LemkolegА еще, для каждого запроса, лень создавать свой тип записи и конвеерную функцию.

Повторяю медленно: функция - одна. Запись - вообще не нужна. Передавай отдельные
значения.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Привести plsql тип к типу sql / 14 сообщений из 14, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]