Presentation is loading. Please wait.

Presentation is loading. Please wait.

User-defined Functions CSED421: Database Systems Labs.

Similar presentations


Presentation on theme: "User-defined Functions CSED421: Database Systems Labs."— Presentation transcript:

1 User-defined Functions CSED421: Database Systems Labs

2 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

3 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

4 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

5 Syntax

6 Examples Variable declaration PL/SQL Block the same type as jobs.job_id

7 Examples  Convert Celsius to Fahrenheit CREATE OR REPLACE FUNCTION CtoF (Celsius IN NUMBER) RETURN NUMBER IS BEGIN RETURN (Celsius * 1.8) + 32; END; /

8 Examples  IF statements IF k=0 THEN result:=-1; ELSIF k=1 OR k=2 THEN result:=1; ELSE result:=0; END IF;  WHILE statements WHILE k > 0 LOOP k := k – 1; END LOOP; 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; /

9 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 명령어를 사용하여 출력

10 Practice 2  사원번호를 치면 department_name 을 출력하고 싶다. 출력하는 함수를 만드시오. 그리고 함수를 확인하기 위해 사원번호, 이름, 부서명을 출력하는 쿼리를 입력하시오. 주의 : return 타입으로 varchar2 를 사용, varchar2(20) 과 같 이 scale 을 정의 불가

11 Practice 3  10 진수를 16 진수 값으로 CONVERSION 하는 함수를 만 들고, 함수를 확인하기 위해 사원번호를 16 진수로 출력 하는 쿼리를 입력하시오 힌트 : 사용 가능한 built-in function  모듈로 연산 : 17 mod 16  버림 연산 : trunc(2.2)  숫자를 char 로 변환 : to_char(2)  Concatenation: concat(‘abc’, ‘d’)  주의 : return 타입으로 varchar2 를 사용 varchar2(20) 과 같이 scale 을 정의 불가 EMPLOYEE_ID DECTOHEX(EMPLOYEE_ID) ------------------------------------- 10064 10165 10266 10367 10468 1076B 1247C 1418D 1428E 1438F 14490 14995 174AE 176B0 178B2 200C8 201C9 202CA 205CD 206CE 20 rows selected.

12 References  Oracle Database Application Developer’s Guide - Fundamentals http://stanford.edu/dept/itss/docs/oracle/10g/appdev.101/b10 795/adfns_pc.htm#ADFNS009 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 http://stanford.edu/dept/itss/docs/oracle/10g/server.101/b107 59/statements_5009.htm#i2153260


Download ppt "User-defined Functions CSED421: Database Systems Labs."

Similar presentations


Ads by Google