zoukankan      html  css  js  c++  java
  • oracle 函数

    函数创建

    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;


    各种常用函数 略。

  • 相关阅读:
    网络IO之阻塞、非阻塞、同步、异步总结
    C语言栈与调用惯例
    多个文件目录下Makefile的写法
    利用 mount 指令解决 Read-only file system的问题
    error while loading shared libraries: xxx.so.x" 错误的原因和解决办法
    Centos6.4下安装protobuf及简单使用
    Centos下修改启动项和网络配置
    Centos下配置单元测试工具gtest
    Centos配置为驱动程序开发环境
    Centos安装gcc及g++
  • 原文地址:https://www.cnblogs.com/happinessqi/p/3354682.html
Copyright © 2011-2022 走看看