Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Ошибка rowid при объединений таблиц / 25 сообщений из 32, страница 1 из 2
27.01.2019, 20:14
    #39765572
gepka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка rowid при объединений таблиц
Здравствуйте Уважаемые форумачене! Имеется такие таблица T_PERSON с такими данными:
Код: sql
1.
2.
3.
4.
5.
6.
7.
Name                           NULL     TYPE                                                                                                                                                                                          
------------------------------ -------- -----------------------
CODE                           NOT NULL NUMBER(30)                                                                                                                                                                                    
LASTNAME                    NOT NULL VARCHAR2(100)                                                                                                                                                                                 
FIRST_NAME                 NOT NULL VARCHAR2(100)                                                                                                                                                                                 
SECONDNAME                               VARCHAR2(100)                                                                                                                                                                                 
BIRTHDAY                    NOT NULL DATE


При таком запросе все корректно отрабатывается:
Код: sql
1.
2.
3.
SELECT DISTINCT code, lastname, first_name, secondname, birthday FROM T_PERSON
WHERE code>0 AND (UPPER(first_name)= UPPER('Jennifer')) UNION SELECT 1, BANNER, 'first_name', 'secondname', 
sysdate FROM V$VERSION;


Но, если ввести такой запрос ругается на ошибку ROWID:
01445. 00000 - "cannot select ROWID from, or sample, a join view without a key-preserved table"
Код: sql
1.
2.
3.
SELECT DISTINCT rowid, code, lastname, first_name, secondname, birthday FROM T_PERSON
WHERE code>0 AND (UPPER(first_name)= UPPER('Jennifer')) UNION SELECT rowid, 1, BANNER, 'first_name', 'secondname', 
sysdate FROM V$VERSION;


Можете объяснить как можно решить эту проблему, не убирая ROWID с запроса?
...
Рейтинг: 0 / 0
27.01.2019, 21:26
    #39765598
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка rowid при объединений таблиц
gepkaне убирая ROWID с запроса?заключи rowid в одинарный кавычки.
...
Рейтинг: 0 / 0
27.01.2019, 21:41
    #39765603
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка rowid при объединений таблиц
gepkaМожете объяснить как можно решить эту проблему, не убирая ROWID с запроса?Ты хочешь выстрелить себе в ногу и при этом ещё и зовёшь нас в соучастники?!

http://www.bugtraq.ru/forum/faq/general/smart-questions.html] RTFM
...
Рейтинг: 0 / 0
27.01.2019, 23:02
    #39765622
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка rowid при объединений таблиц
А тебя не смущает что V$VERSION это view и посему ROWID не имеет и не может иметь по определению? Все что view может это показать ROWID key-preserved таблицы (ежели такая во view имеется). И Oracle тебе прямо намекает: "cannot select ROWID from, or sample, a join view without a key-preserved table"

SY.
...
Рейтинг: 0 / 0
28.01.2019, 09:50
    #39765684
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка rowid при объединений таблиц
gepka,

rowid даст уникальность
DISTINCT лишний

оптимизатор может и справится, но я б убрал с селекта

.....
stax
...
Рейтинг: 0 / 0
28.01.2019, 10:11
    #39765696
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка rowid при объединений таблиц
Staxдаст уникальность огласите весь список!
...
Рейтинг: 0 / 0
28.01.2019, 10:17
    #39765702
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка rowid при объединений таблиц
-2-Staxдаст уникальность огласите весь список!
не понял про список

rowid даст уникальность строки (rowid, code, lastname, first_name, secondname, birthday) в выборке

....
stax
...
Рейтинг: 0 / 0
28.01.2019, 10:19
    #39765705
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка rowid при объединений таблиц
Staxrowid даст уникальность строки
Код: plsql
1.
2.
3.
4.
5.
6.
7.
SQL> select rowid from dual connect by level <= 3;

ROWID
------------------
AAAAECAABAAAAgiAAA
AAAAECAABAAAAgiAAA
AAAAECAABAAAAgiAAA
...
Рейтинг: 0 / 0
28.01.2019, 10:22
    #39765709
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка rowid при объединений таблиц
Elic,

авторИмеется такие таблица T_PERSON с такими данными:


....
stax
...
Рейтинг: 0 / 0
28.01.2019, 10:31
    #39765712
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка rowid при объединений таблиц
Станислав, твоя проблема в том, что ты всегда с готовностью лезешь подбирать оружие и боеприпасы для выстрела в ногу.
...
Рейтинг: 0 / 0
28.01.2019, 10:51
    #39765726
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка rowid при объединений таблиц
ElicСтанислав, твоя проблема в том, что ты всегда с готовностью лезешь подбирать оружие и боеприпасы для выстрела в ногу.
причем в етом случае нога?
наоборот, в в етот раз я внимательно прочитал вопрос в части что T_PERSON таблица

ps
в запросе UNION, что тоже даст ненужний общий DISTINCT

pss

21795363 не на всех версиях отработает
.....
stax
...
Рейтинг: 0 / 0
28.01.2019, 11:04
    #39765731
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка rowid при объединений таблиц
Staxпричем в етом случае нога?Зачем ТС-у rowid?
...
Рейтинг: 0 / 0
28.01.2019, 11:32
    #39765759
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка rowid при объединений таблиц
ElicStaxпричем в етом случае нога?Зачем ТС-у rowid?

откуда мне знать

ps
FROM V$VERSION тоже странно, скорее всего ето просто схема(структура) запроса,
а не реальный запрс


зии
раз уж зашел разговор о rowid
DBMS_ROWID.ROWID_CREATE как бы должна возвращать ровид, а чет у меня не выходит


авторROWID_CREATE Function
This function lets you create a ROWID, given the component parts as parameters.

This is useful for testing ROWID operations, because only the Oracle Server can create a valid ROWID that points to data in a database.

Syntax

DBMS_ROWID.ROWID_CREATE (
rowid_type IN NUMBER,
object_number IN NUMBER,
relative_fno IN NUMBER,
block_number IN NUMBER,
row_number IN NUMBER)


RETURN ROWID;


Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
  1  SELECT dump(DBMS_ROWID.ROWID_CREATE(0, 9999, 12, 1000, 13))  FROM dual
  2  union all
  3* SELECT dump(DBMS_ROWID.ROWID_CREATE(1, 9999, 12, 1000, 13))  FROM dual
sql> /

DUMP(DBMS_ROWID.ROWID_CREATE(0,9999,12,1000,13))
---------------------------------------------------------------------------------------------------------------
Typ=1 Len=18: 48,48,48,48,48,51,69,56,46,48,48,48,68,46,48,48,48,67
Typ=1 Len=18: 65,65,65,67,99,80,65,65,77,65,65,65,65,80,111,65,65,78



Typ=1 ето как-бы varchar2
.....
stax
...
Рейтинг: 0 / 0
28.01.2019, 11:36
    #39765760
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка rowid при объединений таблиц
StaxTyp=1 ето как-бы varchar2У dump три оверлоада и среди них нет rowid
...
Рейтинг: 0 / 0
28.01.2019, 12:50
    #39765816
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка rowid при объединений таблиц
-2-StaxTyp=1 ето как-бы varchar2У dump три оверлоада и среди них нет rowid
почему тогда?
Код: 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.
SQL> SELECT rowid,dummy  FROM dual
  2  union all
  3  SELECT DBMS_ROWID.ROWID_CREATE(1, 9999, 12, 1000, 13),'y'  FROM dual
  4  /
SELECT rowid,dummy  FROM dual
       *
ERROR at line 1:
ORA-01790: expression must have same datatype as corresponding expression


SQL> ed
Wrote file afiedt.buf

  1  SELECT rowid,dummy  FROM dual
  2  union all
  3* SELECT DBMS_ROWID.ROWID_CREATE(0, 9999, 12, 1000, 13),'y'  FROM dual
SQL> /
SELECT rowid,dummy  FROM dual
       *
ERROR at line 1:
ORA-01790: expression must have same datatype as corresponding expression



SQL> ed
Wrote file afiedt.buf

  1  SELECT rowid,dump(rowid)  FROM dual
  2  union all
  3* SELECT chartorowid(DBMS_ROWID.ROWID_CREATE(1, 9999, 12, 1000, 13)),'y'  FROM dual
SQL> /

ROWID              DUMP(ROWID)
------------------ --------------------------------------------------------------------------------
AAAAB0AABAAAAOhAAA Typ=69 Len=10: 0,0,0,116,0,64,3,161,0,0
AAACcPAAMAAAAPoAAN y



ps
Код: plaintext
1.
2.
Oracle Type Code Mappings
Data Type	Uniform Type Code	DUMP
ROWID	        69	                69

.....
stax
...
Рейтинг: 0 / 0
28.01.2019, 13:23
    #39765844
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка rowid при объединений таблиц
Stax-2-пропущено...
У dump три оверлоада и среди них нет rowid
почему тогда?Значит я промахнулся. Смотреть нужно не в overloadы standard.dump, а в "оверлоады" plsqlного standard.rowid.
...
Рейтинг: 0 / 0
28.01.2019, 13:36
    #39765858
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка rowid при объединений таблиц
-2-,

я не про dump, я о DBMS_ROWID.ROWID_CREATE
какой expression must have?
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
SQL> SELECT rowid,dummy  FROM dual
  2  union all
  3  SELECT DBMS_ROWID.ROWID_CREATE(0, 9999, 12, 1000, 13),'y'  FROM dual
  4  /
SELECT rowid,dummy  FROM dual
       *
ERROR at line 1:
ORA-01790: expression must have same datatype as corresponding expression


SQL> ed
Wrote file afiedt.buf

  1  SELECT rowid,dummy  FROM dual
  2  union all
  3* SELECT DBMS_ROWID.ROWID_CREATE(1, 9999, 12, 1000, 13),'y'  FROM dual
SQL> /
SELECT rowid,dummy  FROM dual
       *
ERROR at line 1:
ORA-01790: expression must have same datatype as corresponding expression



.....
stax
...
Рейтинг: 0 / 0
28.01.2019, 13:39
    #39765864
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка rowid при объединений таблиц
Staxкакой expression must have?Ту уже
-2-Смотреть … в "оверлоады" plsqlного standard.rowid?
...
Рейтинг: 0 / 0
28.01.2019, 14:00
    #39765893
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка rowid при объединений таблиц
ElicStaxкакой expression must have?Ту уже
-2-Смотреть … в "оверлоады" plsqlного standard.rowid?

завязываем, мне ето не понять

Код: 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.
SQL> ed
Wrote file afiedt.buf

  1  declare
  2   w1 rowid;
  3   w2 rowid;
  4  begin
  5   w1:=DBMS_ROWID.ROWID_CREATE(1, 9999, 12, 1000, 13);
  6   select DBMS_ROWID.ROWID_CREATE(1, 9999, 12, 1000, 13) into w2 from dual;
  7   dbms_output.put_line(w1);
  8   dbms_output.put_line(w2);
  9   for r in (
 10     select rowid from dual
 11     union all
 12     select DBMS_ROWID.ROWID_CREATE(1, 9999, 12, 1000, 13) from dual) loop
 13    null;
 14   end loop;
 15* end;
SQL> /
AAACcPAAMAAAAPoAAN
AAACcPAAMAAAAPoAAN
declare
*
ERROR at line 1:
ORA-01790: expression must have same datatype as corresponding expression
ORA-06512: at line 9



....
stax
...
Рейтинг: 0 / 0
28.01.2019, 15:03
    #39765953
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка rowid при объединений таблиц
Staxмне ето не понять
Код: plsql
1.
select * from all_source where name = 'STANDARD' and lower(text) like '%rowid% is%';
...
Рейтинг: 0 / 0
28.01.2019, 15:47
    #39765975
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка rowid при объединений таблиц
ElicStaxмне ето не понять
Код: plsql
1.
select * from all_source where name = 'STANDARD' and lower(text) like '%rowid% is%';


я ето знаю, не понимаю как им пользоваться
напр
Код: plsql
1.
2.
    pragma interface (c,peslik4);
  subtype ROWID is VARCHAR2(256);



почему union all слетает, а напр into нет

повторюсь
для меня ето непринципиально, так для общего развития

....
stax
...
Рейтинг: 0 / 0
28.01.2019, 16:01
    #39765988
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка rowid при объединений таблиц
Staxпочему union all слетает,RTFMThe corresponding expressions in the select lists of the component queries of a compound query must match in number and must be in the same data type group (such as numeric or character).
...
Рейтинг: 0 / 0
28.01.2019, 16:25
    #39766015
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка rowid при объединений таблиц
Staxне понимаю как им пользоваться
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
with t as (select DBMS_ROWID.ROWID_CREATE(1, 142, 1, 573, 0) r_str from dual)
select cast(r_str as rowid) rid, r_str from t
union all select rowid, rowidtochar(rowid) from dual;
RID                R_STR
------------------ ------------------
AAAACOAABAAAAI9AAA AAAACOAABAAAAI9AAA
AAAACOAABAAAAI9AAA AAAACOAABAAAAI9AAA

SQL> 
...
Рейтинг: 0 / 0
28.01.2019, 16:47
    #39766043
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка rowid при объединений таблиц
andrey_anonymousStaxне понимаю как им пользоваться
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
with t as (select DBMS_ROWID.ROWID_CREATE(1, 142, 1, 573, 0) r_str from dual)
select cast(r_str as rowid) rid, r_str from t
union all select rowid, rowidtochar(rowid) from dual;
RID                R_STR
------------------ ------------------
AAAACOAABAAAAI9AAA AAAACOAABAAAAI9AAA
AAAACOAABAAAAI9AAA AAAACOAABAAAAI9AAA

SQL> 



с етим понятно (cast или chartorowid)

21795611
почему DBMS_ROWID.ROWID_CREATE(1, 142, 1, 573, 0) str (varchar2)?

.....
stax
...
Рейтинг: 0 / 0
28.01.2019, 16:52
    #39766052
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка rowid при объединений таблиц
ElicStaxпочему union all слетает,RTFMThe corresponding expressions in the select lists of the component queries of a compound query must match in number and must be in the same data type group (such as numeric or character).

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
SQL> select rowid r1 from dual
  2  union all
  3  select DBMS_ROWID.ROWID_CREATE(1, 9999, 12, 1000, 13) r2 from dual
  4  /
select rowid from dual
       *
ERROR at line 1:
ORA-01790: expression must have same datatype as corresponding expression


r1 тип rowid
r2 тип должен быть rowid (the same data type)

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
FUNCTION ROWID_CREATE RETURNS ROWID
 Argument Name                  Type                    In/Out Default?
 ------------------------------ ----------------------- ------ --------
 ROWID_TYPE                     NUMBER                  IN
 OBJECT_NUMBER                  NUMBER                  IN
 RELATIVE_FNO                   NUMBER                  IN
 BLOCK_NUMBER                   NUMBER                  IN
 ROW_NUMBER                     NUMBER                  IN



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


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