2016-09-07 1 views
-2

두 개의 테이블이 있습니다. 다음 단계를 수행 한 후 표 2에서 desc를 얻고 자합니다.
1. Table1에서 type = 'animal';
2. 1.에서 각 이름을 반복하고 Table2 즉 o_name = name을 확인합니다.
3. 그런 다음 o_name에 대해 desc가 존재하는지 확인하십시오.
4. desc가없는 경우 Table2에 해당 레코드의 'pet'를 삽입하십시오.커서의 데이터를 통해 반복하고 다른 테이블의 값을 비교하십시오.

어떻게해야합니까? 지금은 Table1의 이름을 가진 커서가 있습니다. 나는 커서의 레코드를 반복하지만, 할 수 없다는 것을 넘어서고 생각하고있다. 저를 제안하십시오 : 당신은 여전히 ​​쿼리로이 작업을 수행 할 수 있으며, 커서를 필요가 없습니다

DECLARE 
    CURSOR DATA is 
     SELECT name 
     FROM Table1 
     where type='animal';  
BEGIN 
    FOR C IN DATA LOOP 
     // After this what can I do?? I cannot do select into because there will be 
     // multiple rows 
    END LOOP; 
END; 

/

Table1: 
id | name | type 
---| ---- | ----- 
    1| Apple | food 
    2| Ball | game 
    3| Cat | animal 
    4| Cow | animal 
    5| Ball | game 

    Table2: 
o_name | desc 
    ---| ---- 
    Apple| eat 
    Cat| pet 
    Cow| 
+1

왜 커서로 수행하고 싶습니까? – rjdevereux

+0

@rjdevereux 안녕하세요 Rj 커서없이 처리 할 수 ​​있습니까? – Rthp

+1

왜 table1을 반복해야합니까? 이름은'Cat'이 될 것으로 미리 알려져 있습니다. 그렇다면 table2에서 직접 고양이를 가져 오는 것이 어떻습니까? 당신이 달성하고자하는 것이 명확하지 않습니다. –

답변

1

. 데이터베이스는 레코드 집합에서 작동하도록 최적화되어 있으며 SQL 쿼리와 동일합니다. 다른 전략이 작동하지 않는 경우에만 커서를 사용해야합니다. DESCTYPEreserved words in Oracle을 것을

UPDATE Table2 
SET "desc" = 'pet' 
WHERE 
    "desc" IS NULL AND 
    o_name IN (SELECT name FROM Table1 WHERE "type" = 'animal') 

주, 그러므로 나는 따옴표를 동봉. 작은 따옴표는 Oracle에서 텍스트 리터럴 (문자열)을 묶는 데 사용됩니다.

관련 문제