User-defined Functions

advertisement
User-defined Functions
CSED421: Database Systems Labs
User-Defined Functions
 To provide functionality that is not available in
SQL or SQL built-in functions
 PL/SQL (Procedural Language extension to SQL)
 Procedural language built in Oracle
 Support conditional (IF) statement, loop (WHILE, FOR)
statement
 Procedure / Function
User-Defined Functions (cont.)
 Can appear in a SQL statement anywhere SQL
functions can appear

Select list of a SELECT statement

Condition of a WHERE clause

ORDER BY, and GROUP BY clauses

VALUES clause of an INSERT statement

SET clause of an UPDATE statement
RETURN Clause
 Every function must return a value
 Oracle SQL does not support calling of functions
with boolean parameters of returns

Design functions to return number (0 or 1) or strings (‘TRUE’
or ‘FALSE’)
 The data type cannot specify a length, precision,
or scale
Syntax
Examples
the same type as jobs.job_id
Variable declaration
PL/SQL Block
Examples
 Convert Celsius to Fahrenheit

CREATE OR REPLACE FUNCTION CtoF (Celsius IN NUMBER)
RETURN NUMBER IS
BEGIN
RETURN (Celsius * 1.8) + 32;
END;
/
Examples
 IF statements

IF k=0 THEN
result:=-1;
ELSIF k=1 OR k=2
result:=1;
ELSE
result:=0;
END IF;
 WHILE statements

WHILE k > 0 LOOP
k := k – 1;
END LOOP;
THEN
create or replace function
make_zero (k in number)
return number
is
result number;
begin
result := k;
while result > 0 loop
result := result - 1;
end loop;
return result;
end make_zero;
/
Practice 1
 “ORA-01476: divisor is equal to zero” 문제를 피해
가기 위한 나누기 함수를 생성하고 확인

함수명은 divide로 생성

함수는 두 개의 숫자(NUMBER) a, b를 입력 받는다

b=0 이면 결과로 0을 RETURN 한다

b!=0 이면 a/b를 RETURN 한다

확인하는 방법: (1) temp variable 선언, (2) execute 명령어를 사용
하여 divide function을 실행, (3) print 명령어를 사용하여 출력
Practice 2
 사원번호를 치면 department_name을 출력하고 싶다.
출력하는 함수를 만드시오. 그리고 함수를 확인하기 위해
사원번호, 이름, 부서명을 출력하는 쿼리를 입력하시오.
 주의: return 타입으로 varchar2를 사용, varchar2(20)과 같
이 scale을 정의 불가
Practice 3
 10진수를 16진수 값으로 CONVERSION하는 함수를 만
들고, 함수를 확인하기 위해 사원번호를 16진수로 출력
하는 쿼리를 입력하시오
EMPLOYEE_ID
DECTOHEX(EMPLOYEE_ID)
 힌트: 사용 가능한 built-in function
 모듈로 연산: 17 mod 16
 버림 연산: trunc(2.2)
 숫자를 char로 변환: to_char(2)
 Concatenation: concat(‘abc’, ‘d’)
 주의: return 타입으로 varchar2를 사용
varchar2(20)과 같이 scale을 정의 불가
------------------------------------100
64
101
65
102
66
103
67
104
68
107
6B
124
7C
141
8D
142
8E
143
8F
144
90
149
95
174
AE
176
B0
178
B2
200
C8
201
C9
202
CA
205
CD
206
CE
20 rows selected.
References
 Oracle Database Application Developer’s Guide Fundamentals

http://stanford.edu/dept/itss/docs/oracle/10g/appdev.101/b10
795/adfns_pc.htm#ADFNS009
 Oracle Database SQL Reference – CREATE
FUNCTION

http://stanford.edu/dept/itss/docs/oracle/10g/server.101/b107
59/statements_5009.htm#i2153260
Download