복붙노트

[SQL] SQL에 대한 RBAR 대 설정 기반의 프로그래밍

SQL

SQL에 대한 RBAR 대 설정 기반의 프로그래밍

RBAR에이 링크를 읽고이, RBAR의 나의 이해는이 금액 데 :

나는 누군가가 세트 기반 프로그래밍 (SQL의 컨텍스트 내에서) 무엇에 관한 더 우아한 설명이있는 경우 내가 해달라고 이유입니다 좀 전액이 소리를 알고있다.

해결법

  1. ==============================

    1.설정 기반의 프로그래밍은 일련의 수학적 개념에 기반하고 연산자를 가지고있다 한 번에 전체 집합에 일이. 절차 (RBAR) 프로그램은 파일과 기록의 전통적인 컴퓨터의 개념에 더 기반으로합니다. 그래서 10 % 부서 X에있는 모든 직원의 급여를 증가 :

    설정 기반의 프로그래밍은 일련의 수학적 개념에 기반하고 연산자를 가지고있다 한 번에 전체 집합에 일이. 절차 (RBAR) 프로그램은 파일과 기록의 전통적인 컴퓨터의 개념에 더 기반으로합니다. 그래서 10 % 부서 X에있는 모든 직원의 급여를 증가 :

    설정은 기반 :

    UPDATE employees SET salary = salary * 1.10 WHERE department = 'X';
    

    절차 (극 예, 의사 코드) :

    OPEN cursor FOR SELECT * FROM employees;
    LOOP
       FETCH cursor INTO record;
       EXIT WHEN (no more records to fetch);
       IF record.department = 'X' THEN
          UPDATE employees
          SET    salary = salary * 1.10
          WHERE  employee_id = record.employee_id;
       END IF
    END LOOP
    CLOSE cursor;
    

    절차 버전에서는 하나의 직원 행은 한 번에 업데이트되는; 집합 기반 버전에서 "부서 X 직원의 세트"의 모든 행은 (우리가 우려까지로) 한 번에 업데이트됩니다.

    확실하지이 이미 링크에서 읽고 무슨에 무엇을 추가,하지만 난 그것을 탄을 거라고 생각했다!

  2. ==============================

    2.나는 집합 기반 처리가 루프를 포함 할 수 있음을 지적 할 것이다. 당신은 당신이 한 세트 기반의 과정에서 그들에 만 개 기록을로드하는 동안 배치가 아니라 여러 개의 테이블까지 타이에서 처리하려는 경우, 당신은이 빨리 한 번에 하나 개의 행을 운영하고 커서보다는 기록의 배치를 통해 루프 수 하나의 거대한 삽입 문을 것보다 데이터베이스에 대한 훨씬 더 할 수있다.

    나는 집합 기반 처리가 루프를 포함 할 수 있음을 지적 할 것이다. 당신은 당신이 한 세트 기반의 과정에서 그들에 만 개 기록을로드하는 동안 배치가 아니라 여러 개의 테이블까지 타이에서 처리하려는 경우, 당신은이 빨리 한 번에 하나 개의 행을 운영하고 커서보다는 기록의 배치를 통해 루프 수 하나의 거대한 삽입 문을 것보다 데이터베이스에 대한 훨씬 더 할 수있다.

    일부 RBAR 프로세스 중 하나 커서 또는 루프처럼 보이지 않는다. 이러한 상관 관계 서브 쿼리 많은 사용자 정의 함수를 포함 할 것이다.

  3. from https://stackoverflow.com/questions/1687512/rbar-vs-set-based-programming-for-sql by cc-by-sa and MIT license