FireBird Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
파이어버드 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
IBPhoenix
FireBird Main site
볼랜드포럼 광고 모집

FireBird 팁&트릭
[3] FireBird 1.5 Alpha에서 새로워진 점
박지훈.임프 [cbuilder] 8242 읽음    2002-10-15 21:15
자료실에 조복기님께서 올려주신 것처럼, 파이어버드 1.5의 알파 2가 나왔습니다.
파이어버드 1.5에서는 상당히 멋진 새로운 기능들이 많이 도입되었는데, 모두 알파 1에서 도입된
기능들이고, 알파 2는 버그 패치판입니다.

아래는 알파2에 포함된 WhatsNew.txt 파일 중에서 버그 픽스를 빼고 번역한 것입니다.
각 항목들의 순서는 제 맘대로 좀 바꾸었습니다.


ROWS_AFFECTED 시스템 변수 추가
    마지막 INSERT/UPDATE/DELETE 문에 의해 영향을 받은 레코드의 갯수를 리턴함.
    1. PSQL에서만 사용가능
    2. INSERT/UPDATE/DELETE가 아닌 다른 쿼리에서는 항상 0이 리턴됨

SQLCODE, GDSCODE 시스템 변수 추가
    WHEN 블럭 안에서 캐치된 에러를 액세스할 수 있게 해줌
  노트:
    1. PSQL에서만 사용 가능함
    2. WHEN 블럭에서만 의미가 있으며, 다른 곳에서는 0을 리턴함

CONNECTION_ID 및 TRANSACTION_ID 시스템 변수 추가
    데이터베이스 헤더 페이지에 저장된 해당 ID를 리턴해줌
  노트:
    1. SQL/PSQL에서 사용 가능
    2. 이 변수들은 데이터베이스를 리스토어하면 리셋됨

CREATE OR ALTER 쿼리문 추가
    존재 여부에 따라, 데이터베이스 객체를 생성하거나 변경함
  문법:
    CREATE OR ALTER name <object_definition>;
  노트:
    1. 스토어드프로시저/트리거에만 적용 가능
    2. 오라클에서의 CREATE OR REPLACE 쿼리문과 동일한 의미

RECREATE VIEW 쿼리문 추가
    DROP VIEW / CREATE VIEW 두개의 쿼리문을 대체
  문법:
    RECREATE VIEW name <view_definition>;

COALESCE 내부 함수 추가
    여러개의 연산식으로부터 컬럼 값을 얻을 수 있음, NULL이 아닌 첫번째 연산식이 컬럼 값이 됨
  문법:
    COALESCE(value {, value} ... )
  노트:
    1. COALESCE(V1, V2)는 아래의 case문과 같은 의미를 가짐
         CASE WHEN V1 IS NOT NULL THEN V1 ELSE V2 END
    2. COALESCE(V1, V2, ..., Vn)는 아래의 case문과 같은 의미를 가짐 (여기서 n은 3 이상)
         CASE WHEN V1 IS NOT NULL THEN V1 ELSE COALESCE (V2, ..., Vn) END
    3. 오라클의 NVL과 같은 의미임
  예제:
    SELECT
      PROJ_NAME AS Projectname,
      COALESCE(e.FULL_NAME, '[> not assigned <]') AS Employeename
    FROM
      PROJECT p LEFT JOIN EMPLOYEE e ON (e.EMP_NO = p.TEAM_LEADER)

NULLIF 내부 함수 추가
    연산식이 특정 값을 가지고 있을 경우 NULL을 리턴하며, 아니면 연산식의 결과를 리턴함
  문법:
    NULLIF (value, value)
  노트:
    NULLIF (V1, V2) is equivalent to the following case specification:
      CASE WHEN V1 = V2 THEN NULL ELSE V1 END
  예제:
    UPDATE PRODUCTS
      SET STOCK = NULLIF(STOCK, 0)

CASE 내부 함수 추가
    case 연산식의 결과로 컬럼값을 결정하게 됨
  문법:
    <case_specification> = <simple_case> | <searched_case>

    <simple_case> = CASE value <simple_when_clause> ... [ELSE value] END
    <simple_when_clause> = WHEN value THEN value

    <searched_case> = CASE <searched_when_clause> ... [ELSE value] END
    <searched_when_clause> = WHEN <search_condition> THEN value
  노트:
    오라클의 DECODE와 같은 의미임
  Examples:
    1. 단순 case:
      SELECT
        o.ID,
        o.Description,
        CASE o.Status
          WHEN 1 THEN 'confirmed'
          WHEN 2 THEN 'in production'
          WHEN 3 THEN 'ready'
          WHEN 4 THEN 'shipped'
          ELSE 'unknown status ''' || o.Status || ''''
        END
      FROM
        Orders o
    2. 검색된 case:
      SELECT
        o.ID,
        o.Description,
        CASE
          WHEN (o.Status IS NULL) THEN 'new'
          WHEN (o.Status = 1) THEN 'confirmed'
          WHEN (o.Status = 3) THEN 'in production'
          WHEN (o.Status = 4) THEN 'ready'
          WHEN (o.Status = 5) THEN 'shipped'
          ELSE 'unknown status ''' || o.Status || ''''
        END
      FROM
        Orders o

BIGINT 데이터타입 추가
    64비트 정수 사용 가능
  노트:
    dialect 3에서만 사용 가능

로컬 변수들의 선언이 강화됨
    문법이 간략해지고, 한번에 변수를 선언하고 정의하는 것이 가능해짐
  문법:
    DECLARE [VARIABLE] name <variable_type> [{'=' | DEFAULT} value];
  예제:
    DECLARE my_var INTEGER = 123;

동적인 예외 메시지
    예외가 생성될 때 주어진 메시지외에 다른 메시지로 예외를 발생시킬 수 있음.
  문법:
    EXCEPTION name [value];

예외 재발생
    이미 캐치된 예외를 WHEN 블럭 내에서 재발생(re-throw)시킬 수 있음
  문법:
    EXCEPTION;
  노트:
    WHEN 블럭에서만 의미가 있으며, 다른 곳에서는 의미가 없음

지연 메타데이터 컴파일
    잘 알려진 "object in use" 에러의 여러가지 원인을 해석해줌

NULL값을 가진 레코드의 순서
    사용자 정의 NULL 순서 가능
  문법:
    [ORDER BY <order_list>]
    <order_list> = {col | int} [COLLATE collation]
      [ASC[ENDING] | DESC[ENDING]] [NULLS {FIRST | LAST}]
      [, <order_list> ...]
  노트:
    기본적으로 NULL은 마지막으로 감

사용자 정의 constraint 인덱스 이름
    인덱스 이름을 constraint 이름으로 하거나 사용자 정의 이름으로 할 수 있음
  문법:
    <col_constraint> = [CONSTRAINT constraint]
      {UNIQUE [<constraint_index>]
      | PRIMARY KEY [<constraint_index>]
      | REFERENCES other_table [( other_col [, other_col ...])]
          [ON DELETE {NO ACTION|CASCADE|SET DEFAULT|SET NULL}]
          [ON UPDATE {NO ACTION|CASCADE|SET DEFAULT|SET NULL}]
          [<constraint_index>]
      | CHECK ( <search_condition>)}
    <tconstraint> = [CONSTRAINT constraint]
      {{PRIMARY KEY | UNIQUE} ( col [, col ...]) [<constraint_index>]
      | FOREIGN KEY ( col [, col ...]) REFERENCES other_table
          [ON DELETE {NO ACTION|CASCADE|SET DEFAULT|SET NULL}]
          [ON UPDATE {NO ACTION|CASCADE|SET DEFAULT|SET NULL}]
          [<constraint_index>]
      | CHECK ( <search_condition>)}
    <constraint_index> = USING [ASC[ENDING] | DESC[ENDING]] INDEX name
  노트:
    기본적으로 인덱스는 constraint와 같은 방식으로 이름이 붙여짐

파일 이름 변경
    파이어버드임을 확실히 하기 위해 배포 파일들의 이름을 바꾸었음. (fbserver, fbclient, firebird.msg)
  노트:
    클라이언트 라이브러리는 이제 fbclient이며, 모든 새로운 파이어버드 기반 프로젝트에서 이용되어야 함.
    gds32에는 아무 것도 없으며 익스포트를 통해 리다이렉트되어 fbclient를 가리키게 됨 (호환성 목적으로만 사용할 것)

Win32에서 새로운 레지스트리키가 이용됨
    현재는 SOFTWARE\FirebirdSQL\Firebird

ODS가 약간 업그레이드됨
    새로운 시스템 indice들이 추가됨(RDB$INDEX_41, RDB$INDEX_42, RDB$INDEX_43)
    ODS 버전: 10.1

내부적인 한계로 인해 트리거에서 BREAK 문을 사용할 수 없게 됨 (EXIT처럼)

그룹 기능 강화

BEGIN...END 블럭의 내용을 비워둘 수 있게 되었음

ISQL에 Readline (cmd history) 지원이 추가됨

유니버설 트리거
    하나의 액션 타입에 대해 하나의 트리거가 발생하도록 해줌
  문법:
    CREATE TRIGGER name FOR table
      [ACTIVE | INACTIVE]
      <trigger_action_prefix>
      <trigger_action_suffix> [OR <trigger_action_suffix>] [OR <trigger_action_suffix>]
      [POSITION number]
      AS <trigger_body>
    <trigger_action_prefix> = {BEFORE | AFTER}
    <trigger_action_suffix> = {DELETE | INSERT | UPDATE}
  예제:
    CREATE TRIGGER my_trigger FOR my_table BEFORE INSERT OR UPDATE
      AS BEGIN
        IF (NEW.DOC_ID IS NULL) THEN
          EXCEPTION my_exception;
      END

서버사이드 데이터베이스 알리아스
    모든 데이터베이스는 실제 이름 대신 알리아스를 이용하여 연결될 수 있음
    데이터베이스 알리아스 이름의 리스트는 서버가 설치된 디렉토리에 aliases.conf 파일에 저장됨
  예제:
    aliases.conf 파일 내의 알리아스 항목: my_database = d:\dbs\my\database.gdb
    연결 스트링: localhost:my_database

인-메모리 소트
    소트 계획이 SQL문에서 이용될 경우, 소트는 메모리에서 수행됨
    충분한 메모리가 없을 경우에는 이전처럼 임시 파일을 생성하여 소트를 함

EXECUTE VARCHAR 쿼리문 추가
    스토어드프로시저/트리거에서 다이나믹 SQL문을 사용할 수 있음
  문법:
    EXECUTE VARCHAR value;
  노트:
    1. PSQL에서만 사용할 수 있음
    2. 현재는 값을 리턴하지 않으므로 SELECT문에 사용할 수 없음
    3. 재귀 단계는 50회로 제한됨(내부 코딩으로 제한)
  예제:
    EXECUTE VARCHAR my_var;

새로운 플러그인 매니저와 INTL 인터페이스

코드 대폭 정리

새로운 메모리 매니저
   
새로운 예외 처리 로직

새로운 autoconf 기반의 빌드 설정
   
C에서 C++로 포팅되었음

+ -

관련 글 리스트
3 FireBird 1.5 Alpha에서 새로워진 점 박지훈.임프 8242 2002/10/15
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.