存储过程定义,举个例子如下:

create or replace procedure test_person(id in Number,
Ename In Varchar2,
age In Varchar2,
TCS out mytype) Is --TCS为输出游标 IS 为关键字
V_ename VARCHAR2(30); --临时参数
v_age NUMBER;--临时参数
V_Sql Varchar2(4000);
tcs1 mytype;
begin
V_Sql:='';--自定义sql语句
Open tcs1 for V_Sql;
LOOP
FETCH tcs1
INTO
V_ename ,
v_age ;
EXIT WHEN tcs1%NOTFOUND;--当数据读完后 退出 不再执行后面的操作
/***
这部分区域可以继续写要操作的sql
*/
END LOOP;
CLOSE tcs1;
Commit;
Open tcs for '这里写查询sql,也可以像上面那样定个临时参数';
exception
when others then
rollback;
--可以在这自定义错误信息写到自定义表
end;

2.循环数据源 进行后续操作比如插入,修改

create or replace procedure tt1 is
begin for H in (这里写select语句) loop
insert into iiuser.LSAPRWMS
(列名)
values
(H.列名 );
end loop;
COMMIT;
exception
when others then
rollback;
end tt1;

for loop 循环示例

3.查询界面数据,采用全展示或分页方式显示数据,返回查询结果集,总页数和总记录条数,示例如下:

/************************************************
获取mo_po板块的防拆线任务
***********************************************/
create or replace procedure spGetMoTaskInfo(p_CONDITION in varchar2,
p_type in varchar2,
p_cur_page in number,
p_page_size in number,
x_tot_rec out number,
x_tot_page out number,
X_TCS out SYS_REFCURSOR) is
v_Sql varchar2();
v_Sql1 varchar2();
v_total_rec number;
v_total_page number;
begin
v_Sql1 := '
SELECT pz.mo,v.wip_entity_qty,
case nvl(aa.c_count,) when then ''待粘贴'' else ''已粘贴'' end as status,
v.wip_assembly_item,o.oqc_content,
o.oqc_fdate,ea.line_code,ws.plant_name FROM po_report_info_zj pz
left join po_report_info_oqc o on o.mo = pz.mo
LEFT JOIN vw_order_info v on v.wip_entity_name = pz.mo
left join Wip_Entity_allInfo_v ea on ea.wip_entity_name = pz.mo
left join Wip_Plants ws on ws.plant_id = ea.plant_id
left join (
SELECT po.mo,po.attribute1,nvl(count(),) as c_count FROM po_report_info_oqc po where po.attribute1 <> '' ''
and po.assort =
group by po.mo,po.attribute1
) aa on aa.mo = pz.mo and aa.attribute1 = o.mid
where pz.tamper= ''有'' and o.assort = '; v_Sql := v_Sql1 || p_CONDITION; if upper(p_type) = 'NON_PAGE' THEN
open X_TCS for v_Sql;
else
begin PAGING_TOOL.sql_paging(v_Sql, p_cur_page, p_page_size, v_total_rec,
v_total_page, x_TCS);
--返回总页数,总记录
x_tot_rec := v_total_rec; --数据条数
x_tot_page := v_total_page;--总页数
end;
end if;
Dbms_Output.put_line(v_Sql);
exception
when others then
raise;
end;

查询调用的存储过程

-------------先创建包体 和过程名 参数
create or replace package PAGING_TOOL is
type mycur is ref cursor;
/**********************************/
/* 分页存储过程 */
/*传入SQL语句,返回结果集总记录数 */
/*以及一页记录 */
/**********************************/
procedure sql_paging(P_SQL VARCHAR2,
P_CURRENT_PAGE NUMBER,
P_PAGE_SIZE NUMBER,
P_TOTAL_REC IN OUT NUMBER,
P_TOTAL_PAGE IN OUT NUMBER,
TCS OUT mycur);
end;
-----------------详细的分页存储过程
create or replace package body PAGING_TOOL is
procedure sql_paging(P_SQL VARCHAR2,
P_CURRENT_PAGE NUMBER,
P_PAGE_SIZE NUMBER,
P_TOTAL_REC IN OUT NUMBER,
P_TOTAL_PAGE IN OUT NUMBER,
TCS OUT mycur) is
P_SQL_FINAL VARCHAR2();
P_ROWNUM_1 NUMBER;
P_ROWNUM_2 NUMBER;
P_MOD NUMBER;
begin
--当首次执行查询时,计算总共有多少条记录
IF P_TOTAL_PAGE IS NULL THEN
BEGIN
P_SQL_FINAL := 'SELECT COUNT(ROWNUM) FROM (';
P_SQL_FINAL := P_SQL_FINAL || P_SQL || ')';
execute immediate P_SQL_FINAL
INTO P_TOTAL_PAGE;
P_TOTAL_REC := P_TOTAL_PAGE;
--计算总页数;
P_MOD := P_TOTAL_PAGE MOD P_PAGE_SIZE;
P_TOTAL_PAGE := TRUNC(P_TOTAL_PAGE / P_PAGE_SIZE);
IF P_MOD > THEN
P_TOTAL_PAGE := P_TOTAL_PAGE + ;
END IF;
END;
END IF;
--当没有符合条件的结果返回时;
IF P_TOTAL_PAGE IS NOT NULL AND P_PAGE_SIZE IS NOT NULL AND
P_CURRENT_PAGE IS NOT NULL THEN
BEGIN
P_ROWNUM_1 := NVL(P_PAGE_SIZE, ) * NVL(P_CURRENT_PAGE, ) -
NVL(P_PAGE_SIZE, );
P_ROWNUM_2 := NVL(P_ROWNUM_1, ) + NVL(P_PAGE_SIZE, ) + ;
P_SQL_FINAL := 'select bb.* ';
P_SQL_FINAL := P_SQL_FINAL || ' from (select rownum row_id, aa.* ';
P_SQL_FINAL := P_SQL_FINAL || ' from (' || P_SQL || ') aa ';
P_SQL_FINAL := P_SQL_FINAL || ' where rownum < ' || P_ROWNUM_2 ||
') bb ';
P_SQL_FINAL := P_SQL_FINAL || ' where bb.row_id > ' || P_ROWNUM_1;
open TCS for P_SQL_FINAL;
END;
END IF;
end;
end;

oracle调用的分页存储过程

private void GetData(int pageIndex)
{
ArrayList arr_list = new ArrayList();
arr_list.Add(getCondition());
arr_list.Add("page");
arr_list.Add(pageIndex);
arr_list.Add(DataGrid_Task.PageSize);
arr_list.Add();
arr_list.Add();
Ptm.WipBaseInfoManage baseManager = new Ptm.WipBaseInfoManage();
DataView dv = baseManager.GetMoPoReportTaskList(arr_list);
this.DataGrid_Task.DataSource = dv.Table;
this.DataGrid_Task.DataBind();
}
//对应的方法实现 public DataView GetMoPoReportTaskList(ArrayList arry)
{ OracleCommand cmd = new OracleCommand();
OracleConnection conn = new OracleConnection(strConn);
cmd.Connection = conn;
cmd.CommandText = "spGetMoTaskInfo";
cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.Add("p_CONDITION",OracleType.VarChar,);
cmd.Parameters.Add("p_type", OracleType.VarChar, );
cmd.Parameters.Add("p_cur_page", OracleType.Number);
cmd.Parameters.Add("p_page_size", OracleType.Number);
cmd.Parameters.Add("x_tot_rec", OracleType.Number);
cmd.Parameters.Add("x_tot_page", OracleType.Number);
cmd.Parameters.Add("X_TCS", OracleType.Cursor);
cmd.Parameters["x_tot_rec"].Direction = ParameterDirection.Output;
cmd.Parameters["x_tot_page"].Direction = ParameterDirection.Output;
cmd.Parameters["X_TCS"].Direction = ParameterDirection.Output; cmd.Parameters["p_CONDITION"].Value = arry[];
cmd.Parameters["p_type"].Value = arry[];
cmd.Parameters["p_cur_page"].Value = arry[];
cmd.Parameters["p_page_size"].Value = arry[]; try
{
conn.Open();
OracleDataAdapter da = new OracleDataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds);
arry[] = cmd.Parameters["x_tot_rec"].Value.ToString();
arry[] = cmd.Parameters["x_tot_page"].Value.ToString();
da.Dispose();
return ds.Tables[].DefaultView; }
catch (Exception ex)
{
throw new Exception(ex.Message); }
finally
{ cmd.Dispose();
conn.Close();
} }

c#web界面调用相关代码

4.merge into 用法

可以用来两个表之间的关联数据更新 ,或同一个表的insert/update ,下面摘抄的两段代码如下:

merge into users
using doctor
on (users.user_id = doctor.doctorid)
when matched then
update set users.user_name = doctor.doctorname
when not matched then
insert
values
(doctor.doctorid,
doctor.doctorid,
'8736F1C243E3B14941A59FF736E1B5A8',
doctor.doctorname,
sysdate,
'T',
' ',
doctor.deptid,
'b319dac7-2c5c-496a-bc36-7f3e1cc066b8');

一、两个表之间的关联数据更新

SQL SERVER 写法
if exists(select from T where T.a='' )
update T set T.b= Where T.a=''
else
insert into T(a,b) values('',);
对的oracel 写法
MERGE INTO T T1
USING (SELECT '' AS a, AS b FROM dual) T2
ON ( T1.a=T2.a)
WHEN MATCHED THEN
UPDATE SET T1.b = T2.b
WHEN NOT MATCHED THEN
INSERT (a,b) VALUES(T2.a,T2.b);

同一个表数据的操作

5.function 函数,如下所示:

function 函数名称(参数名称 参数类型) return 参数类型 is
--定义返回类型
V_RESULT varchar2(); --自定义的参数
begin
/*
sql语句
*/
return V_RESULT; --返回值
end GetInventoryType;

oracle数据库使用三个月的总结的更多相关文章

  1. Oracle数据库版本号定期检视与升级的必要性分析

    目 录 ▇1.ORACLE数据库版本号知识 ▇2.看看自己的数据库还有没有支持服务 ▇3.看11.2.0.3版本号各PSU的公布时间与解决BUG数量列表 ▇4.看11.2.0.4版本号各PSU的公布时 ...

  2. Oracle数据库之六 单行函数

    六.单行函数 6.1.认识单行函数 ​ 函数就是和 Java 语言之中的方法的功能是一样的,都是为了完成某些特定操作的功能支持,而在 Oracle 数据库里面也包含了大量的单行函数,这些函数掌握了以后 ...

  3. Oracle数据库之第一篇

    1 : Oracle 简介 : 是美国ORACLE公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器IP,端口,用户名.密码,点击:连接 (CLIENT/SERVER) ...

  4. Oracle数据库 —— DML完结

    时间:2016-8-18 01:17 ----------------------------------------------------------------------------停下休息的 ...

  5. 使用Zabbix监控Oracle数据库

    Orabbix介绍 监控Oracle数据库我们需要安装第三方提供的Zabbix插件,我们先测试比较有名的Orabbix,http://www.smartmarmot.com/product/orabb ...

  6. Oracle 数据库知识汇总篇

    Oracle 数据库知识汇总篇(更新中..) 1.安装部署篇 2.管理维护篇 3.数据迁移篇 4.故障处理篇 5.性能调优篇 6.SQL PL/SQL篇 7.考试认证篇 8.原理体系篇 9.架构设计篇 ...

  7. Oracle数据库该如何着手优化一个SQL

    这是个终极问题,因为优化本身的复杂性实在是难以总结的,很多时候优化的方法并不是用到了什么高深莫测的技术,而只是一个思想意识层面的差异,而这些都很可能连带导致性能表现上的巨大差异. 所以有时候我们应该先 ...

  8. Oracle 数据库语句大全

    Oracle数据库语句大全 ORACLE支持五种类型的完整性约束 NOT NULL (非空)--防止NULL值进入指定的列,在单列基础上定义,默认情况下,ORACLE允许在任何列中有NULL值. CH ...

  9. Oracle数据库升级(10.2.0.4->11.2.0.4)

    环境: RHEL5.4 + Oracle 10.2.0.4 目的: 在本机将数据库升级到11.2.0.4 之前总结的Oracle数据库异机升级:http://www.cnblogs.com/jyzha ...

随机推荐

  1. 十二. 一步步破解JEB 2.0demo版二

    编写脚本批量还愿JEB 加密字符串 解密完后效果如下: 脚本源码: https://github.com/bingghost/JebPlugins 思路: 下面的该封装的基本都封装了,过程如下: 1. ...

  2. core dump 是什么意思?

    core dump,翻译过来讲,就是核心转储.大致上就是指,如果由于应用错误,如浮点异常.指令异常等,操作系统将会转入内核的异常处理,向对应的进程发送特定的信号(SIGNAL),如果进程中没有对这些信 ...

  3. Power of Three

    Given an integer, write a function to determine if it is a power of three. Follow up:Could you do it ...

  4. JS date常用代码积累

    Date.prototype.Format = function(fmt) { var o = { "M+" : this.getMonth()+1, //月份 "d+& ...

  5. [Linux]系统调用理解(2)

    本文介绍了Linux下的进程概念,并着重讲解了与Linux进程管理相关的4个重要系统调用getpid,fork,exit和_exit,辅助一些例程说明了它们的特点和使用方法. 关于进程的一些必要知识 ...

  6. 解决SprngMVC中ResponseBody注解中文乱码

    配置文件前面加入如下结构,版本号3.2.5 <bean class="org.springframework.web.servlet.mvc.method.annotation.Req ...

  7. php上传图片文件常用的几个方法

    1. 前台 <form class="add-form" method="post" action="/person/save" en ...

  8. 浅谈Javascript事件模拟

    事件是用来描述网页中某一特定有趣时刻的,众所周知事件通常是在由用户和浏览器进行交互时触发,其实不然,通过Javascript可以在任何时间触发特定的事件,并且这些事件与浏览器创建的事件是相同的.这就意 ...

  9. 移动端横屏(beta)

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. ios 模拟器内部网络连接问题

    今日,一运行程序,打印出来头疼的的日志 "Error Domain=kCFErrorDomainCFNetwork Code=-1001 "The request timed ou ...