2013-08-01 1 views
0

시퀀스가있는 테이블에서 하위 쿼리와 subselect를 사용하여 테이블에 삽입하는 데 문제가 있습니다. 여기에 내 코드의 단순화 된 버전은 다음과 같습니다별칭 및 시퀀스를 사용하여 asubselect를 사용하여 하위 쿼리의 모든 행 삽입

INSERT INTO my_table 
    (sequence_id, 
    product_code, 
    product_status) 
SELECT 
    sequence_id.NEXTVAL, 
    alias_table.* from (SELECT 
    product_code, 
    product_status, 
FROM products 
WHERE product_code = '123456') alias_table; 

이 쿼리가 여러 행을 반환하고 내가 발전 할 수있는 순서를 필요로하기 때문에 나는 데 가장 큰 문제는 시퀀스입니다. 어떤 도움이라도 정말 고맙습니다!

CREATE OR REPLACE TRIGGER my_schema.my_table_ins_trg 
    BEFORE INSERT ON my_schema.my_table FOR EACH ROW 
    WHEN (New.ID IS NULL) 
BEGIN 
    SELECT my_schema.sequence_id.Nextval INTO :New.ID FROM dual; 
END; 

그런 다음 당신은 당신의 삽입에서 순서를 제거 할 수 있습니다

+0

당신의 simplifi 에드 코드? 그것은 내 코드와 마찬가지로 @ koljaTM의 코드처럼 나를 위해 작동합니다. –

답변

0

INSERT INTO my_table 
(sequence_id, 
product_code, 
product_status) 
SELECT 
    sequence_id.NEXTVAL, 
    alias_table.product_code, 
    alias_table.product_status 
from (SELECT 
      product_code, 
      product_status 
     FROM products 
     WHERE product_code = '123456') alias_table; 
+0

이것은 나를 위해 완벽하게 작동했습니다. 시간 내 주셔서 감사합니다! – Quartzee

0
INSERT ... 
SELECT 
sequence_id.NEXTVAL, 
product_code, 
product_status 
FROM products 
WHERE product_code = '123456'; 
+0

나는 원래이 방법을 시도했지만 ORA-02287 오류 "시퀀스 번호는 여기에 허용되지 않습니다."를 제공합니다. – Quartzee

0

다음 순서 값을 삽입하는 트리거를 생성 (내가 그것을 테스트하지 않은)이 시도 검색어 :

INSERT INTO my_table 
    (product_code, 
     product_status) 
SELECT alias_table.* FROM (SELECT product_code, product_status 
           FROM products 
          WHERE product_code = '123456') alias_table; 
+0

우리는 실제로 트리거를 사용하려고했지만 우리는 ' 우리의 DBA가 유지 보수 할 다른 것을 추가하고 싶습니다. 실제로 아래 TS에서 제안한 방법을 사용했습니다. 답변 주셔서 감사합니다. – Quartzee

+0

@ user2600900 다행히 해결책을 찾았습니다. :) –