1

私は次のように宣言されたタイプを持っています

TYPE "TABLE_TYPE" AS TABLE OF varchar2(4000)

クエリで選択している列を変換して、そのタイプを返すにはどうすればよいですか。

例えば

Select cast(to_char(sysdate) as TABLE_TYPE) from dual

エラーを返しORA-00932: inconsistent datatypes: expected - got CHARます。varchar2である列をユーザー定義型に変換する方法はありますか?

4

4 に答える 4

3

本当に単一の要素を持つコレクションを返したい場合は、型のコンストラクターを呼び出すだけです。

SQL> create type table_type as table of varchar2(100);
  2  /

Type created.

SQL> select table_type( to_char( sysdate ))
  2    from dual;

TABLE_TYPE(TO_CHAR(SYSDATE))
-----------------------------------------------------------------------------
TABLE_TYPE('14-FEB-13')

ただし、通常、コレクションを作成するときは、複数の行を返すクエリを実行して、コレクションに複数の要素を入力することを目的としています。そのためには、次のようなことをしたいと思うでしょう

DECLARE
  l_strs table_type;
BEGIN
  SELECT ename
    BULK COLLECT INTO l_strs
    FROM emp;
  <<l_strs now contains 1 element for each row in the EMP table>>
END;
于 2013-02-14T18:49:05.970 に答える
3

キャスト+マルチセットを使用

select cast(multiset(
    select to_char(sysdate-level, 'YYYYMMDD')
    from dual
    connect by level <= 10
) as t_vchar_tab)
from dual;
于 2013-02-14T20:21:47.800 に答える
2

ORA-01790を引き起こすユニオン:式は、対応する式と同じデータ型である必要があります

CREATE OR REPLACE TYPE varchar2_ntt AS TABLE OF VARCHAR2(4000);
/

SELECT deptno
    , CAST(COLLECT(ename) AS varchar2_ntt) AS emps
  FROM   scott.emp
GROUP  BY deptno
/
于 2013-02-14T19:34:15.487 に答える
1
select table_type(to_char(sysdate)) from dual;
于 2013-02-14T18:47:28.507 に答える