Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / merge statement... / 5 сообщений из 5, страница 1 из 1
17.06.2003, 11:51:32
    #32184031
gda
gda
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
merge statement...
Dve identicinie tabliti:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
SQL> desc test_1;
Name     Type         Nullable Default Comments 
 -------- ------------ -------- ------- -------- 
 
EMPNO    NUMBER( 4 )                              
ENAME    VARCHAR2( 10 ) Y                         
JOB      VARCHAR2( 9 )  Y                         
MGR      NUMBER( 4 )    Y                         
HIREDATE DATE         Y                         
SAL      NUMBER( 7 , 2 )  Y                         
COMM     NUMBER( 7 , 2 )  Y                         
DEPTNO   NUMBER( 2 )    Y                         

SQL> desc emp1;
Name     Type         Nullable Default Comments 
 -------- ------------ -------- ------- -------- 
 
EMPNO    NUMBER( 4 )                              
ENAME    VARCHAR2( 10 ) Y                         
JOB      VARCHAR2( 9 )  Y                         
MGR      NUMBER( 4 )    Y                         
HIREDATE DATE         Y                         
SAL      NUMBER( 7 , 2 )  Y                         
COMM     NUMBER( 7 , 2 )  Y                         
DEPTNO   NUMBER( 2 )    Y        


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
SQL>select * from emp1;

     EMPNO ENAME      JOB              MGR HIREDATE          SAL       COMM     DEPTNO
 ---------- ---------- --------- ---------- ---------- ---------- ---------- ----------
 
       7369  SMITH      CLERK            7902   17 - 12 - 1980          800                      20 
       7499  ALLEN      SALESMAN         7698   20 - 02 - 1981         1600          300           30 
       7521  WARD       SALESMAN         7698   22 - 02 - 1981         1250          500           30 
       7566  JONES      MANAGER          7839   02 - 04 - 1981         2975                      20 
       7654  MARTIN     SALESMAN         7698   28 - 09 - 1981         1250         1400           30 
       7698  BLAKE      MANAGER          7839   01 - 05 - 1981         2850                      30 
       7782  CLARK      MANAGER          7839   09 - 06 - 1981         2450                      10 
       7788  SCOTT      ANALYST          7566   09 - 12 - 1982         3000                      20 
       7839  KING       PRESIDENT             17 - 11 - 1981         5000                      10 
       7844  TURNER     SALESMAN         7698   08 - 09 - 1981         1500            0           30 
       7876  ADAMS      CLERK            7788   12 - 01 - 1983         1100                      20 
       7900  JAMES      CLERK            7698   03 - 12 - 1981          950                      30 
       7902  FORD       ANALYST          7566   03 - 12 - 1981         3000                      20 
       7934  MILLER     CLERK            7782   23 - 01 - 1982         1300                      10 

 14  rows selected.

SQL>select * from test_1;

no rows selected


Pisu:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
merge into test_1 [color=red]AS[/color] a
using emp1 AS b
on (a.empno = b.empno)
when matched then
update set a.empno    = b.empno,
       set a.ename    = b.ename,
       set a.job      = b.job,
       set a.mgr      = b.mgr,
       set a.hiredate = b.hiredate,
       set a.sal      = b.sal,
       set a.comm     = b.comm,
       set a.deptno   = b.deptno
when not matched then
insert values (b.empno, b.ename, b.job, b.mgr, b.hiredate, b.sal, b.comm, b.deptno)


Viscachivaet:
Код: plaintext
ORA- 02012 : missing USING keyword


Ne mogu poniati pocemu vrode po doke delaiu ??? Nu ladna ubiraiu i AS i pisu:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
merge into test_1 a
using emp1 b
on (a.empno = b.empno)
when matched then
update set a.empno    = b.empno,
       set a.ename    = b.ename,
       set a.job      = b.job,
       set a.mgr      = b.mgr,
       set a.hiredate = b.hiredate,
       set a.sal      = b.sal,
       set a.comm     = b.comm,
       set a.deptno   = b.deptno
when not matched then
insert values (b.empno, b.ename, b.job, b.mgr, b.hiredate, b.sal, b.comm, b.deptno)


Viscachivaet drugaia osibca: ORA-01747: invalid user.table.column, table.column, or column specification

Obiesnite cto nibudi v cem delo !!!

Spasibo
...
Рейтинг: 0 / 0
17.06.2003, 11:54:18
    #32184042
gda
gda
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
merge statement...
> merge into test_1 AS a
:) nu canesno bez
...
Рейтинг: 0 / 0
17.06.2003, 12:38:49
    #32184124
Denis Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
merge statement...
Во-первых, set'ов у тебя многовато:) А во-вторых, как это ни странно, но явного указания на подобное поведение я не нашал, а суть в следующем: поля, используемые в выражении ON, не должны использоваться в выражении UPDATE:
Код: plaintext
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.
dan@oraspb>; create table emp2 as 
   2     select * from scott.emp where mod(empno, 2 ) =  0 ;

Table created.

dan@oraspb>; merge into emp2 q
   2   using (
   3     select e.empno, e.ename, e.job, e.mgr, e.hiredate, e.sal, e.comm, e.deptno
   4     from scott.emp e
   5     ) e
   6   on (q.empno = e.empno)
   7   when matched then
   8     update set
   9         q.empno = e.empno,
  10         q.ename = e.ename,
  11         q.job = e.job,
  12         q.mgr = e.mgr,
  13         q.hiredate = e.hiredate,
  14         q.sal = e.sal,
  15         q.comm = e.comm,
  16         q.deptno = e.deptno
  17   when not matched then
  18     insert (q.empno, q.ename, q.job, q.mgr, q.hiredate, q.sal, q.comm, q.deptno)
  19     values (e.empno, e.ename, e.job, e.mgr, e.hiredate, e.sal, e.comm, e.deptno)
  20   /
on (q.empno = e.empno)
    *
ERROR at line  6 :
ORA- 00904 :  "Q" . "EMPNO" : invalid identifier


dan@oraspb>; merge into emp2 q
   2   using (
   3     select e.empno, e.ename, e.job, e.mgr, e.hiredate, e.sal, e.comm, e.deptno
   4     from scott.emp e
   5     ) e
   6   on (q.empno = e.empno)
   7   when matched then
   8     update set  -- Закомментарим обновление поля EMPNO
 
   9    --      q.empno = e.empno,
 
  10         q.ename = e.ename,
  11         q.job = e.job,
  12         q.mgr = e.mgr,
  13         q.hiredate = e.hiredate,
  14         q.sal = e.sal,
  15         q.comm = e.comm,
  16         q.deptno = e.deptno
  17   when not matched then
  18     insert (q.empno, q.ename, q.job, q.mgr, q.hiredate, q.sal, q.comm, q.deptno)
  19     values (e.empno, e.ename, e.job, e.mgr, e.hiredate, e.sal, e.comm, e.deptno)
  20   /

 14  rows merged.
...
Рейтинг: 0 / 0
17.06.2003, 12:56:02
    #32184165
gda
gda
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
merge statement...
:) da set-ov u menea na samom dele mnogo:)

nu a vot s >merge into test_1 AS a
vseravno rugaetsea, mojet u menea doka postarela:), mojet drugaia spetificatia uje u MERGE
...
Рейтинг: 0 / 0
17.06.2003, 13:13:21
    #32184202
Denis Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
merge statement...
По крайней мере в документации на использование MERGE в Oracle 9.2 упоминание AS перед псевдонимом таблицы не присутствует. Хотя на использование SELECT есть небольшое замечание:
http://technet.oracle.com/docs/products/oracle9i/doc_library/release2/server.920/a96540/statements_103a.htm#2080329
Код: plaintext
1.
2.
3.
4.
5.
   
c_alias

Specify a different name (alias) for the column expression. 
Oracle will use this alias in the column heading. The AS keyword is optional. 


Правда, на INSERT, UPDATE, DELETE, как и на MERGE, использование AS не оговаривается (хотя превдонимы таблицам там везде можно давать) и приводит к ошибке синтаксиса.
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / merge statement... / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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