Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Anydata+UNPIVOT+self join=ORA-03113  [new]
Glays
Member

Откуда:
Сообщений: 2364
Oracle 11.2.0.3.0 выдаёт ошибку ORA-03113
на
WITH vals
     AS (SELECT VALUE AS val, value_type AS id_atr
           FROM (SELECT anydata.convertVarchar2 ('asdf') AS id_1,
                        anydata.convertDAte (SYSDATE) AS id_2
                   FROM DUAL) UNPIVOT (VALUE FOR value_type IN (id_1, id_2)))
SELECT *
  FROM vals JOIN vals ON 1 = 1;

Обойти могу, просто решил посмотреть, что пишут, но тем по данной проблеме не нашёл.
Если была у кого такая-же проблема, киньте ссылку.
И имеет ли смысл писать на металинк?
27 ноя 15, 12:27    [18480910]     Ответить | Цитировать Сообщить модератору
 Re: Anydata+UNPIVOT+self join=ORA-03113  [new]
600/7445
Guest
Glays
тем по данной проблеме не нашёл.
что-то вроде - убить себя одним селектом
Glays
И имеет ли смысл писать на металинк?
имеет, прикроют это извращение корректным сообщением о недопустимости операции.
unpivot_clause
The unpivot operation turns a set of value columns into one column. Therefore, the data types of all the value columns must be in the same data type group, such as numeric or character.
27 ноя 15, 12:53    [18481073]     Ответить | Цитировать Сообщить модератору
 Re: Anydata+UNPIVOT+self join=ORA-03113  [new]
dbms_photoshop
Member

Откуда: sqlmdx.net
Сообщений: 5151
600/7445
unpivot_clause
The unpivot operation turns a set of value columns into one column. Therefore, the data types of all the value columns must be in the same data type group, such as numeric or character.
Ну так тип у колонок одинаковый - ANYDATA.
Для скаляров и других объектных типов работает... только возвращает неверный результат.
set lines 150 pages 150

WITH vals
     AS (SELECT VALUE AS val, value_type AS id_atr
           FROM (SELECT 1 AS id_1,
                        2 AS id_2
                   FROM DUAL) UNPIVOT (VALUE FOR value_type IN (id_1, id_2)))
SELECT *
  FROM vals JOIN vals ON 1 = 1;

       VAL ID_A        VAL ID_A
---------- ---- ---------- ----
         1 ID_1          1 ID_1
         2 ID_2          2 ID_2
         1 ID_1          1 ID_1
         2 ID_2          2 ID_2


column val format a50

WITH vals
     AS (SELECT VALUE AS val, value_type AS id_atr
           FROM (SELECT sys.dbms_xplan_type(plan_table_output => 1) AS id_1,
                        sys.dbms_xplan_type(plan_table_output => 2) AS id_2
                   FROM DUAL) UNPIVOT (VALUE FOR value_type IN (id_1, id_2)))
SELECT *
  FROM vals JOIN vals ON 1 = 1;

VAL(PLAN_TABLE_OUTPUT)                             ID_A VAL(PLAN_TABLE_OUTPUT)                          ID_A
-------------------------------------------------- ---- -------------------------------------------------- ----
DBMS_XPLAN_TYPE('1')                               ID_1 DBMS_XPLAN_TYPE('1')                            ID_1
DBMS_XPLAN_TYPE('2')                               ID_2 DBMS_XPLAN_TYPE('2')                            ID_2
DBMS_XPLAN_TYPE('1')                               ID_1 DBMS_XPLAN_TYPE('1')                            ID_1
DBMS_XPLAN_TYPE('2')                               ID_2 DBMS_XPLAN_TYPE('2')                            ID_2



WITH vals
     AS (SELECT VALUE AS val, value_type AS id_atr
           FROM (SELECT sys.odcinumberlist(1,2,3) AS id_1,
                        sys.odcinumberlist(4,5,6) AS id_2
                   FROM DUAL) UNPIVOT (VALUE FOR value_type IN (id_1, id_2)))
SELECT *
  FROM vals JOIN vals ON 1 = 1;

VAL                                                ID_A VAL                                             ID_A
-------------------------------------------------- ---- -------------------------------------------------- ----
ODCINUMBERLIST(1, 2, 3)                            ID_1 ODCINUMBERLIST(1, 2, 3)                         ID_1
ODCINUMBERLIST(4, 5, 6)                            ID_2 ODCINUMBERLIST(4, 5, 6)                         ID_2
ODCINUMBERLIST(1, 2, 3)                            ID_1 ODCINUMBERLIST(1, 2, 3)                         ID_1
ODCINUMBERLIST(4, 5, 6)                            ID_2 ODCINUMBERLIST(4, 5, 6)                         ID_2



create or replace view v as
select anydata.convertvarchar2('asdf') as id_1
      ,anydata.convertdate(sysdate) as id_2
      ,sys.dbms_xplan_type(plan_table_output => 1) id_3
      ,sys.odcinumberlist(4, 5, 6) id_4
  from dual;

View created.


desc v;
 Name                                                                                Null?    Type
 ----------------------------------------------------------------------------------- -------- --------------------------------------------------------
 ID_1                                                                                         SYS.ANYDATA
 ID_2                                                                                         SYS.ANYDATA
 ID_3                                                                                         SYS.DBMS_XPLAN_TYPE
 ID_4                                                                                         SYS.ODCINUMBERLIST
Нативный синтаксис решает проблему с wrong results.
27 ноя 15, 13:50    [18481438]     Ответить | Цитировать Сообщить модератору
 Re: Anydata+UNPIVOT+self join=ORA-03113  [new]
dbms_photoshop
Member

Откуда: sqlmdx.net
Сообщений: 5151
WITH vals
     AS (SELECT VALUE AS val, value_type AS id_atr
           FROM (SELECT sys.odcinumberlist(1,2,3) AS id_1,
                        sys.odcinumberlist(4,5,6) AS id_2
                   FROM DUAL) UNPIVOT (VALUE FOR value_type IN (id_1, id_2)))
SELECT *
  FROM vals v1, vals v2;

VAL                                                ID_A VAL                                             ID_A
-------------------------------------------------- ---- -------------------------------------------------- ----
ODCINUMBERLIST(1, 2, 3)                            ID_1 ODCINUMBERLIST(1, 2, 3)                         ID_1
ODCINUMBERLIST(1, 2, 3)                            ID_1 ODCINUMBERLIST(4, 5, 6)                         ID_2
ODCINUMBERLIST(4, 5, 6)                            ID_2 ODCINUMBERLIST(1, 2, 3)                         ID_1
ODCINUMBERLIST(4, 5, 6)                            ID_2 ODCINUMBERLIST(4, 5, 6)                         ID_2


create table vals
     AS (SELECT VALUE AS val, value_type AS id_atr
           FROM (SELECT anydata.convertVarchar2 ('asdf') AS id_1,
                        anydata.convertDAte (SYSDATE) AS id_2
                   FROM DUAL) UNPIVOT (VALUE FOR value_type IN (id_1, id_2)));

Table created.


SELECT *
  FROM vals v1, vals v2;

VAL()                                              ID_A VAL()                                           ID_A
-------------------------------------------------- ---- -------------------------------------------------- ----
ANYDATA()                                          ID_1 ANYDATA()                                       ID_1
ANYDATA()                                          ID_1 ANYDATA()                                       ID_2
ANYDATA()                                          ID_2 ANYDATA()                                       ID_1
ANYDATA()                                          ID_2 ANYDATA()                                       ID_2


WITH vals
     AS (SELECT VALUE AS val, value_type AS id_atr
           FROM (SELECT anydata.convertVarchar2 ('asdf') AS id_1,
                        anydata.convertDAte (SYSDATE) AS id_2
                   FROM DUAL) UNPIVOT (VALUE FOR value_type IN (id_1, id_2)))
SELECT *
  FROM vals v1, vals v2;
WITH vals
*
ERROR at line 1:
ORA-03113: end-of-file on communication channel
27 ноя 15, 13:59    [18481492]     Ответить | Цитировать Сообщить модератору
 Re: Anydata+UNPIVOT+self join=ORA-03113  [new]
cross join
Guest
dbms_photoshop
Нативный синтаксис решает проблему с wrong results.
ошибочный результат c манипуляциями констант из fast dual достаточно частое явление и без пивотов с анси-джоинами. Но в совокупности, шансов избежать ошибок не было.
27 ноя 15, 14:00    [18481496]     Ответить | Цитировать Сообщить модератору
 Re: Anydata+UNPIVOT+self join=ORA-03113  [new]
dbms_photoshop
Member

Откуда: sqlmdx.net
Сообщений: 5151
WITH vals
     AS (SELECT --+ inline
                VALUE AS val, value_type AS id_atr
           FROM (SELECT anydata.convertVarchar2 ('asdf') AS id_1,
                        anydata.convertDAte (SYSDATE) AS id_2
                   FROM DUAL) UNPIVOT (VALUE FOR value_type IN (id_1, id_2)))
select *
  from vals v1, vals v2;

VAL()                                              ID_A VAL()                                           ID_A
-------------------------------------------------- ---- -------------------------------------------------- ----
ANYDATA()                                          ID_1 ANYDATA()                                       ID_1
ANYDATA()                                          ID_1 ANYDATA()                                       ID_2
ANYDATA()                                          ID_2 ANYDATA()                                       ID_1
ANYDATA()                                          ID_2 ANYDATA()                                       ID_2


WITH vals
     AS (SELECT VALUE AS val, value_type AS id_atr
           FROM (SELECT anydata.convertVarchar2 ('asdf') AS id_1,
                        anydata.convertDAte (SYSDATE) AS id_2
                   FROM DUAL) UNPIVOT (VALUE FOR value_type IN (id_1, id_2)))
select *
  from vals v1;

VAL()                                              ID_A
-------------------------------------------------- ----
ANYDATA()                                          ID_1
ANYDATA()                                          ID_2


WITH vals
     AS (SELECT --+ materialize
                VALUE AS val, value_type AS id_atr
           FROM (SELECT anydata.convertVarchar2 ('asdf') AS id_1,
                        anydata.convertDAte (SYSDATE) AS id_2
                   FROM DUAL) UNPIVOT (VALUE FOR value_type IN (id_1, id_2)))
select *
  from vals v1;
WITH vals
*
ERROR at line 1:
ORA-03113: end-of-file on communication channel
Process ID: 6824
Session ID: 983 Serial number: 597
27 ноя 15, 14:05    [18481529]     Ответить | Цитировать Сообщить модератору
 Re: Anydata+UNPIVOT+self join=ORA-03113  [new]
dbms_photoshop
Member

Откуда: sqlmdx.net
Сообщений: 5151
cross join
dbms_photoshop
Нативный синтаксис решает проблему с wrong results.
ошибочный результат c манипуляциями констант из fast dual достаточно частое явление и без пивотов с анси-джоинами. Но в совокупности, шансов избежать ошибок не было.
Дело не в константах и dual а в отсутствии алиасов и конвертации в native syntax.
WITH vals
     AS (SELECT VALUE AS val, value_type AS id_atr
           FROM (SELECT 1 AS id_1,
                        2 AS id_2
                   FROM DUAL) UNPIVOT (VALUE FOR value_type IN (id_1, id_2)))
SELECT *
  FROM vals v1 JOIN vals v2 ON 1 = 1;

       VAL ID_A        VAL ID_A
---------- ---- ---------- ----
         1 ID_1          1 ID_1
         1 ID_1          2 ID_2
         2 ID_2          1 ID_1
         2 ID_2          2 ID_2
27 ноя 15, 14:10    [18481567]     Ответить | Цитировать Сообщить модератору
 Re: Anydata+UNPIVOT+self join=ORA-03113  [new]
Glays
Member

Откуда:
Сообщений: 2364
dbms_photoshop
cross join
пропущено...
ошибочный результат c манипуляциями констант из fast dual достаточно частое явление и без пивотов с анси-джоинами. Но в совокупности, шансов избежать ошибок не было.
Дело не в константах и dual а в отсутствии алиасов и конвертации в native syntax.


видимо всё таки дело в константах

CREATE TABLE test1
AS
   (SELECT anydata.convertVarchar2 ('asdf') AS id_1,
           anydata.convertDAte (SYSDATE) AS id_2
      FROM DUAL);

WITH vals
     AS (SELECT VALUE AS val, value_type AS id_atr
           FROM test1 UNPIVOT (VALUE FOR value_type IN (id_1, id_2)))
SELECT *
  FROM vals JOIN vals ON 1 = 1;

Table created.

VAL ID_ATR VAL_1 ID_ATR_1
--- ------ ----- --------
(AD ID_1   (ADT) ID_1    
                       
                                                                                
(AD ID_2   (ADT) ID_2    
                       
                                                                                
(AD ID_1   (ADT) ID_1    
                       
                                                                                
(AD ID_2   (ADT) ID_2    
                       


Ни одинаковые типы внутри anydata, ни нативные джойны, ни алиасы не спасают. Ну и fast dual тоже не виноват

CREATE TABLE dual1
AS
   (SELECT *
      FROM DUAL);


WITH vals
     AS (SELECT VALUE AS val, value_type AS id_atr
           FROM (SELECT anydata.convertVarchar2 ('asdf') AS id_1,
                        anydata.convertVarchar2 ('asdwwf') AS id_2
                   FROM DUAL1) UNPIVOT (VALUE FOR value_type IN (id_1, id_2)))


Table created.
                                    *
Error at line 2
ORA-03113: принят сигнал конца файла по коммуникационному каналу
Идентификатор процесса: 12721
Идентификатор сеанса: 314 Порядковый номер: 28687

Script Terminated on line 7.
30 ноя 15, 10:19    [18490345]     Ответить | Цитировать Сообщить модератору
 Re: Anydata+UNPIVOT+self join=ORA-03113  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
dbms_photoshop,

+
Присоединен к:
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing opt
ions

SQL> set lines 200 headsep off
SQL> spool o1
SQL> WITH vals
  2       AS (SELECT --+ materialize
  3                  VALUE AS val, value_type AS id_atr
  4             FROM (SELECT anydata.convertVarchar2 ('asdf') AS id_1,
  5                          anydata.convertDAte (SYSDATE) AS id_2
  6                     FROM DUAL) UNPIVOT (VALUE FOR value_type IN (id_1, id_2)
))
  7  select *
  8    from vals v1;

VAL()
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
----------------------------------------
ID_A
----

ID_1


ID_2
30 ноя 15, 12:58    [18491544]     Ответить | Цитировать Сообщить модератору
 Re: Anydata+UNPIVOT+self join=ORA-03113  [new]
dbms_photoshop
Member

Откуда: sqlmdx.net
Сообщений: 5151
Glays
видимо всё таки дело в константах
Теперь посмотри винмательно на результат и на то, что я писал выше - 18481438.
Glays
Ни одинаковые типы внутри anydata, ни нативные джойны, ни алиасы не спасают. Ну и fast dual тоже не виноват
Перечитай все еще раз и посмотри на пример с inline - 18481529.
30 ноя 15, 14:10    [18492096]     Ответить | Цитировать Сообщить модератору
 Re: Anydata+UNPIVOT+self join=ORA-03113  [new]
dbms_photoshop
Member

Откуда: sqlmdx.net
Сообщений: 5151
orawish,

А изначальный пример с self join тоже работает?
И даже если в него materialize впихнуть?
30 ноя 15, 14:11    [18492108]     Ответить | Цитировать Сообщить модератору
 Re: Anydata+UNPIVOT+self join=ORA-03113  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
dbms_photoshop,

да, все три примера работают
30 ноя 15, 14:24    [18492196]     Ответить | Цитировать Сообщить модератору
 Re: Anydata+UNPIVOT+self join=ORA-03113  [new]
dbms_photoshop
Member

Откуда: sqlmdx.net
Сообщений: 5151
orawish,

Ну а твое любимое dbms_random.value?
30 ноя 15, 14:46    [18492348]     Ответить | Цитировать Сообщить модератору
 Re: Anydata+UNPIVOT+self join=ORA-03113  [new]
Glays
Member

Откуда:
Сообщений: 2364
dbms_photoshop
Перечитай все еще раз и посмотри на пример с inline - 18481529.

Да, пропустил этот ответ, спасибо.

orawish, спасибо.
30 ноя 15, 14:51    [18492391]     Ответить | Цитировать Сообщить модератору
 Re: Anydata+UNPIVOT+self join=ORA-03113  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
dbms_photoshop
orawish,

Ну а твое любимое dbms_random.value?


А этот - ушел и не вернулся
его и выполнять не надо - достаточно план попросить

ORA-03113: принят сигнал конца файла по коммуникационному каналу
30 ноя 15, 15:01    [18492489]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить