PSM SQL References

ALTER FUNCTION

기능

Function을 다시 compile 한다.

구문

<alter function statement> ::=
    ALTER FUNCTION function_name COMPILE
    ;

사용 범위 및 접근 권한

<alter function statement> 구문을 수행하려면 사용자에게 다음 권한 중 하나가 있어야 한다.

구문 규칙 및 파라미터

설명

지정된 schema-level function을 다시 compile 한다.

사용 예

gSQL> ALTER FUNCTION FUNC1 COMPILE;

Function altered.

호환성

SQL 표준에서는 CREATE를 수행할 때 지정된 characteristic들을 변경하는 구문이고, GOLDILOCKS에서는 function의 plan을 다시 생성하는 구문이다.

SQL 표준 호환성

Feature ID

설명

지원 여부

F381

Extended schema manipulation

O

참조

자세한 내용은 다음을 참조한다.

ALTER PROCEDURE

기능

Procedure를 다시 compile 한다.

구문

<alter procedure statement> ::=
    ALTER PROCEDURE proc_name COMPILE
    ;

사용 범위 및 접근 권한

<alter procedure statement> 구문을 수행하려면 사용자에게 다음 권한 중 하나가 있어야 한다.

구문 규칙 및 파라미터

설명

지정된 schema-level procedure를 다시 compile 한다.

사용 예

gSQL> CREATE OR REPLACE PROCEDURE PROC1( A1 INTEGER )
IS
BEGIN
  INSERT INTO T1 VALUES( A1 );
END;
/

ERR-01000(16409): Warning: Routine definition has compilation errors
ERR-HY000(17032): PSM compilation error : 
(1) at (5:15): ERR-17053: schema or table object does not exist
Procedure created.

gSQL> CALL PROC1(1);

ERR-HY000(17032): PSM compilation error : 
(1) at (5:15): ERR-17053: schema or table object does not exist

gSQL> CREATE TABLE T1( I1 INTEGER );

Table created.

gSQL> COMMIT;

Commit complete.

gSQL> ALTER PROCEDURE PROC1 COMPILE;

Procedure altered.

gSQL> COMMIT;

Commit complete.

gSQL> CALL PROC1(2);

Procedure Call complete.

gSQL> SELECT * FROM T1;

I1
--
 2

1 row selected.

호환성

SQL 표준에서는 CREATE를 수행할 때 지정된 characteristic들을 변경하는 구문이고, GOLDILOCKS에서는 procedure의 plan을 다시 생성하는 구문이다.

SQL 표준 호환성

Feature ID

설명

지원 여부

F381

Extended schema manipulation

O

참조

자세한 내용은 다음을 참조한다.

CALL Statement

기능

Schema-level procedure나 function을 수행한다.

구문

<call statement> ::= 
    <sql call statement> | <odbc procedure call escape sequence>
    ;

<sql call statement> ::=
    CALL proc_name [ ( value_expr [ , value_expr ] .. ) ]  [ INTO { '?' | { host_param [ indicator_param ] } } ]

<odbc procedure call escape sequence> ::=
    '{' [ ? = ] CALL proc_name [ ( value_expr [ , value_expr ] .. ) ] '}'

사용 범위 및 접근 권한

<call statement> 구문을 수행하려면 사용자에게 다음 권한 중 하나가 있어야 한다

구문 규칙 및 파라미터

설명

명시된 인자들을 사용하여 schema-level SQL procedure나 function을 실행한다.

<sql call statement> 형식 중에 function은 INTO 절 다음에 host variable 표현이나 dynamic bind parameter (?)를 사용하여 결과값을 반환한다.

<odbc procedure call escape sequence> 형식은 ODBC/ JDBC 등에서 PROCEDURE를 호출하기 위한 
표준 구문이며, GOLDILOCKS는 이 구문을 server에서 지원한다. (gsql 등의 tool에서도 사용 가능하다.)
Function은 앞에 assign 표현( ? = )을 사용하여 결과값을 반환한다.

사용 예

Call Procedure

gSQL> CREATE OR REPLACE PROCEDURE PROC1
(
  A1 INTEGER
)
IS
BEGIN
  DBMS_OUTPUT.PUT_LINE('A1=' || A1);
END;
/

Procedure created.

gSQL> \var v1 INTEGER;
gSQL> \exec :v1 := 123;
gSQL> CALL PROC1(:v1);
A1=123

Procedure Call complete.

Call Function

CREATE OR REPLACE FUNCTION FUNC1
(
  A1 INTEGER
)
RETURN INTEGER
IS
BEGIN
    return A1;
END;
/

Function created.


gSQL> \var v1 INTEGER;
gSQL> \var v2 INTEGER;
gSQL> \exec :v1 := 123;
gSQL> CALL FUNC1(:v1) INTO :v2;
Procedure Call complete.

gSQL> \print v2;
 V2
---
123

호환성

SQL 표준에서는 PROCEDURE에 대한 호출만 가능하여 [INTO] 절 이하를 정의하지 않고 있다.

CREATE FUNCTION

기능

Schema-level function을 정의한다.

구문

<create procedure statement> ::=
    CREATE [ OR REPLACE ]  
        FUNCTION func_name [ ( { param_name [IN|OUT|INOUT] datatype [ { := | DEFAULT } init_expr ] } [, ...] ) ]
        RETURN datatype
        [ <func_characteristics> ]
        { IS | AS } <item_declaration> BEGIN <pl_stmt_list> END
    ;

<func_characteristics> ::=
    DETERMINISTIC | AUTHID CURRENT_USER | AUTHID DEFINER

사용 범위 및 접근 권한

<create function statement> 구문을 수행하려면 사용자가 다음 조건들을 만족해야 한다.

구문 규칙 및 파라미터

OR REPLACE

이미 function이 존재할 경우, 기존의 function을 대체한다.

FUNCTION NAME

생성할 function의 이름으로써 스키마 내에서 고유한 이름이어야 한다.
schema_name.func_name과 같이 function이 속할 스키마를 정의할 수 있다. schema_name을 생략할 경우, 구문을 수행하는 사용자의 기본 스키마 이름이 사용된다.
Function 이름의 길이는 128 바이트보다 작아야 한다.

PARAM NAME

Function이 사용할 인자의 이름을 정의한다. 
각 인자의 이름은 function 내에서 고유한 이름이어야 한다.
각 인자 이름의 길이는 128 바이트보다 작아야 한다.
하나의 function에 사용할 수 있는 인자의 최대 개수에는 제한이 없다.

Bind Type

각 인자의 bind type을 설정한다. 
표기하지 않을 경우 기본 타입은 IN 이다.

Func_Characteristics

Function 수행 옵션을 정의한다. 같은 항목에 대해서는 한 번만 기술해야 한다.

Item Declaration

Function 내부에서 사용될 로컬 변수등의 item을 선언한다.
PL block에서 선언될 수 있는 모든 item들을 선언할 수 있다.

PL Stmt List

Function의 body 부분으로써 수행할 PL statement들을 나열한다.
Function의 내부에서는 '?'나 ':V1'과 같은 bind parameter를 사용할 수 없다.

설명

Schema-level SQL function을 정의한다. 생성된 function은 모든 expression에서 호출될 수 있다.
Function의 정의는 INFORMATION_SCHEMA의 ROUTINES 테이블에서 확인할 수 있다. Function의 parameter들에 대한 정의는 INFORMATION_SCHEMA의 PARAMETERS 테이블에서 확인할 수 있다.
관련 객체들이 존재하지 않아 function이 일시적으로 불완전해졌을 경우, <alter function> 구문으로 plan을 다시 생성하려 시도해볼 수 있다.
생성된 function은 <drop function> 구문을 사용하여 제거할 수 있다.
Function의 최대 생성 개수에는 제한이 없으므로 저장 공간에 문제가 없는 한 계속 생성할 수 있다.

사용 예

gSQL> CREATE OR REPLACE FUNCTION FUNC1( A1 INTEGER, A2 INTEGER )
  RETURN INTEGER
  IS
    V1 INTEGER;
  BEGIN

    SELECT COUNT(*)
      INTO V1
      FROM T1
      WHERE T1.I1 >= A1 AND T1.I1 <= A2;

    RETURN V1;
  END;
  /

Function created.

호환성

SQL 표준에서는 OR REPLACE 절을 정의하지 않고 있다.

SQL 표준 호환성

Feature ID

설명

지원여부

T471

Result sets return value

X

T341

Overloading of SQL-invoked functions and SQL-invoked procedures

X

S023

Basic structured types

X

S241

Transform functions

X

S024

Enhanced structured types

X

T571

Array-returning external SQL-invoked functions

X

T572

Multiset-returning external SQL-invoked functions

X

S201

SQL routines on arrays

X

S202

SQL-invoked routines on multisets

X

T323

Explicit security for external routines

X

S231

Structured type locators

X

S232

Array locators

X

S233

Multiset locators

X

T041

Basic LOB data type support

X

S027

Create method by specific method name

X

T041

Basic LOB data type support

X

T324

Explicit security for SQL routines

O

T326

Table functions

X

T651

SQL-schema statements in SQL routines

X

T652

SQL-dynamic statements in SQL routines

O

T653

SQL-schema statements in external routines

X

T654

SQL-dynamic statements in external routines

X

T655

Cyclically dependent routines

X

T272

Enhanced savepoint management

X

T522

Default values for IN parameters of SQL-invoked procedures

O

B121

Routine language Ada

X

B122

Routine language C

X

B123

Routine language COBOL

X

B124

Routine language Fortran

X

B125

Routine language MUMPS

X

B126

Routine language Pascal

X

B127

Routine language PL/I

X

B128

Routine language SQL

O

B129

Routine language Ada: VARCHAR and NUMERIC support

X

참조

자세한 내용은 다음을 참조한다.

CREATE PROCEDURE

기능

Schema-level procedure를 정의한다.

구문

<create procedure statement> ::=
    CREATE [ OR REPLACE ]  
        PROCEDURE proc_name [ ( { param_name [IN|OUT|INOUT] datatype [ { := | DEFAULT } init_expr ] } [, ...] ) ]
        [ <proc_characteristics> ]
        { IS | AS } <item_declaration> BEGIN <pl_stmt_list> END
    ;

<proc_characteristics> ::=
    AUTHID CURRENT_USER | AUTHID DEFINER

사용 범위 및 접근 권한

<create procedure statement> 구문을 수행하려면 사용자가 다음 조건들을 만족해야 한다.

구문 규칙 및 파라미터

[ OR REPLACE ]

이미 procedure가 존재할 경우, 기존의 procedure를 대체한다.

PROC NAME

생성할 procedure의 이름으로써 스키마 내에서 고유한 이름이어야 한다.
schema_name.proc_name과 같이 procedure가 속할 스키마를 정의할 수 있다. schema_name을 생략할 경우, 구문을 수행하는 사용자의 기본 스키마 이름이 사용된다.
Procedure 이름의 길이는 128 바이트보다 작아야 한다.

PARAM NAME

Procedure가 사용할 인자의 이름을 정의한다. 
각 인자의 이름은 procedure 내에서 고유한 이름이어야 한다.
각 인자 이름의 길이는 128 바이트보다 작아야 한다.
하나의 procedure에 사용할 수 있는 인자의 최대 개수에는 제한이 없다.

Bind Type

각 인자의 bind type을 설정한다. 
표기하지 않을 경우 기본 타입은 IN이다.

proc_characteristics

Procedure 수행 옵션을 정의한다. 같은 항목에 대해서는 한 번만 기술해야 한다.

item declaration

Procedure 내부에서 사용될 로컬 변수등의 item을 선언한다.
PL block에서 선언될 수 있는 모든 item들을 선언할 수 있다.

PL Stmt List

Procedure의 body 부분으로써 수행할 PL statement들을 나열한다.
Procedure의 내부에서는 '?'나 ':V1'과 같은 bind parameter를 사용할 수 없다.

설명

Schema-level SQL procedure를 정의한다. 생성된 procedure는 CALL 구문, anonymous block, 또는 다른 procedure/ function에서 호출될 수 있다.
Procedure의 정의는 INFORMATION_SCHEMA의 ROUTINES 테이블에서 확인할 수 있다. Procedure의 parameter들에 대한 정의는 INFORMATION_SCHEMA의 PARAMETERS 테이블에서 확인할 수 있다.
관련 객체들이 존재하지 않아 procedure가 일시적으로 불완전해졌을 경우, <alter procedure> 구문으로 plan을 다시 생성하려 시도해볼 수 있다.
생성된 procedure는 <drop procedure> 구문을 사용하여 제거할 수 있다.
Procedure의 최대 생성 개수에는 제한이 없으므로 저장 공간에 문제가 없는 한 계속 생성할 수 있다.

사용 예

gSQL> CREATE OR REPLACE PROCEDURE PROC1( A1 INTEGER, A2 INTEGER )

  IS
    V1 INTEGER;
  BEGIN

    SELECT COUNT(*)
      INTO V1
      FROM T1
      WHERE T1.I1 >= A1 AND T1.I1 <= A2;

    DBMS_OUTPUT.PUT_LINE( 'V1 = ' || V1 );
  END;
  /

Procedure created.

호환성

SQL 표준에서는 다음과 같은 절을 정의하지 않고 있다.

SQL 표준 호환성

Feature ID

설명

지원여부

T471

Result sets return value

X

T341

Overloading of SQL-invoked functions and SQL-invoked procedures

X

S023

Basic structured types

X

S241

Transform functions

X

S024

Enhanced structured types

X

T571

Array-returning external SQL-invoked functions

X

T572

Multiset-returning external SQL-invoked functions

X

S201

SQL routines on arrays

X

S202

SQL-invoked routines on multisets

X

T323

Explicit security for external routines

X

S231

Structured type locators

X

S232

Array locators

X

S233

Multiset locators

X

T041

Basic LOB data type support

X

S027

Create method by specific method name

X

T041

Basic LOB data type support

X

T324

Explicit security for SQL routines

O

T326

Table functions

X

T651

SQL-schema statements in SQL routines

X

T652

SQL-dynamic statements in SQL routines

O

T653

SQL-schema statements in external routines

X

T654

SQL-dynamic statements in external routines

X

T655

Cyclically dependent routines

X

T272

Enhanced savepoint management

X

T522

Default values for IN parameters of SQL-invoked procedures

O

B121

Routine language Ada

X

B122

Routine language C

X

B123

Routine language COBOL

X

B124

Routine language Fortran

X

B125

Routine language MUMPS

X

B126

Routine language Pascal

X

B127

Routine language PL/I

X

B128

Routine language SQL

O

B129

Routine language Ada: VARCHAR and NUMERIC support

X

참조

자세한 내용은 다음을 참조한다.

DROP FUNCTION

기능

Function을 제거한다.

구문

<drop function statement> ::=
    DROP FUNCTION [ IF EXISTS ] func_name
    ;

사용 범위 및 접근 권한

<drop function statement> 구문을 수행하려면 사용자에게 다음 권한 중 하나가 있어야 한다.

구문 규칙 및 파라미터

IF EXISTS

Function이 존재하지 않더라도 에러가 발생하지 않는다.

FUNC NAME

제거할 function의 이름이다.
schema_name.func_name과 같이 function이 속한 스키마를 정의할 수 있다. schema_name을 생략할 경우, 구문을 수행하는 사용자의 기본 스키마 이름이 사용된다.

설명

지정된 schema-level function을 제거한다.

사용 예

gSQL> CREATE OR REPLACE FUNCTION FUNC1
RETURN INTEGER
 IS
    V1 INTEGER;
  BEGIN
    V1 := 10;
    RETURN V1;
  END;
  /

Function created.


COMMIT;

Commit complete.
gSQL> DROP FUNCTION FUNC1;

Function dropped.

호환성

SQL 표준은 다음과 같은 절을 정의하지 않고 있다.

SQL 표준 호환성

Feature ID

설명

지원 여부

F032

CASCADE drop behavior

X

S024

Enhanced structured types

X

참조

자세한 내용은 다음을 참조한다.

DROP PROCEDURE

기능

Procedure를 제거한다.

구문

<drop procedure statement> ::=
    DROP PROCEDURE [ IF EXISTS ] proc_name
    ;

사용 범위 및 접근 권한

<drop procedure statement> 구문을 수행하려면 사용자에게 다음 권한 중 하나가 있어야 한다.

구문 규칙 및 파라미터

IF EXISTS

Procedure가 존재하지 않더라도 에러가 발생하지 않는다.

PROC NAME

제거할 procedure의 이름이다.
schema_name.proc_name과 같이 procedure가 속한 스키마를 정의할 수 있다. schema_name을 생략할 경우, 구문을 수행하는 사용자의 기본 스키마 이름이 사용된다.

설명

지정된 schema-level procedure를 제거한다.

사용 예

gSQL> CREATE OR REPLACE PROCEDURE PROC1( A1 INTEGER, A2 INTEGER )
  IS
    V1 INTEGER;
  BEGIN

    SELECT COUNT(*)
      INTO V1
      FROM T1
      WHERE T1.I1 >= A1 AND T1.I1 <= A2;

    DBMS_OUTPUT.PUT_LINE( 'V1 = ' || V1 );
  END;
  /

Procedure created.


COMMIT;

Commit complete.


gSQL> DROP PROCEDURE PROC1;

Procedure dropped.

호환성

SQL 표준은 다음과 같은 절을 정의하지 않고 있다.

SQL 표준 호환성

Feature ID

설명

지원 여부

F032

CASCADE drop behavior

X

S024

Enhanced structured types

X

참조

자세한 내용은 다음을 참조한다.