ALTER FUNCTION
기능
Function을 recompile 한다.
구문
<alter function statement> ::=
ALTER FUNCTION function_name COMPILE
;사용 범위 및 접근 권한
<alter function statement> 구문을 수행하려면 사용자에게 다음 권한 중 하나가 있어야 한다.
해당 function의 소유자
Function이 속한 스키마에 대해 (ALTER PROCEDURE 또는 CONTROL SCHEMA) ON SCHEMA
ALTER ANY PROCEDURE ON DATABASE
구문 규칙 및 파라미터
Function name
Compile 할 function의 이름이다.
schema_name.func_name과 같이 function이 속한 스키마를 정의할 수 있다. schema_name을 생략할 경우, 구문을 수행하는 사용자의 기본 스키마 이름이 사용된다.
설명
지정된 schema-level function을 recompile 한다.
사용 예
gSQL> ALTER FUNCTION FUNC1 COMPILE; Function altered.
호환성
SQL 표준에서는 CREATE를 수행할 때 지정된 characteristic들을 변경하는 구문이고, GOLDILOCKS에서는 function의 plan을 다시 생성하는 구문이다.
Feature ID | 설명 | 지원 여부 |
|---|---|---|
F381 | Extended schema manipulation | O |
참조
자세한 내용은 다음을 참조한다.
ALTER PACKAGE
기능
Package를 recompile 한다.
구문
<alter package statement> ::=
ALTER PACKAGE package_name <package compile clause>
;
<package compile clause> ::=
COMPILE [PACKAGE|SPECIFICATION|BODY]사용 범위 및 접근 권한
<alter package statement> 구문을 수행하려면 사용자에게 다음 권한 중 하나가 있어야 한다.
해당 package의 소유자
Package가 속한 스키마에 대해 (ALTER PACKAGE 또는 CONTROL SCHEMA) ON SCHEMA
ALTER ANY PACKAGE ON DATABASE
구문 규칙 및 파라미터
Package name
Compile 할 package의 이름이다.
schema_name.package_name과 같이 package가 속한 스키마를 정의할 수 있다. schema_name을 생략할 경우, 구문을 수행하는 사용자의 기본 스키마 이름이 사용된다.
Package compile clause
PACKAGE: Specification과 body를 모두 recompile 한다. (Default)
SPECIFICATION: Specification만 recompile 한다.
BODY: Body만 recompile 한다.
설명
지정된 package를 recompile 한다. Compile 된 package의 실행 code는 plan cache에 저장된다.
사용 예
ALTER PACKAGE PKG1 COMPILE; Package altered.
ALTER PACKAGE PKG1 COMPILE PACKAGE; Package altered.
ALTER PACKAGE PKG1 COMPILE BODY; Package altered.
호환성
SQL 표준에서는 ALTER MODULE 구문이다.
참조
자세한 내용은 다음을 참조한다.
ALTER PROCEDURE
기능
Procedure를 recompile 한다.
구문
<alter procedure statement> ::=
ALTER PROCEDURE proc_name COMPILE
;사용 범위 및 접근 권한
<alter procedure statement> 구문을 수행하려면 사용자에게 다음 권한 중 하나가 있어야 한다.
해당 procedure의 소유자
Procedure가 속한 스키마에 대해 (ALTER PROCEDURE 또는 CONTROL SCHEMA) ON SCHEMA
ALTER ANY PROCEDURE ON DATABASE
구문 규칙 및 파라미터
Proc name
Compile할 procedure의 이름이다.
schema_name.proc_name과 같이 procedure가 속한 스키마를 정의할 수 있다. schema_name을 생략할 경우, 구문을 수행하는 사용자의 기본 스키마 이름이 사용된다.
설명
지정된 schema-level procedure를 recompile 한다.
사용 예
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을 다시 생성하는 구문이다.
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> 구문을 수행하려면 사용자에게 다음 권한 중 하나가 있어야 한다
해당 procedure에 대한 EXECUTE 권한
Procedure가 속한 schema에 대해 (EXECUTE PROCEDURE 또는 CONTROL SCHEMA) ON SCHEMA
EXECUTE ANY PROCEDURE ON DATABASE
구문 규칙 및 파라미터
proc_name
실행할 procedure/ function의 이름이다
Schema_name.Proc_name과 같이 procedure가 속한 schema를 포함할 수 있다.
value_expr
Procedure에 전달할 인자값을 표현한다. '?' 나 ':V1'과 같은 bind parameter를 사용할 수도 있다.
설명
명시된 인자들을 사용하여 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 function statement> ::=
CREATE [ OR REPLACE ] FUNCTION <function name> [ ( <parameter list> ) ]
<return clause>
[ <function characteristics> ]
{ IS | AS }
<item declaration>
BEGIN
<pl statement list>
END [ <function name> ]
;
<parameter list> ::=
<parameter name> [ <parameter mode> ] <datatype> [ <parameter default> ] [ , ... ]
<parameter mode> ::=
IN
| OUT
| IN OUT
<parameter default> ::=
{ := | DEFAULT } <value expression>
<return clause> ::=
RETURN <datatype>
| RETURN TABLE ( <table function column list> )
<table function column list> ::=
<column name> <datatype> [ , ... ]
<function characteristics> ::=
DETERMINISTIC
| AUTHID CURRENT_USER
| AUTHID DEFINER사용 범위 및 접근 권한
<create function statement> 구문을 수행하려면 사용자가 다음 조건들을 만족해야 한다.
Function을 생성하기 위해 다음 권한 중 하나가 있어야 한다.
Function이 속한 스키마에 대해 (CREATE PROCEDURE 또는 CONTROL SCHEMA) ON SCHEMA
CREATE ANY PROCEDURE ON DATABASE
OR REPLACE 절을 사용할 때 이미 function이 존재할 경우, 기존 function을 제거할 수 있는 다음 권한 중 하나가 있어야 한다.
해당 function의 소유자
Function이 속한 스키마에 대해 (DROP PROCEDURE 또는 CONTROL SCHEMA) ON SCHEMA
DROP ANY PROCEDURE ON DATABASE
구문을 수행한 사용자는 생성한 function의 소유자이다.
구문 규칙 및 파라미터
OR REPLACE
이미 function이 존재할 경우, 기존의 function을 새로운 function으로 대체한다.
function name
생성할 function의 이름으로써 스키마 내에서 고유한 이름이어야 한다. schema_name.function_name과 같이 function이 속할 스키마를 정의할 수 있다. schema_name을 생략할 경우, 구문을 수행하는 사용자의 기본 스키마 이름이 사용된다. function 이름의 길이는 128 바이트보다 작아야 한다.
parameter name
Function의 parameter 이름을 정의한다. 각 parameter 이름은 function 내에서 고유해야 한다. 즉, function의 parameter와 PL item은 동일한 이름을 가질 수 없다. Parameter 이름의 길이는 128 바이트보다 작아야 한다. 하나의 function에서 사용할 수 있는 parameter의 최대 개수에는 제한이 없다.
parameter mode
각 parameter mode를 설정한다. Parameter mode에는 IN, OUT, IN OUT이 있다. Parameter mode를 명시하지 않을 경우, 기본 mode는 IN이다.
parameter default
Parameter의 기본값이다. Parameter default가 명시된 parameter는 function 실행할 때 생략할 수 있다. Parameter를 명시하지 않고 생략할 경우, parameter를 정의할 때 명시한 <value expression>을 기본값으로 가진다. <value expression>의 datatype은 parameter의 datatype이어야 한다. <parameter default>를 가진 parameter 이후에 정의되는 모든 parameter에는 <parameter default>가 있어야 한다.
return clause
Function의 반환 형태를 정의한다. <return clause>에서는 다음과 같이 정의된다.
RETURN <datatype>
Function에서 반환하는 반환값의 datatype을 정의한다.
RETURN TABLE ( <table function column list> )
반환하는 결과 집합의 table type을 정의한다.
table function column list
Table function이 반환하는 결과 집합의 column 이름이다. Column 이름의 길이는 128 바이트보다 작아야 한다. Column 개수에는 제한이 없다. 각 column 이름은 <table function column list>에서 고유하다. Column 이름은 parameter 및 declare item 이름과 동일할 수 있다. <table function column list>에 정의된 column은 function의 PL block 내에서 참조할 수 없다.
function characteristics
Function 수행 옵션을 정의한다. 같은 항목에 대해서는 한 번만 기술해야 한다.
DETERMINISTIC: 동일한 인자값들이 입력될 경우 해당 function은 항상 동일한 결과값을 반환한다.
AUTHID CURRENT_USER: Function을 실행하는 도중에 수행되는 SQL들은 invoker의 authorization에 따라 해석되고 수행된다.
AUTHID DEFINER: Function을 실행하는 도중에 수행되는 SQL들은 definer의 authorization에 따라 해석되고 수행된다.
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 절을 정의하지 않고 있다.
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 | O |
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 PACKAGE
기능
Package 내에서 사용될 public item들에 대한 spec을 정의한다.
구문
<create package statement> ::=
CREATE [ OR REPLACE ]
PACKAGE package_name
[ <package_characteristics> ]
{ IS | AS }
<item_declaration>
END
;
<package_characteristics> ::=
AUTHID CURRENT_USER | AUTHID DEFINER
<item_declaration> ::= <variable declaration>
| <cursor declaration>
| <user-defined type declaration>
| <function declaration>
| <procedure declaration>
| <user exception declaration>
| <cursor definition>사용 범위 및 접근 권한
<create package statement> 구문을 수행하려면 사용자가 다음 조건들을 만족해야 한다.
Package를 생성하려면 다음 권한 중 하나가 있어야 한다.
Package가 속한 스키마에 대해 (CREATE PACKAGE 또는 CONTROL SCHEMA) ON SCHEMA
CREATE ANY PACKAGE ON DATABASE
OR REPLACE 절을 사용할 때 이미 package가 존재할 경우, 기존 package를 제거할 수 있는 다음 권한 중 하나가 있어야 한다.
해당 package의 소유자
Package가 속한 스키마에 대해 (DROP PACKAGE 또는 CONTROL SCHEMA) ON SCHEMA
구문을 수행한 사용자는 생성한 package의 소유자이다.
구문 규칙 및 파라미터
OR REPLACE
이미 package가 존재할 경우, 기존의 package specification을 대체한다.
PACKAGE NAME
생성할 package의 이름이며, schema 내에서 유일한 이름이어야 한다. schema_name.package_name과 같이 package가 속할 스키마를 정의할 수 있다. schema_name을 생략할 경우, 구문을 수행하는 사용자의 기본 스키마 이름이 사용된다. Package 이름의 길이는 128 바이트보다 작아야 한다.
Package Characteristics
Package를 수행하는 옵션을 정의한다. 같은 항목에 대해서는 한 번만 기술해야 한다.
AUTHID CURRENT_USER: Package 내의 item들이 실행되는 도중에 수행되는 SQL들은 invoker의 authorization에 따라 해석되어 수행된다.
AUTHID DEFINER: Package 내의 item들이 실행되는 도중에 수행되는 SQL들은 definer의 authorization에 따라 해석되어 수행된다.
Item Declaration
Package 외부에서 접근 가능한 public 변수, type, 커서, 커서 변수, function spec, procedure spec을 선언한다. Package 내의 function과 procedure는 반드시 create package body 구문을 통해 정의되어야 한다. Package 내에서 SQL 없이 선언만 된 커서는 반드시 create package body 구문을 통해 정의되어야 한다. 또한 package 내의 function, procedure, 커서의 argument와 반환 타입들은 body 구문 내에 정의된 것과 일치해야 한다.
설명
Schema-level package specification을 생성한다. 생성된 package의 모든 public item은 다른 procedure/ function/ package/ anonymous block 들에 의해 참조될 수 있다.
Package 생성 정보는 DEFINITION_SCHEMA나 INFORMATION_SCHEMA의 MODULES 테이블에서 확인할 수 있다. Package 내의 공개된 각 procedure/ function 목록은 DEFINITION_SCHEMA나 INFORMATION_SCHEMA 의 ROUTINES 테이블에서 확인할 수 있다. Package 내의 공개된 각 procedure/ function의 parameter들에 대한 정의는 DEFINITION_SCHEMA나 INFORMATION_SCHEMA의 PARAMETERS 테이블에서 확인할 수 있다. 공개되지 않은 procedure/ function은 MODULE_BODY 테이블에서 확인할 수 있다. Package 내의 procedure/ function 변수가 참조하는 object들의 정보가 일시적으로 불완전해졌을 경우, <alter package> 구문으로 recompile을 시도해 볼 수 있다.
사용 예
CREATE OR REPLACE PACKAGE PKG1 IS V1 INTEGER; PROCEDURE PROC1; FUNCTION FUNC1 RETURN INTEGER; END; / Package created.
호환성
SQL 표준에서는 CREATE MODULE 구문이다.
참조
자세한 내용은 다음을 참조한다.
CREATE PACKAGE BODY
기능
Package 내에서 사용될 procedure/ function/ 커서들에 대한 정의를 생성한다.
구문
<create package body statement> ::=
CREATE [ OR REPLACE ] PACKAGE BODY package_name
{ IS | AS }
<item_declaration>
<cursor_definition>
<routine_definition>
[ BEGIN <initialization part> ]
END
;
<item_declaration> ::= VARIABLE_DECLARATION
| CURSOR_DECLARATION
| USER_DEFINED_TYPE_DEFINITION
| FUNCTION_DECLARATION
| PROCEDURE_DECLARATION
| USER_EXCEPTION_DECLARATION
<routine_definition> ::= FUNCTION_DEFINITION
| PROCEDURE_DEFINITION
<initialization part> ::= <pl_stmt_list>사용 범위 및 접근 권한
<create package body statement> 구문을 수행하려면 사용자가 다음 조건들을 만족해야 한다.
Package body를 생성하려면 다음 권한 중 하나가 있어야 한다.
Package가 속한 스키마에 대해 (CREATE PACKAGE 또는 CONTROL SCHEMA) ON SCHEMA
CREATE ANY PACKAGE ON DATABASE
Package spec이 이미 정의되어 있는 상태이어야 한다.
OR REPLACE 절을 사용할 때 package body가 이미 존재할 경우, 기존 package를 제거할 수 있는 다음 권한 중 하나가 있어야 한다.
해당 package의 소유자
Package가 속한 스키마에 대해 (DROP PACKAGE 또는 CONTROL SCHEMA) ON SCHEMA
DROP ANY PACKAGE ON DATABASE
구문을 수행한 사용자는 생성한 package의 소유자이다.
구문 규칙 및 파라미터
OR REPLACE
Package body가 이미 존재할 경우, 기존의 package body definition을 대체한다.
PACKAGE NAME
생성할 package body의 이름이며, package spec 생성에 사용된 동일한 이름을 사용해야 한다. schema 내에서 유일한 이름이어야 한다. schema_name.package_name 과 같이 package가 속할 스키마를 정의할 수 있다. schema_name을 생략할 경우, 구문을 수행하는 사용자의 기본 스키마 이름이 사용된다. Package 이름의 길이는 128 바이트보다 작아야 한다.
Item Declaration
Package body 내에서 사용할 PSM identifier들 (변수, type, 커서, function spec, procedure spec, exception 등)을 선언한다. Package spec 내에 선언된 routine들은 반드시 package body에서 정의되어야 한다. Package spec 내에서 SQL 없이 선언만 된 커서들은 반드시 package body에 정의되어야 한다. 또한 package 내의 function, procedure, 커서의 argument 및 반환 타입들은 body 구문 내에 정의된 것과 일치해야 한다.
Initialization Part
Package instance 생성 과정에서 내부 변수등의 초기화를 위해 한 번만 수행되는 구문들을 기술한다.
설명
Schema-level package body를 생성한다. 생성된 package body의 모든 private item은 다른 procedure/ function/ package/ anonymous block 들에 의해 참조될 수 없고 해당 package body 내에서만 사용된다.
Package body의 생성 정보는 DEFINITION_SCHEMA나 INFORMATION_SCHEMA의 MODULE_BODY 테이블에서 확인할 수 있다. Package body 내의 각 private item들의 목록은 DEFINITION_SCHEMA나 INFORMATION_SCHEMA에서 확인할 수 없다. Package 내의 procedure/ function/ 변수가 참조하는 object들의 정보가 일시적으로 불완전해졌을 경우, <alter package body> 구문으로 recompile을 시도해 볼 수 있다.
생성된 package body는 <drop package>나 <drop package body> 구문으로 삭제할 수 있다.
사용 예
CREATE OR REPLACE PACKAGE PKG1
IS
V1 INTEGER;
PROCEDURE PROC1;
FUNCTION FUNC1 RETURN INTEGER;
END;
/
Package created.
CREATE OR REPLACE PACKAGE BODY PKG1
IS
FUNCTION FUNC1 RETURN INTEGER
IS
BEGIN
RETURN V1;
END;
PROCEDURE PROC1
IS
BEGIN
IF V1 IS NULL
THEN
V1 := 10;
ELSE
V1 := V1 + 10;
END IF;
END;
END;
/
Package created.호환성
SQL 표준에는 정의되어 있지 않다.
참조
자세한 내용은 다음을 참조한다.
CREATE PROCEDURE
기능
Schema-level procedure를 정의한다.
구문
<create procedure statement> ::=
CREATE [ OR REPLACE ] PROCEDURE <procedure name> [ ( <parameter list> ) ]
{ IS | AS }
<item declaration>
BEGIN
<pl statement list>
END [ <procedure name> ]
;
<parameter list> ::=
<parameter name> [ <parameter mode> ] <datatype> [ <parameter default> ] [ , ... ]
<parameter mode> ::=
IN
| OUT
| IN OUT
<parameter default> ::=
{ := | DEFAULT } <value expression>
<procedure characteristics> ::=
AUTHID CURRENT_USER
| AUTHID DEFINER사용 범위 및 접근 권한
<create procedure statement> 구문을 수행하려면 사용자가 다음 조건들을 만족해야 한다.
Procedure를 생성하기 위해 다음 권한 중 하나가 있어야 한다.
Procedure가 속한 스키마에 대해 (CREATE PROCEDURE 또는 CONTROL SCHEMA) ON SCHEMA
CREATE ANY PROCEDURE ON DATABASE
OR REPLACE 절을 사용할 때 이미 procedure가 존재할 경우, 기존 procedure를 제거할 수 있는 다음 권한 중 하나가 있어야 한다.
해당 procedure의 소유자
Procedure가 속한 스키마에 대해 (DROP PROCEDURE 또는 CONTROL SCHEMA) ON SCHEMA
DROP ANY PROCEDURE ON DATABASE
구문을 수행한 사용자는 생성한 procedure의 소유자이다.
구문 규칙 및 파라미터
OR REPLACE
이미 procedure가 존재할 경우, 기존의 procedure를 새로운 procedure로 대체한다.
procedure name
생성할 procedure의 이름으로써 스키마 내에서 고유한 이름이어야 한다. schema_name.procedure_name과 같이 procedure가 속할 스키마를 정의할 수 있다. schema_name을 생략할 경우, 구문을 수행하는 사용자의 기본 스키마 이름이 사용된다. procedure 이름의 길이는 128 바이트보다 작아야 한다.
parameter name
Procedure의 parameter 이름을 정의한다. 각 parameter 이름은 procedure 내에서 고유해야 한다. 즉, procedure의 parameter와 PL item은 동일한 이름을 가질 수 없다. parameter 이름의 길이는 128 바이트보다 작아야 한다. 하나의 procedure에서 사용할 수 있는 parameter의 최대 개수에는 제한이 없다.
parameter mode
각 parameter mode를 설정한다. Parameter mode에는 IN, OUT, IN OUT이 있다. Parameter mode를 명시하지 않을 경우, 기본 mode는 IN이다.
parameter default
Parameter의 기본값이다. Parameter default가 명시된 parameter는 procedure 실행할 때 생략할 수 있다. Parameter를 명시하지 않고 생략할 경우, parameter를 정의할 때 명시한 <value expression>을 기본값으로 가진다. <value expression>의 datatype은 parameter의 datatype이어야 한다. <parameter default>를 가진 parameter 이후에 정의되는 모든 parameter에는 <parameter default>가 있어야 한다.
procedure characteristics
Procedure 수행 옵션을 정의한다. 같은 항목에 대해서는 한 번만 기술해야 한다.
AUTHID CURRENT_USER: Procedure를 실행하는 도중에 수행되는 SQL들은 invoker의 authorization에 따라 해석되고 수행된다.
AUTHID DEFINER: Procedure를 실행하는 도중에 수행되는 SQL들은 definer의 authorization에 따라 해석되고 수행된다.
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 표준에서는 다음과 같은 절을 정의하지 않고 있다.
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 | O |
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> 구문을 수행하려면 사용자에게 다음 권한 중 하나가 있어야 한다.
해당 function의 소유자
Function이 속한 스키마에 대해 (DROP PROCEDURE 또는 CONTROL SCHEMA) ON SCHEMA
DROP ANY PROCEDURE ON DATABASE
구문 규칙 및 파라미터
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 표준은 다음과 같은 절을 정의하지 않고 있다.
Feature ID | 설명 | 지원 여부 |
|---|---|---|
F032 | CASCADE drop behavior | X |
S024 | Enhanced structured types | X |
참조
자세한 내용은 다음을 참조한다.
DROP PACKAGE
기능
Package (body만 또는 spec/ body 모두)를 제거한다.
구문
<drop package statement> ::=
DROP PACKAGE [BODY] [ IF EXISTS ] package_name
;사용 범위 및 접근 권한
<drop package statement> 구문을 수행하려면 사용자에게 다음 권한 중 하나가 있어야 한다.
해당 package의 소유자
Package가 속한 스키마에 대해 (DROP PACKAGE 또는 CONTROL SCHEMA) ON SCHEMA
DROP ANY PACKAGE ON DATABASE
구문 규칙 및 파라미터
BODY
주어진 이름을 가진 package의 body 객체만 제거한다. BODY 라는 키워드를 명시하지 않은 경우 package specification과 body를 모두 삭제한다.
IF EXISTS
Package가 존재하지 않더라도 에러가 발생하지 않는다.
PACKAGE NAME
제거할 package의 이름이다. schema_name.package_name 과 같이 package가 소속한 스키마를 정의할 수 있다. schema_name을 생략할 경우, 구문을 수행하는 사용자의 기본 스키마 이름이 사용된다.
설명
지정된 package object를 제거한다.
사용 예
CREATE PACKAGE PKG1
IS
V1 INTEGER;
FUNCTION FUNC1 (A1 INTEGER) RETURN INTEGER;
END;
/
Package created.
DROP PACKAGE IF EXISTS PKG1;
Package dropped.호환성
SQL 표준에서는 DRO MODULE 구문이다.
참조
자세한 내용은 다음을 참조한다.
DROP PROCEDURE
기능
Procedure를 제거한다.
구문
<drop procedure statement> ::=
DROP PROCEDURE [ IF EXISTS ] proc_name
;사용 범위 및 접근 권한
<drop procedure statement> 구문을 수행하려면 사용자에게 다음 권한 중 하나가 있어야 한다.
해당 procedure의 소유자
Procedure가 속한 스키마에 대해 (DROP PROCEDURE 또는 CONTROL SCHEMA) ON SCHEMA
DROP ANY PROCEDURE ON DATABASE
구문 규칙 및 파라미터
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 표준은 다음과 같은 절을 정의하지 않고 있다.
Feature ID | 설명 | 지원 여부 |
|---|---|---|
F032 | CASCADE drop behavior | X |
S024 | Enhanced structured types | X |
참조
자세한 내용은 다음을 참조한다.