函数创建

CREATE [OR REPLACE] FUNCTION [schema.] function_name [parameter_list]
{AS | IS}
declaration_section
BEGIN
  executable_section
EXCEPTION
  exceptioon_section
END [function_name];

 


创建一个函数:

1 CREATE OR REPLACE FUNCTION f1(par1 IN NUMBER DEFAULT 500)
2 RETURN NUMBER 
3 IS 
4 V1 NUMBER;
5 BEGIN
6 SELECT 1 INTO V1 FROM DUAL;
7 RETURN(V1);
8 END;

 

函数的调用
可以在SQL语句中调用:SELECT f1(2) FROM dual;
可以在表达式中调用函数:IF f1(1)+7>10 THEN ..
函数的编译
alter function f1 COMPIL;

--1.用函数返回一个结果集--

 1 CREATE OR REPLACE FUNCTION fun_getresult
 2 RETURN pack_return_result.type_cursor IS
 3 p pack_return_result.type_cursor;
 4 BEGIN
 5 OPEN p FOR
 6 SELECT name,producer,price FROM phone_info 
 7 WHERE price > 900;    
 8 RETURN(p);
 9 END;
10 SQL> var var_bind_ref REFCURSOR;
11 SQL> execute :var_bind_ref := fun_getresult();
12 
13 PL/SQL 过程已成功完成。
14 
15 已用时间: 00: 00: 00.00
16 SQL> PRINT var_bind_ref;
17 
18 NAME PRODUCER PRICE
19 -------------------- ------------------------------ ----------
20 iphone APPLE 3999
21 C510c 爱立信 1000
22 
23 已选择2行。

 

--2.在函数中执行DDL--

1 CREATE OR REPLACE FUNCTION f2(tablename IN VARCHAR2) 
2 RETURN NUMBER
3 IS
4 PRAGMA AUTONOMOUS_TRANSACTION;--自治事务,
5 V1 NUMBER;
6 BEGIN
7 EXECUTE IMMEDIATE 'CREATE TABLE '|| tablename ||'(name VARCHAR2(20))';
8 RETURN(V1);
9 END;
--运行f2(),创建一个新的table bb。
DECLARE 
v_r NUMBER;
BEGIN
v_r :=f2('bb');
END;

(自治事务机制允许用户在事务中建立一个新的事务,也就是事务中嵌套一个新事务
把这个新事务叫做自治事务,把原来的事务叫主事务,或父事务。自治事务的提交和回滚
不会影响到父事务的状态。自治事务由主事务调用,但是独立于主事务,在自治事务被调
用执行的时候,主事务被挂起,在自治事务内部,可以执行一系列的DML语句,并且可以提交
或回滚,使用PRAGMA AUTONOMOUS_TRANSACTION指定自治事务。)

--3在函数中执行DML---

 1 CREATE OR REPLACE FUNCTION f_phone RETURN VARCHAR2 IS
 2 BEGIN
 3 INSERT INTO phone_info VALUES('iphone5c','apple',2890);--插入数据
 4 COMMIT;
 5 RETURN 'ok';
 6 END;
 7 --在块中调用函数f_phone:---
 8 DECLARE 
 9 v_r VARCHAR2(100);
10 BEGIN
11 v_r :=f_phone;
12 dbms_output.put_line(v_r);
13 END;

 


各种常用函数 略。

 

 

posted on 2013-10-06 21:38  happinessqi  阅读(199)  评论(0编辑  收藏  举报