사용자 정의 유형이있는 테이블을 생각해 봅시다.사용자 정의 유형을 varchar2로 반환하는 방법은 무엇입니까?
create or replace type reftype is object (id number, name varchar2(40), details varchar2(1000));
create table testref(c1 reftype);
insert into testref values (REFTYPE(4, 'asd', 'aaa'));
insert into testref values (REFTYPE(3, 'asf', 'baa'));
insert into testref values (REFTYPE(2, 'asg', 'aba'));
insert into testref values (REFTYPE(1, 'ash', 'aab'));
/
select * from testref;
Select는 사용자 유형의 객체를 반환합니다. 나는 SQL의 *에서 실행 플러스 내가 볼 때 :
SQL> select * from testref
REFTYPE(4, 'asd', 'aaa')
REFTYPE(3, 'asf', 'baa')
REFTYPE(2, 'asg', 'aba')
REFTYPE(1, 'ash', 'aab')
어떻게 텍스트 등의 출력을 반환하는 내 쿼리를 작성할 수 있습니다 (의는 VARCHAR2를 가정 해 봅시다).
와SQL> select substr(c1,1,4) from testref;
select substr(c1,1,4) from testref
*
ERROR at line 1:
ORA-00932: inconsistent datatypes: expected CHAR got KACPER.REFTYPE
같은 :
select substr(cast(c1 as varchar2(1000)),1,4) from testref;
그리고 텍스트가 아닌 UDT 등으로 응용 프로그램에 문자열을 대표하는 사용자 정의 형식을 보내드립니다. SQL * PLUS에서 볼 수있는 것과 동일한 varchar2 표현을 반환하는 쿼리를 작성하는 방법을 알려 줄 수 있습니까?
create or replace type reftypetab as table of reftype;
및 쿼리 : 'KACPER.REFTYPETAB(KACPER.REFTYPE(4,'asd','aaa'),KACPER.REFTYPE(3,'asf','baa'),KACPER.REFTYPE(2,'asg','aba'),KACPER.REFTYPE(1,'ash','aab'))'
또는 XML과 같이
select cast(collect(c1) as reftypetab) from testref;
내가 그 출력 중 하나 VARCHAR2로를 가지고 싶다을
편집
내 실제 케이스는 사용하고 . 그러나 호출 할 때 :
select xmltype(cast(collect(c1) as reftypetab)) from testref;
내가 가지고 :
ORA-06553: PLS-306: wrong number or types of arguments in call to 'XMLTYPE'
당신은 내가 내 TABLETYPE의 XML 또는 텍스트 표현을 얻을 수있는 방법 어떤 제안이 있습니까?
은 무엇 정확히 같은 결과를보고 싶지 않습니다이 하나 하나 (XML 문자열)의 모든 당신이 또한
또 다른 방법으로 사용할 수 있습니다 얻을 수있다? 객체의 각 필드에 대한 열? –
@AlexPoole 아니요. 'REFTYPE (4,'asd ','aaa ')' '같은 값을 하나의 열로 가져오고 싶습니다. 지금은 SQL * PLUS와 똑같은 결과를 얻고 싶지만 UDT가 아닌 varchar2가 필요합니다. – Kacper