Использование массивов

Sergant82
Дата: 27.02.2007 14:42:26
Как поочередно обратиться ко всем элементам массива и что написать в return если функция должна вернуть тоже массив?

create or replace function ConvertSwiftMsg(resulttype in string, str_in in string) return ?????? is
Result ???????;
begin
declare
type mytype is table of varchar2(100);
tag_array mytype := mytype(':20:',':23B:',':32A:',':33B:',':50?:',':50:',
':51A:',':52?:',':53?:',':54?:',':55?:',
':56?:',':57?:',':59:',':59?:',':70:',
':71A:',':71F:', ':71G:',':72:',':77B:',':77T:');
i integer;
begin
i:=0;
loop
if tag_array
end loop
;

return(Result);
end ;
end ConvertSwiftMsg;
tru55
Дата: 27.02.2007 14:49:01
Как и всегда в подобных случаях...
Сначала определить тип, а затем уже на него ссылаться. Только учти, что если захочешь эту функция использовать в SQL (не в PL/SQL), то есть ограничения
Sergant82
Дата: 27.02.2007 15:41:20
А по подробнее можно что написать вместо знаков вопроса
andrey_anonymous
Дата: 27.02.2007 15:45:01
Sergant82
А по подробнее можно что написать вместо знаков вопроса

имя задекларированного типа.
Задекларированного ВНЕ данной функции (т.е. в пакете или SQL Type)
Sergant82
Дата: 28.02.2007 09:29:15
create or replace function ConvertSwiftMsg(resulttype in string, str_in in string) return varchar2 is
Result varchar2(1000);
begin
declare
type mytype is table of varchar2(100) not null;

tag_array mytype := mytype(':20:',':23B:',':32A:',':33B:',':50?:',':50:',
':51A:',':52?:',':53?:',':54?:',':55?:',
':56?:',':57?:',':59:',':59?:',':70:',
':71A:',':71F:', ':71G:',':72:',':77B:',':77T:');

i integer;
begin

select count(*) into i from tag_array;

return(Result);
end ;
end ConvertSwiftMsg;

Выдает что нет таkой таблицы tag_array. Что не так?
10053
Дата: 28.02.2007 10:44:28
Sergant82
Что не так?

type mytype is table of varchar2(100) not null;
это должно быт ьвне функции - либо в пакете, либо объявите как тип с помощью create type
10053
Дата: 28.02.2007 10:46:42
10053
Sergant82
Что не так?

type mytype is table of varchar2(100) not null;
это должно быт ьвне функции - либо в пакете, либо объявите как тип с помощью create type

виноват, спросонья попутал
конкретно там не так то, что нельзя обращаться к массиву как к таблице
я
Дата: 28.02.2007 10:47:20
for i in tag_array.first .. tag_array.last loop
dbms_output.put_line(tag_array(i));
end loop;

или просто 

dbms_output.put_line(tag_array.last);
Jannny
Дата: 28.02.2007 10:47:33
Sergant82
Выдает что нет таkой таблицы tag_array. Что не так?
Да все не так. Вы предыдущую ноту читали? Как Вы для себя понимаете слово "ВНЕ"? Не говоря об остальном. Перед использованием синтаксиса стоит о нем почитать, разве нет? :)

ЗЫ: И зачем Вы "насилуете" (уж простите за выражение) SQL:
tag_array.count
Sergant82
Дата: 28.02.2007 10:52:53
Ну хоть один дельный ответ. Спасибо за

for i in tag_array.first .. tag_array.last loop
dbms_output.put_line(tag_array(i));
end loop;

или просто

dbms_output.put_line(tag_array.last);