ALTER FUNCTION
기능
Function을 다시 compile 한다.
구문
<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을 다시 compile 한다.
사용 예
gSQL> ALTER FUNCTION FUNC1 COMPILE; Function altered.
호환성
SQL 표준에서는 CREATE를 수행할 때 지정된 characteristic들을 변경하는 구문이고, GOLDILOCKS에서는 function의 plan을 다시 생성하는 구문이다.
Feature ID | 설명 | 지원 여부 |
|---|---|---|
F381 | Extended schema manipulation | O |
참조
자세한 내용은 다음을 참조한다.
ALTER PROCEDURE
기능
Procedure를 다시 compile 한다.
구문
<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를 다시 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을 다시 생성하는 구문이다.
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 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> 구문을 수행하려면 사용자가 다음 조건들을 만족해야 한다.
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 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 수행 옵션을 정의한다. 같은 항목에 대해서는 한 번만 기술해야 한다.
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 | 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> 구문을 수행하려면 사용자가 다음 조건들을 만족해야 한다.
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를 대체한다.
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 수행 옵션을 정의한다. 같은 항목에 대해서는 한 번만 기술해야 한다.
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 | 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> 구문을 수행하려면 사용자에게 다음 권한 중 하나가 있어야 한다.
해당 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 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 |
참조
자세한 내용은 다음을 참조한다.