powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Ошибка rowid при объединений таблиц
25 сообщений из 32, страница 1 из 2
Ошибка rowid при объединений таблиц
    #39765572
gepka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте Уважаемые форумачене! Имеется такие таблица 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
Ошибка rowid при объединений таблиц
    #39765598
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gepkaне убирая ROWID с запроса?заключи rowid в одинарный кавычки.
...
Рейтинг: 0 / 0
Ошибка rowid при объединений таблиц
    #39765603
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gepkaМожете объяснить как можно решить эту проблему, не убирая ROWID с запроса?Ты хочешь выстрелить себе в ногу и при этом ещё и зовёшь нас в соучастники?!

http://www.bugtraq.ru/forum/faq/general/smart-questions.html] RTFM
...
Рейтинг: 0 / 0
Ошибка rowid при объединений таблиц
    #39765622
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А тебя не смущает что 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
Ошибка rowid при объединений таблиц
    #39765684
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gepka,

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

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

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

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

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

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

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


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

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

pss

21795363 не на всех версиях отработает
.....
stax
...
Рейтинг: 0 / 0
Ошибка rowid при объединений таблиц
    #39765731
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Staxпричем в етом случае нога?Зачем ТС-у rowid?
...
Рейтинг: 0 / 0
Ошибка rowid при объединений таблиц
    #39765759
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Ошибка rowid при объединений таблиц
    #39765760
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StaxTyp=1 ето как-бы varchar2У dump три оверлоада и среди них нет rowid
...
Рейтинг: 0 / 0
Ошибка rowid при объединений таблиц
    #39765816
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-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
Ошибка rowid при объединений таблиц
    #39765844
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax-2-пропущено...
У dump три оверлоада и среди них нет rowid
почему тогда?Значит я промахнулся. Смотреть нужно не в overloadы standard.dump, а в "оверлоады" plsqlного standard.rowid.
...
Рейтинг: 0 / 0
Ошибка rowid при объединений таблиц
    #39765858
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-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
Ошибка rowid при объединений таблиц
    #39765864
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Staxкакой expression must have?Ту уже
-2-Смотреть … в "оверлоады" plsqlного standard.rowid?
...
Рейтинг: 0 / 0
Ошибка rowid при объединений таблиц
    #39765893
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Ошибка rowid при объединений таблиц
    #39765953
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Staxмне ето не понять
Код: plsql
1.
select * from all_source where name = 'STANDARD' and lower(text) like '%rowid% is%';
...
Рейтинг: 0 / 0
Ошибка rowid при объединений таблиц
    #39765975
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Ошибка rowid при объединений таблиц
    #39765988
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Ошибка rowid при объединений таблиц
    #39766015
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Ошибка rowid при объединений таблиц
    #39766043
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Ошибка rowid при объединений таблиц
    #39766052
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
25 сообщений из 32, страница 1 из 2
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Ошибка rowid при объединений таблиц
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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