2009-11-04 4 views
4

저는 pl/sql 초보자입니다. 이제 oracle에 대한 질문이 있습니다 유형이 있습니다.oracle의 차이점은 무엇입니까? "create or replace type"및 "type type is is ..."구문

CREATE OR REPLACE TYPE "TYPE_NAME1" AS OBJECT 
(
    temp_trans_id   number(10), 
    trans_id    number(10), 
    resion_id    number(10) 
) 

또는

type new_type_name is record(
    column1 number, 
    column2 varchar2(50) 
); 
variable_name new_type_name; 

의 차이점은 무엇입니까 : 나는 유형의 두 가지 유형이 있습니다 보았다? 대단히 감사합니다.

답변

7

이전 답변 외에 선언의 범위에는 중요한 차이가 있습니다.

예제에서 레코드 유형과 같이 PL/SQL 형식을 선언하면 PL/SQL에서만 사용할 수 있습니다. 프로 시저 또는 함수에 대해 로컬로 선언 된 경우 해당 서브 프로그램 내에서만 사용할 수 있습니다. 패키지 본문에 선언 된 경우 해당 패키지 내에서만 사용할 수 있습니다. 패키지 헤더에 선언 된 경우 패키지에 대한 실행 액세스 권한이있는 PL/SQL 코드에서 사용할 수 있습니다. PL/SQL 코드에 포함 된 것조차도 SQL 문에서 을 참조 할 수 없습니다.

오브젝트 유형 또는 중첩 테이블과 같은 다른 스키마 레벨 유형 정의를 작성할 때 SQL 및 PL/SQL 내에서 사용할 수 있습니다. 아주 간단한 예를 들어, 당신은 객체 정의에 테이블 정의를 기본으로 할 수

SQL> CREATE OR REPLACE TYPE "TYPE_NAME1" AS OBJECT 
    2 (
    3  temp_trans_id   number(10), 
    4  trans_id    number(10), 
    5  resion_id    number(10) 
    6 ) 
    7/

Type created. 

SQL> create table type_name1_tab of type_name1; 

Table created. 

SQL> desc type_name1_tab 
Name          Null? Type 
----------------------------------------- -------- ---------------------------- 
TEMP_TRANS_ID          NUMBER(10) 
TRANS_ID           NUMBER(10) 
RESION_ID           NUMBER(10) 

See here을 CREATE TYPE 문 및 개체 유형의 다양한 용도에 대한 자세한 문서에 대한 참조에 대한 문서에 대한.

3

레코드 유형은 레코드처럼 사용할 수있는 유형입니다. 형식화 된 필드 집합이 있지만 그게 전부입니다. 개체 유형이 다소 다릅니다. 또한 일련의 필드가 있지만 개체 인스턴스의 컨텍스트에서 작동하는 실행 가능한 메서드를 포함 할 수도 있습니다 (그렇습니다. 정적 메서드도 가질 수 있습니다). Java의 Object와 유사합니다. 일부는 (하지만 당연히 모두) 내가 볼 수없는 한 다른 객체 지향 시스템의 차이 :

  • 없음 인터페이스
  • 없음 개인 방법
  • 당신의 예에서

, TYPE_NAME1new_type_name 매우 유사한 것 오브젝트 유형 (TYPE_NAME1)의 경우 오브젝트 유형과 관련된 모든 이점을 활용하지 않았기 때문입니다. 자세한 내용은 the Oracle page on Object Types을 참조하십시오.