2016-10-18 10 views
0

는이 같은 테이블이 있습니다대량 업데이트

table_name  SQL_statement    id_value  result 

employee  select ... where ..= :1 101   
customer  select ....where ..= :1 903  
    6-8 다른 테이블
  1. ID_VALUE이 SQL_Statement에 매개 변수로
  2. 을 공급있을 것
  3. SQL 문은 항상 단일 행을 반환합니다.
  4. 위의 "C"의 결과는 내가 IMMEDIATE EXECUTE 사용할 수 있습니다 알고 있지만 그 SGA에 구문 분석 하드 만듭니다 결과 열

에 보관해야합니다.

어떤 종류의 대량 기술을 사용할 수 있습니까?

+0

트릭을 할 것 업데이트되는 각 테이블에 대한 간단한 업데이트 문. ID는 어떻게 전달됩니까? 한 번에 하나씩 또는 select 문의 결과로? – Boneist

+0

목표는 일종의 BULK 조작을 사용하여 SQL_STATEMENT에 ID_VALUE를 전달하는 것입니다. – oradbanj

+0

맞습니다.하지만 id_values를 처음부터 어떻게 얻고 있습니까? 그것들은 데이터베이스 내에서 생성 된 것입니까 (예 :'select condition_value from table_with_id_value from )? 또는 프런트 엔드 프로그램을 통해 한 번에 id로 전달 되었습니까? – Boneist

답변

0

문장이 항상 고정 별칭으로 단일 값을 추출한다고 가정 할 수 있다면 다음을 시도 할 수 있습니다.

설정 : 별명 result을 감안할 때

create table yourTable(table_name varchar2(30), SQL_statement varchar2(100), id_value number, result number); 
insert into yourTable 
(
select 'employee', 'select :1 *2 as result from dual', 1, null from dual union all   
select 'customer', 'select :1 as result from dual', 10, null from dual 
); 

, 당신은 하나의 업데이트 문을 사용할 수 있습니다.

갱신 :

update yourTable 
set result = extractvalue(xmltype(dbms_xmlgen.getxml(replace (SQL_statement, ':1', id_value))),'/ROWSET/ROW/RESULT') 

결과 :

SQL> select * 
2 from yourTable; 

TABLE_NAME SQL_STATEMENT        ID_VALUE  RESULT 
---------- ---------------------------------------- ---------- ---------- 
employee select :1 *2 as result from dual     1   2 
customer select :1 as result from dual     10   10 
+0

@Boneist - 테이블이 다른 백엔드 프로 시저로 채워집니다. 고객, 직원 등의 레코드가 업데이트되면 트리거는이 테이블을 업데이트되는 레코드의 PK 인 ID_VALUE로 채 웁니다. 따라서 위에서 - 101은 직원 테이블의 PK이고 903은 고객 테이블의 PK입니다. 이 테이블에 수백만 레코드가 있다고 상상해보십시오. – oradbanj