Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Странный код от программистов / 8 сообщений из 8, страница 1 из 1
18.10.2019, 17:06
    #39878399
IronMike
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странный код от программистов
Всем привет!
Достался в наследство такой код:

select fff.id_cont, max(k.item_name) as item_name
from transit2.fin_params_cont@sun fff
left join transit2.INF_INFOGROUP_ITEMS_C_TYP@sun k on k.id_item=fff.value.AccessVarchar2()
where fff.param='CONTRACT_TYPE'
group by fff.id_cont

Он всё правильно выгружает. Но когда я пытаюсь его завернуть в left join, то подтягивает некорректные данные.
Почему?

+ что такое и как работает fff.value.AccessVarchar2 ? я гуглил, но инфа не очень понятно написана...
...
Рейтинг: 0 / 0
18.10.2019, 17:09
    #39878403
large5
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странный код от программистов
потому что для оракла пиши по оракловски и не надо тут это ansiвщину разводить .
...
Рейтинг: 0 / 0
18.10.2019, 17:29
    #39878421
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странный код от программистов
IronMike,

ANYDATA

SY.
...
Рейтинг: 0 / 0
18.10.2019, 17:38
    #39878432
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странный код от программистов
IronMike я гуглил, но инфа не очень понятно написана...

Доку читай. Ну и свой left join то покажи.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
SQL> create table tbl(val anydata)
  2  /

Table created.

SQL> insert
  2    into tbl
  3    values(anydata.convertvarchar2('String'))
  4  /

1 row created.

SQL> insert
  2    into tbl
  3    values(anydata.convertnumber(12345))
  4  /

1 row created.

SQL> insert
  2    into tbl
  3    values(anydata.convertdate(sysdate))
  4  /

1 row created.

SQL> commit;

Commit complete.

SQL> select  count(*)
  2    from  tbl t
  3    where 'String' = t.val.accessvarchar2()
  4  /

  COUNT(*)
----------
         1

SQL> select  count(*)
  2    from  tbl t
  3    where 12345 = t.val.accessnumber()
  4  /

  COUNT(*)
----------
         1

SQL> column VAL_TYPE format a20
SQL> column val format a30
SQL> select  *
  2    from  tbl
  3  /

VAL()
------------------------------
ANYDATA()
ANYDATA()
ANYDATA()

SQL> select  t.val.gettypename() val_type,
  2          case t.val.gettypename()
  3            when 'SYS.VARCHAR2' then t.val.accessvarchar2()
  4            when 'SYS.NUMBER' then to_char(t.val.accessnumber())
  5            when 'SYS.DATE' then to_char(t.val.accessdate(),'MM/DD/YYYY HH24:MI:SS')
  6          end val
  7    from  tbl t
  8  /

VAL_TYPE             VAL
-------------------- ------------------------------
SYS.VARCHAR2         String
SYS.NUMBER           12345
SYS.DATE             10/18/2019 10:24:23

SQL>  



SY.
...
Рейтинг: 0 / 0
18.10.2019, 17:52
    #39878446
IronMike
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странный код от программистов
large5,
Ну так ведь без left joinа всё правильно выгружает))

Мой left join очень простой:


left join (select fff.id_cont, max(k.item_name) as item_name
from transit2.fin_params_cont@sun fff
left join transit2.INF_INFOGROUP_ITEMS_C_TYP@sun k on k.id_item=fff.value.AccessVarchar2()
where fff.param='CONTRACT_TYPE'
group by fff.id_cont) tt on u1.transit_id=tt.id_cont
...
Рейтинг: 0 / 0
18.10.2019, 19:14
    #39878496
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странный код от программистов
IronMike,

На то он и outer чтобы подтягивать. Ты получишь все что выбрано из U1 независимо есть ли соответствие в TT по u1.transit_id=tt.id_cont или нет.

SY.
...
Рейтинг: 0 / 0
18.10.2019, 19:37
    #39878503
IronMike
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странный код от программистов
SY,
Условно, в таблице есть 10 разных значений, по после left join подтягивается только одно.
Как это исправить?
...
Рейтинг: 0 / 0
18.10.2019, 23:51
    #39878576
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странный код от программистов
IronMikeУсловно, в таблице есть 10 разных значений, по после left join подтягивается только одно.
Как это исправить?

В какой таблице? Начни уж говорить внятно. Если ты про TT, то left join между U1 & TT вернет все строки U1 и только те строки TT у которых u1.transit_id=tt.id_cont.

SY.
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Странный код от программистов / 8 сообщений из 8, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]