oracle函数、存储过程、序列

一. 函数

  1. c2b函数:clob转blob 

create or replace function c2b (b in clob default empty_clob())
return blob
is
    res blob;
    bLen number := dbms_lob.getlength(b);
    destOffset1 number := 1;
    srcOffset1 number := 1;
    amountC integer := dbms_lob.lobmaxsize;
    blobCsid number := dbms_lob.default_csid;
    langCtx integer := dbms_lob.default_lang_ctx;
    warning integer;
begin
    if bLen > 0 then
        dbms_lob.createtemporary(res, true);
        dbms_lob.open(res, dbms_lob.lob_readwrite);
        dbms_lob.convertToBlob(res, b, amountC, destOffset1, srcOffset1, blobCsid, langCtx, warning );
    else
        select empty_blob() into res from dual;
    end if;

    return res;
end c2b;

  2. hexToDec函数:十六进制字符串转数值型字符串

create or replace function hexToDec(icHex   in   varchar2)
return   varchar2
is
    iDecimal   integer;
    cNewHex   varchar2(1);
    iHexLen   integer;
    result   integer;
begin
    result   :=0;
    iHexLen   :=   length(icHex);
    for  i  in  1..iHexLen   loop
        cNewHex   :=substr(icHex,iHexLen   -   i   +   1,1);
        select   decode(cNewHex,‘A‘,10,‘B‘,11,‘C‘,12,‘D‘,13,‘E‘,14,‘F‘,15,to_number(cNewHex))
            into   iDecimal   from   dual;
        result   :=   result   +   iDecimal   *   power(16,(i-1));
    end   loop;
    return(to_char(result));
end   hexToDec;

  3. decToHex函数:数值型字符串转十六进制字符串

create or replace function decToHex(iDecimal   in   varchar2)
return   varchar2
is
    nDecimal   integer;
    quotient   integer;
    residue   integer;
    result   varchar2(50);
begin
    nDecimal   :=   to_number(iDecimal);
    loop
        quotient   :=   floor(nDecimal/16);
        residue   :=   nDecimal   mod   16;
        select   decode(residue,10,‘A‘,11,‘B‘,12,‘C‘,13,‘D‘,14,‘E‘,15,‘F‘,to_char(residue))   ||   result
            into   result   from   dual;
        exit   when   quotient   =   0;
        nDecimal   :=   quotient;
    end   loop;
    return(result);
end   decToHex;

二. 序列

  1. 创建序列

create sequence seqEmp
minvalue 0
maxvalue 99999999
start with 1
increment by 1
nocache;

  

  2. seqReset存储过程:重置序列

create or replace procedure seqReset(vSeqName varchar2)
is
    n number(10);
    tSql varchar2(100);
begin
    execute immediate ‘select ‘||vSeqName||‘.nextval from dual‘ into n;
    n:=-n;
    tSql:=‘alter sequence ‘||vSeqName||‘ increment by ‘||n;
    execute immediate tSql;
    execute immediate ‘select ‘||vSeqName||‘.nextval from dual‘ into n;
    tSql:=‘alter sequence ‘||vSeqName||‘ increment by 1‘;
    execute immediate tSql;
end seqReset;

时间: 2024-10-11 00:36:28

oracle函数、存储过程、序列的相关文章

oracle表,视图,存储过程,函数,序列.....查询

查询存储过程,函数,序列,表,视图的名字 select object_name from user_objects where object_type = 'PROCEDURE' select object_name from user_objects where object_type = 'FUNCTION' select object_name from user_objects where object_type = 'SEQUENCE' select object_name from

Oracle系列:(33)JDBC访问Oracle的存储过程和存储函数

1.存储过程 1.1.准备SQL -- 定义存储过程 create or replace procedure get_rax(salary in number,rax out number) as     --需要交税的钱     bal number; begin     bal := salary - 3500;     if bal<=1500 then        rax := bal * 0.03 - 0;     elsif bal<=4500 then        rax :

oracle函数和存储过程有什么区别

1. 返回值的区别,函数有1个返回值,而存储过程是通过参数返回的,可以有多个或者没有 2.调用的区别,函数可以在查询语句中直接调用,而存储过程必须单独调用. 函数一般情况下是用来计算并返回一个计算结果而存储过程一般是用来完成特定的数据操作(比如修改.插入数据库表或执行某些DDL语句等等) 参数的返回情况来看: 如果返回多个参数值最好使用存储过程,如果只有一个返回值的话可以使用函数: 从调用情况来看: 如果在SQL语句(DML或SELECT)中调用的话一定是存储函数或存储的封装函数不可以是存储过程

java下实现调用oracle的存储过程和函数

目录(?)[-] 创建表STOCK_PRICES 插入测试数据 建立一个返回游标 创建和存储过程P_GET_PRICE 创建函数 JAVA调用存储过程返回结果集 开发JAVA调用函数返回结果集 在oracle下创建一个test的账户,然后 1.创建表:STOCK_PRICES [cpp] view plaincopy --创建表格 CREATE TABLE STOCK_PRICES( RIC VARCHAR(6) PRIMARY KEY, PRICE NUMBER(7,2), UPDATED D

懵懂oracle之存储过程

/* 作为一个oracle界和厨师界的生手,笔者想给大家分享讨论下存储过程的知识,因为在我接触的通信行业中,存储过程的使用还是占据了一小块的地位. 存储过程是什么?不得不拿下百度词条的解释来:"存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中, 经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它.存储过程是数据库中的一个重要对象." 其实就似我们经过一系列的

oracle分页存储过程

oracle分页存储过程: CREATE OR REPLACE PROCEDURE FGK.prc_page (p_tableName in varchar2, --表名 p_strWhere in varchar2, --查询条件 p_orderColumn in varchar2, --排序的列 p_orderStyle in varchar2, --排序方式 p_curPage in out Number, --当前页 p_pageSize in out Number, --每页显示记录条

oracle触发器、序列、任务计划练习一例

今天在闲暇时间练习了一下oracle任务计划,具体详情如下 1.创建表 TBL_TIME create table tbl_time( id number not null,    /*id号*/ vsecond varchar2(2),   /* 秒*/ vtime varchar2(10)    /*当前时间*/ ) 2.创建序列 seq_tbltime create sequence seq_tbltime start with 1 increment by 1 nomaxvalue no

oracle的存储过程语法(转)

1.ORA-00942: table or view does not exist 指的你要操作的表尚未存在,需要先create出来先. 2.ORA-00922: missing or invalid option 指的是有语法错误.遗漏了分号什么的 3.Warning: Procedure created with compilation errors 比如  create or replace procedure p_test_pro1 is     begin       insert i

oracle 函数集锦

oracle的函數很多﹐特整理出來﹕ abs(m)  m的绝对值mod(m,n) m被n除后的余数power(m,n) m的n次方round(m[,n]) m四舍五入至小数点后n位的值(n缺省为0)trunc(m[,n]) m截断n位小数位的值(n缺省为0) 字符函数: initcap(st) 返回st将每个单词的首字母大写,所有其他字母小写lower(st) 返回st将每个单词的字母全部小写upper(st) 返回st将每个单词的字母全部大写concat(st1,st2)  返回st为st2接

Oracle中的序列

序列是什么? 序列是用来生成唯一.连续的整数的数据库对象.序列通常用来自动生成主键或唯一键的值.序列可以按升序排列,也可以按照降序排列. 其实Oracle中的序列和MySQL中的自增长差不多一个意思. 创建序列  创建序列.从序号10开始,每次增加1,最大为2000,不循环,再增加会报错 CREATE SEQUENCE seq1 START WITH 10 INCREMENT BY 1 MAXVALUE 2000 NOCYCLE CACHE 30; 访问序列 访问下一个: seq1.NEXTVA