2015-02-07 4 views
0

나는 오라클 데이터베이스에 일련의 SQL 문을 작성했습니다. 내 데이터베이스에는 두 개의 테이블 (책, 발행인)이 있습니다. 다음은 ORACLE SQL : 다른 행에서 다른 ID 삽입

내가 게시자의 ID를 검색하고 책을 테이블에 입력 어떻게 테이블 구조

BOOK 
---------- 
bk_id | title | pub_id 

PUBLISHER 
---------- 
pub_id | pub_name 

내가

INSERT INTO PUBLISHER (pub_name) VALUE ('ABC Publisher'); 

먼저 게시자 테이블에 삽입하는 경우입니까?

일반적으로이 작업은 저장 프로 시저 (SQL Server)에서 수행하거나 응용 프로그램에서 수행합니다.

SQL의 ORACLE에서 어떻게 할 수 있습니까?

INSERT INTO BOOK VALUES 
(bk_id, title, (SELECT pub_id FROM PUBLISHER WHERE pub_name = publisher_name)) 
… 
; 

원하는 적절한 데이터와 bk_id, 제목 및 PUBLISHER_NAME 교체 :

답변

0

는, 당신은 다시 얻을 수있는 RETURNING INTO 절을 사용할 수있는 새로 삽입 된 ID : my_id 당신의 열 유형에 따라 선언 된 PL/SQL 변수는

DECLARE 
    my_id int; 
BEGIN 
    INSERT INTO PUBLISHER (pub_name) VALUE ('ABC Publisher') 
     RETURNING id INTO my_id; 
    ... 
END; 

.

0

그냥 SELECT 문을 사용합니다.

+0

절차에서이 작업을 수행 할 수 있습니까? –

+0

나는 결코 그런 것을 사용하지 않았지만 나는 상상할 것이다. 필요한 args를주고 대신 해줘야합니다. –

+0

@PeterSun 예. 내 PLSQL 스크립트 및 저장 프로 시저에서 여러 번 사용했습니다. –

1

가장 쉬운 방법은 테이블 뒤에 table에 삽입하는 Trigger을 생성하는 것이라고 생각합니다.

create or replace trigger tr_ai_publisher 
after insert on publisher 
for each row 
begin 
    --Here you can access the new publisher id using :new.pub_id 
end; 

그런 식으로 직접 프로 시저를 호출 할 필요가 없습니다. 당신이 정말로, 당신은 또한 ORACLE에 저장 프로 시저를 사용하려는 경우

그러나, 일반 구문은 PL/SQL에서

CREATE [OR REPLACE] PROCEDURE proc_name [list of parameters] 
IS  
    Declaration section 
BEGIN  
    Execution section 
EXCEPTION  
    Exception section 
END; 
+0

왜 downvote? –

+0

나는 다운 voter가 아니지만 하위 쿼리를 사용하면'pub_name'이 고유 한 키라고 가정합니다. 여기에 지정된 것은 아닙니다. 그리고 일반적인 경우에 그것은 다소 위험한 가정 일 수 있습니다. (직원의 이름에 대해 생각하십시오 : 당신은 쉽게 중복 된 값을 가질 것입니다) –

+1

@SylvainLeroux 저는 동의합니다. 처음에는 질문을 빨리 읽고 편집을 참조하십시오. –

관련 문제