create or replace function Fuc_Get_AuthorName(RecID_In in varchar2, AdmID_In in varchar2) return varchar2 is
Result varchar2(8000);
names varchar2(4000); Cursor Cur_Get_AuthorNameS Is
SELECT PEOPLENAME From TB_NEWS_CONTRI_AUTHOR Where REC_ID=RecID_In; Cursor Cur_Get_AuthorName Is
SELECT PEOPLENAME From TB_NEWS_CONTRI_AUTHOR Where REC_ID=RecID_In And UNITID=AdmID_In;
begin If RecID_In Is NULL Then
Return '';
End If; If AdmID_In Is NULL Then
open Cur_Get_AuthorNameS;
fetch Cur_Get_AuthorNameS into names;
while Cur_Get_AuthorNameS%FOUND
loop
Result:=Result || names || '、';
fetch Cur_Get_AuthorNameS into names;
end loop;
close Cur_Get_AuthorNameS;
ELSE
open Cur_Get_AuthorName;
fetch Cur_Get_AuthorName into names;
while Cur_Get_AuthorName%FOUND
loop
Result:=Result || names || '、';
fetch Cur_Get_AuthorName into names;
end loop;
close Cur_Get_AuthorName;
End If; if(Result is null) Then
Return '';
End If; if length(Result)>0 then
Result:=substr(Result,1,length(Result)-1);
end if;
return(Result); Exception
When OTHERS Then
Return '';
end Fuc_Get_AuthorName;

1.输出用"、"符合分隔多个作者列表

2.获取数据库表的主键最大值

3.根据分割类来分割字符串

4.计算周岁的函数

6.带排序的oracle分页存储过程(来自网络)

--输入order by 的sqeuence是,应该为“ desc”或者“ asc”
--若输入两个order by则,v_order_field=" a[sequence] ,order by b " CREATE OR REPLACE PROCEDURE TABLEPAGE_SELECT(v_page_size  int, --the size of a page of list
                       v_current_page int, --the current page of list
                       v_table_name varchar2, --the talbe name
                       v_order_field varchar2,--the order field
                       v_order_sequence varchar2,--the order sequence should by "_desc"or "_asc",_is blank.
                       --v_sql_select  varchar2, --the select sql for procedure
                       --v_sql_count  varchar2, --the count sql for procedure
                       --v_out_recordcount OUT int, --the num of return rows
                       p_cursor OUT refcursor_pkg.return_cursor) as
 v_sql     varchar2(3000); --the sql for select all rows of list
 v_sql_count  varchar2(3000); --the count sql for procedure
 v_sql_order  varchar2(2000); --the order of list
 v_count    int; -- the amount rows fo original list
 v_endrownum  int; --the end row num of the current page
 v_startrownum int; --the start row num of the current page
BEGIN
 ----set the order of list
 if v_order_field!='NO' then
  v_sql_order :=' ORDER BY '|| v_order_field ||' '||v_order_sequence;
 else
   v_sql_order :='';
 end if;
 ----catch the amount rows of list
 v_sql_count:='SELECT COUNT(ROWNUM) FROM '||v_table_name;
 execute immediate v_sql_count into v_count;
 -- v_out_recordcount := v_count;
 ----set the value of start and end row
 if v_order_sequence='desc' then
  v_endrownum:=v_count-(v_current_page-1)*v_page_size;
  v_startrownum:=v_endrownum - v_page_size + 1;
 else
  v_endrownum:= v_current_page * v_page_size;
  v_startrownum := v_endrownum - v_page_size + 1;
 end if;
 ----the sql for page slide
 v_sql := 'SELECT * FROM (SELECT '||v_table_name||'.*, rownum rn FROM '||v_table_name||' WHERE rownum <= ' ||
      to_char(v_endrownum) ||' '|| v_sql_order||') WHERE rn >= ' ||
      to_char(v_startrownum)||' '||v_sql_order;
 open p_cursor for v_sql;
END TABLEPAGE_SELECT;
--请问如何用SQL语句获取指定表的表结构
--该表应包含以下字段:字段名、字段类型、字段大小、是否为空 SELECT column_name AS FIELDNAME,data_type AS TYPE,data_length ASSIZE,
nullable AS ISNULL FROM ALL_tab_columns
where table_name = 'TB_SYS_ORG_MEMBER' SELECT * FROM ALL_TAB_COLUMNS
where owner='ZSZGW' and table_name='TB_SYS_ORG_MEMBER'; --根据字段注释查询字段 SELECT A.TABLE_NAME,A.COMMENTS,B.COLUMN_NAME,B.COMMENTS
FROM USER_TAB_COMMENTS A,USER_COL_COMMENTS B
WHERE A.TABLE_NAME=B.TABLE_NAME and b.COMMENTS like '%发放%' --介绍
and a.table_name='TB_SYS_ORG_MEMBER'; --1、SELECT * FROM ALL_TAB_COLUMNS where owner='USE1' and table_name ='B';
--2、desc 表名
--3、
SELECT column_name AS FIELDNAME,data_type,data_length,
nullable AS ISNULL FROM user_tab_columns where table_name = 'TB_SYS_ORG_MEMBER' SELECT * FROM user_tab_columns where table_name = 'TB_SYS_ORG_MEMBER' select userenv ('terminal') from dual select to_char(sysdate,'yyyy-MM-dd HH24:mi:ss') from dual;--mi是分钟 select user from dual SELECT S.SID SESSION_ID, S.USERNAME, DECODE(LMODE, 0, 'None', 1, 'Null', 2, 'Row-S (SS)', 3, 'Row-X (SX)', 4, 'Share', 5, 'S/Row-X (SSX)', 6, 'Exclusive',
TO_CHAR(LMODE)) MODE_HELD, DECODE(REQUEST, 0, 'None', 1, 'Null', 2, 'Row-S (SS)', 3, 'Row-X (SX)', 4, 'Share', 5, 'S/Row-X (SSX)', 6, 'Exclusive',
TO_CHAR(REQUEST)) MODE_REQUESTED, O.OWNER||'.'||O.OBJECT_NAME||' ('||O.OBJECT_TYPE||')',
S.TYPE LOCK_TYPE, L.ID1 LOCK_ID1, L.ID2 LOCK_ID2 FROM V$LOCK L, SYS.DBA_OBJECTS O,
V$SESSION S WHERE L.SID = S.SID AND L.ID1 = O.OBJECT_ID ;

5.获取数据表架构信息

CREATE OR REPLACE FUNCTION Fuc_Get_FullAge(BirthDay_In in date, CallDay_In in date) RETURN integer IS
age integer; BEGIN /*
**给出出生日期,计算日期,返回周岁
**1、如果计算日期和出生日期的月份相同,就要判断计算日期是否过了出生日期
**2、如果是2月29日出生的,那如果是闰年,就是3月1号算增加1岁,如果不是闰年,3月2日增加1岁
**
*/
if BirthDay_In is null or CallDay_In is null then
return null;
end if; --计算日期比出生日期小,返回NULL
if (CallDay_In - BirthDay_In)<0 then
return null;
end if; --计算日期 = 出生日期,返回0
if (BirthDay_In - CallDay_In)=0 then
return 0;
end if; age := extract(year from CallDay_In)-extract(year from BirthDay_In)-1; ----如果月份相同,计算日期>出生日期,加1
if (extract(month from BirthDay_In) = extract(month from CallDay_In)) and (extract(day from BirthDay_In) < extract(day from CallDay_In)) then
age := age + 1;
end if; ----如果计算月份比出生月份大,加1
if (extract(month from BirthDay_In) < extract(month from CallDay_In)) then
age := age + 1;
end if; ----如果出生日期是2月29日,而计算日期是3月1日,那么计算日期是闰年,要减1
if (extract(month from BirthDay_In) = 2 and extract(day from BirthDay_In) = 29 and extract(month from CallDay_In) = 3 and extract(day from CallDay_In) = 1 and ((extract(year from CallDay_In) mod 4=0 and extract(year from CallDay_In) mod 100!=0 ) or extract(year from CallDay_In) mod 400=0)) then
age := age - 1;
end if; return age; Exception
When OTHERS Then
Return 0; end;
CREATE OR REPLACE FUNCTION sf_split_string (strings VARCHAR2, substring VARCHAR2) RETURN Varchar2Varray IS
/*---------------------------------------------------------------------------*\
功能:
根据分割类来分割字符串
输入参数:
strings --输入字符串(如:aaaa|bbbb|cccc)
substring --用于分割的标志(如:' | ' )
输出参数:
数组
\*---------------------------------------------------------------------------*/ len integer := LENGTH(substring);
lastpos integer := 1 - len;
pos integer;
num integer;
i integer := 1;
ret Varchar2Varray := Varchar2Varray(NULL);
BEGIN
LOOP
pos := instr(strings, substring, lastpos + len);
IF pos > 0 THEN --found
num := pos - (lastpos + len);
ELSE --not found
num := LENGTH(strings) + 1 - (lastpos + len);
END IF; IF i > ret.LAST THEN
ret.EXTEND;
END IF; ret(i) := SUBSTR(strings, lastpos + len, num); EXIT WHEN pos = 0;
lastpos := pos;
i := i + 1;
END LOOP; RETURN ret;
END;
CREATE OR REPLACE FUNCTION Fuc_Get_MaxId( TableName_In IN Varchar2,FieldName_In IN Varchar2,CallMode_In IN Varchar2 ) Return  Varchar2 IS
/*---------------------------------------------------------------------------*\
功能:
获取数据库表的主键最大值。
输入参数:
TableName_In --输入需要查询数据库表名称
FieldName_In --输入数据库表对应主键的字段名
CallMode_In --输入调用方式,缺省为'0'
输出参数:
新的12位主键值
\*---------------------------------------------------------------------------*/ SqlStrTmp Varchar2(500);
MaxFieldTmp Varchar2(12);
MaxFieldVar Varchar2(12);
TableNameTmp Varchar2(50); FieldNameTmp Varchar2(50); SysFieldTmp Varchar2(4); Cursor Cur_Sys_Var Is
Select SubStrb(VarValue,1,4) VarValue From Tb_Sys_Var Where VarName='CurrCode'; BEGIN If TableName_In Is NULL Or FieldName_In Is NULL Then
Return '000000000000';
End If; TableNameTmp := Upper( TableName_In );
FieldNameTmp := Upper( FieldName_In ); Open Cur_Sys_Var;
Fetch Cur_Sys_Var Into SysFieldTmp;
If Cur_Sys_Var%NOTFOUND Then
Close Cur_Sys_Var;
Return '000000000000';
End if;
Close Cur_Sys_Var; SqlStrTmp := 'SELECT MAX(To_Number('||FieldNameTmp||')) FROM '||TableNameTmp
||' WHERE '||FieldNameTmp||' LIKE '''||SysFieldTmp||'%'''; Execute Immediate SqlStrTmp INTO MaxFieldTmp; MaxFieldVar := SysFieldTmp||Lpad( To_Char(To_Number(Substrb(Nvl(MaxFieldTmp,SysFieldTmp||'00000000'),5))+1),8,'0'); Return MaxFieldVar; Exception
When OTHERS Then
Return SysFieldTmp||'00000001'; END;

Oracle开发常用函数与存储过程的更多相关文章

  1. Oracle开发常用函数

    max 最大数 自动加 1 create or replace function fun_getmaxlot( vend in varchar2 , domain IN VARCHAR2, tag i ...

  2. Oracle开发常用函数 max 最大数 自动加 1 的模式

    create sequence bs_com_seq increment by 1 start with 1 minvalue 1 maxvalue 999999 cycle nocache orde ...

  3. Oracle开发常用函数 max 最大数 自动加 1

    max 最大数 自动加 1 create or replace function fun_getmaxlot( vend in varchar2 , domain IN VARCHAR2, tag i ...

  4. Oracle数据库常用函数

    Oracle常用函数: 20.COS返回一个给定数字的余弦SQL> select cos(-3.1415927) from dual;COS(-3.1415927)--------------- ...

  5. Oracle数据类型,函数与存储过程

    字符串类型    固定长度:char nchar    n 表示Unicode编码    可变长度: varchar2 nvarchar2 数字类型:number(P,S)P:整数位数,S小数位数   ...

  6. discuz后台开发常用函数

    showsetting()表单显示 返回值:无 参数: $setname - 指定输出标题,如:setting_basic_bbname, 自动匹配描述文字为:setting_basic_bbname ...

  7. Oracle 之 常用函数

    SQL语句根据参数的不同,分为单行函数 和 多行函数. [1] 单行函数:输入是一行,输出也是一行: [2] 多行函数:输入多行数据,输出一个结果. 在执行时,单行函数是检索一行处理一次,而多行函数是 ...

  8. 【Oracle】常用函数

    来源自:https://www.cnblogs.com/lxl57610/p/7442130.html Oracle SQL 提供了用于执行特定操作的专用函数.这些函数大大增强了 SQL 语言的功能. ...

  9. oracle的常用函数

    1. nvl NVL函数的格式如下:NVL(expr1,expr2) 含义是:如果oracle第一个参数expr1为空,那么显示第二个参数的值为expr2,如果第一个参数的值expr1不为空,则显示第 ...

随机推荐

  1. 文本域的宽度和高度应该用cols和rows来控制,还是 用width和height来控制

    文本域宽度如果用cols来控制,缩放网页的时候文本域的宽度不会自动变化 用width来表示就会跟着网页缩放而缩放 看到下面一段文字: 对于内容至上的网页,在禁用CSS的情况下,HTML内容要做到易于阅 ...

  2. Hibernate Tools 自动生成hibernate的hbm文件

    本文有待商榷 当我们在新增插件的时候发现会出现duplicate location,意思是所选的anchive所包含的zip路径已经复用,现象如下: 如上图所示黄色标记部分“Duplicate loc ...

  3. eclipse的插件安装

    如何安装:http://my.oschina.net/linjunlong/blog/126961 插件安装方法:eclipse和myeclipse版本不一样,略有区别 在线安装: 第一种:知道在线安 ...

  4. Windows平台下安装Hadoop

    今天参照这个网址(http://www.cnblogs.com/kinglau/archive/2013/08/20/3270160.html)安装了下,前面七步没有问题. 到第八步出问题了,后来看了 ...

  5. [Bundling and Minification ] 二、绑定的作用

    本篇接上一篇[Bundling and Minification ] 一.如何绑定 Bundling的作用有二,一是合并文件减少资源请求的个数缩短资源请求的时间.二是自动更新到最新js或者css,当合 ...

  6. html和xhtml和html5一些区别和笔记

    XHTML,HTML XHTML 与 HTML 4.01 标准没有太多的不同, XHTML1.0是XML风格的HTML4.01,标签的规范更加严格 , W3C一直是推崇XHTML这种严格类型的语法, ...

  7. bootstrap-model-弹出框背景禁止点击

    bootstrap的model弹出框,默认在点击背景时会隐藏,而有时特殊效果是不允许隐藏,下面就是解决方案:本例参考来自这里 方法一: $('#myModal').modal({backdrop: ' ...

  8. Handler消息机制与Binder IPC机制完全解析

    1.Handler消息机制 序列 文章 0 Android消息机制-Handler(framework篇) 1 Android消息机制-Handler(native篇) 2 Android消息机制-H ...

  9. 去掉谷歌浏览器获取焦点时默认的input、textarea的边框和背景

    去掉chrome(谷歌)浏览器默认的input.textarea的边框(border)和背景(background) 及chrome下不可更改textarea大小 1.使用Chrome的都知道,当鼠标 ...

  10. sql中的xml使用

    SQL openxml用法 使用sp_xml_preparedocument处理XML文档(原文:http://www.cnblogs.com/oec2003/archive/2011/07/23/2 ...