programing

Oracle sql에서 "%Type"은 무엇을 의미합니까?

lastcode 2023. 2. 17. 19:41
반응형

Oracle sql에서 "%Type"은 무엇을 의미합니까?

Oracle과 TOAD(SSMS를 알고 있습니다)를 처음 경험하게 되었습니다. 업데이트 프로시저에서 입력 매개 변수 옆에 있는 "%Type"을 발견했는데, 어떤 의미인지 알 수 없습니다.구글에서 "%Rowtype" 관련 링크를 찾았습니다.같은 것, 혹은 다른 것이 완전히 다른가요?

애매하다면 사과드립니다.늘 그렇듯이 도와주셔서 감사합니다.

Oracle( Postgre)SQL)의 특징:

  • %타입
  • %ROWTYPE

%타입

%TYPE는 기존 테이블에서 컬럼의 데이터 유형과 관련하여 변수를 선언하기 위해 사용됩니다.

DECLARE v_id ORDERS.ORDER_ID%TYPE

여기서의 이점은 데이터 유형이 변경되어도 변수 데이터 유형이 동기화 상태를 유지할 수 있다는 것입니다.

참고 자료: http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14261/fundamentals.htm#i6080

%ROWTYPE

개별 변수(및 해당 데이터 유형)를 지정할 필요 없이 커서 또는 테이블의 결과 집합에서 단일 레코드를 포함하도록 단일 변수를 선언하는 데 사용됩니다.예:

DECLARE
  CURSOR c1 IS
     SELECT last_name, salary, hire_date, job_id 
       FROM employees 
      WHERE employee_id = 120;

  -- declare record variable that represents a row fetched from the employees table
  employee_rec c1%ROWTYPE; 

BEGIN
 -- open the explicit cursor and use it to fetch data into employee_rec
 OPEN c1;
 FETCH c1 INTO employee_rec;
 DBMS_OUTPUT.PUT_LINE('Employee name: ' || employee_rec.last_name);
END;
/

OMG 조니가 지적한 목적과는 별개로%TYPE는 이전에 선언된 변수에 의해 사용된 것과 동일한 데이터 유형을 상속하기 위해서도 사용됩니다.

구문은 다음과 같습니다.

 DECLARE
            L_num NUMBER(5,2) NOT NULL default 3.21;
            L_num_Test L_num%TYPE := 1.123;

따라서 두 번째 변수의 데이터 유형을 선언할 필요가 없습니다.L_num_Test.

이 토픽에 관한 자세한 설명이 필요한 경우는, 코멘트해 주세요.

참고 자료: https://docs.oracle.com/cd/B19306_01/appdev.102/b14261/fundamentals.htm#BEIIGBBF

%Type과 그 용도:

  1. %Type 데이터형은 지정된 테이블의 열 이름 데이터 형식으로 변수를 정의하는 데 사용됩니다.
  2. 고객 테이블의 작은 예를 들어 보겠습니다.여기서 Customer_name data type은 varchar2(30)입니다.%type을 지정하면 지정된 열 또는 변수는 데이터 유형을 varchar2(30)로 간주합니다.
  3. 이걸 정의하려면 낮아요?[vCustomerName ]고객명 %TYPE: 위의 define 스테이트먼트에서는 <고객명>님의 데이터 타입이 vCustomerName이라는 변수에 할당됩니다.Real life 예 : 직접 테이블에서 데이터 유형의 할당을 확인하기 위해 단순 PL SQL 블록을 생성하는 경우.PL SQL 블록:

몇 가지 예

set serveroutput on
DECLARE
  var1  table_a.id%TYPE;
  var2  table_a.value%TYPE;
  var3_row table_a%ROWTYPE;
BEGIN
  SELECT id,value
    INTO var1, var2
    FROM table_a
  WHERE id= 8 AND ROWNUM<=1; 

  SELECT id+100,value INTO var3_row from table_A where rownum=1;

  INSERT INTO table_a VALUES var3_row;

  dbms_output.put_line('this is a test');
  dbms_output.put_line(var1);
  dbms_output.put_line(var2);
  NULL;  -- do something useful here
EXCEPTION
  WHEN NO_DATA_FOUND THEN
    NULL;  -- do something appropriate here
  WHEN TOO_MANY_ROWS THEN
    NULL;  -- do something appropriate here
END;
/

언급URL : https://stackoverflow.com/questions/3790658/what-does-type-mean-in-oracle-sql

반응형