Records type. Oracle

ZRG

Guest
Records type. Oracle

Есть реализация
declare
TYPE A is record(F1 VARCHAR2(5), F2 VARCHAR2(5));
TYPE B is table of A;

vrb B; -- переменная;
begin
-- заполняем значениями.
vrb:= B(
A('1test','1test'),
A('2test','2test')
);
end;
но при выполнении выдает сообщение
ORA-06550: line 9, column 10
PLS-0222: no function with name 'A' exists in this scope

А вот простейшая реализация работает
declare
TYPE B is table of VARCHAR2(5);
vrb B; -- переменная;
begin
-- заполняем значениями.
vrb:= B('1test','2test','3test');
end;
так что нужно писать метод по загонке данных или можно обойтись ?
получается что ORACLE не может работать с составным типом RECORD

очень жду ответа
 

ZRG

Guest
а как же быть тогда?
есть какие предложения?

-~{}~ 25.06.05 18:41:

еще вариант:
declare
TYPE A is VARRAY(2) OF VARCHAR2(5);
TYPE B is table of A;
vrb B; -- переменная;
begin
-- заполняем значениями.
vrb:= B(
A('0test','1test'),
A('2test','3test')
);
end;
а при попытке выдачи такого
CREATE OR REPLACE TYPE A is RECORD(F1 VARCHAR2(5), F2 VARCHAR2(5))
Выдается ошибка

Compilation errors for TYPE USER1.A
Error: PLS-00103: Encountered the symbol "RECORD" when expecting one of the following:
array VARRAY_ table object fixed varying opaque
The symbol "object was inserted before "RECORD" to continue.
Line: 1
Text: CREATE OR REPLACE TYPE A is RECORD(F1 VARCHAR2(5), F2 VARCHAR2(5))
 

trustno1

Новичок
Автор оригинала: ZRG
а как же быть тогда?
есть какие предложения?
задачу, пожалуйста, объясните, а не реализацию приводите.

Автор оригинала: ZRG
а при попытке выдачи такого
CREATE OR REPLACE TYPE A is RECORD(F1 VARCHAR2(5), F2 VARCHAR2(5))
Выдается ошибка

Compilation errors for TYPE USER1.A
Error: PLS-00103: Encountered the symbol "RECORD" when expecting one of the following:
array VARRAY_ table object fixed varying opaque
The symbol "object was inserted before "RECORD" to continue.
Line: 1
Text: CREATE OR REPLACE TYPE A is RECORD(F1 VARCHAR2(5), F2 VARCHAR2(5))
я же говорю тип RECORD нельзя определять глобально (как вы пытаетесь сделать), только локально (внутри процедуры, например).
 

ZRG

Guest
была попытка объявить глобально и выдало ошибку.
в подтверждение ваших слов)


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

-~{}~ 25.06.05 18:55:

например... повторите
 

trustno1

Новичок
все-таки вы упорно игнорируете просьбу пояснить смысл ваших изысканий, то бишь выложить постановку задачи.
Вы хотит просто использовать nested tables с типом RECORD?
тогда вот пример:

Код:
declare
type c_rec is record (n varchar2(30), d number);
type c_tab is table of c_rec;
c c_tab := c_tab();
begin
c.extend;
c(1).n = 'test';
c(1).d = 555;
end;
сразу скажу: выбрать из c как бы вам хотелось (с помощью select * from table(cast(c as c_tab))) не получится, поскольку c_tab определен локально.
 
Сверху