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

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. 由于 Web 服务器上的“ISAPI 和 CGI 限制”列表设置,无法提供您请求的页面

    详细错误:HTTP 错误 404.2 - Not Found. 由于 Web 服务器上的“ISAPI 和 CGI 限制”列表设置,无法提供您请求的页面. 出现环境:win7 + IIS7.0 解决办法 ...

  2. 关于git的简单实用命令

    时代在进步啊,现在已经不是svn的时代了,好多人都在使用git.所以自己也稍微学习了下git的使用. 常见的通过git提交代码步骤: git status :查看文件状态 :该命令显示你工程内修改的所 ...

  3. 【转】Spring mvc集成ZBUS--轻量级MQ、RPC、服务总线

    本文转自:http://www.cnblogs.com/top15from/p/4899954.html ZBUS = MQ + RPC + PROXY 支持消息队列, 发布订阅, RPC, 代理(T ...

  4. MySQL 5.7 学习:功能性能的提升

    背景: 继上次介绍 初识 MySQL 5.6 新功能.参数完之后,刚好MySQL 5.7又GA了,在官方测试里看到,MySQL5.7在功能.性能.可用性.安全和监控上又提升了很高.现在看看和MySQL ...

  5. nfs部署和优化

    nfs--网络文件系统 1.说明:允许一个系统在网络上与他人共享目录和文件 2.好处:通过nfs服务,就可以让这个机器访问远程的文件,像访问自己的文件一样,属于cs通信   3.原理说明:假设有A,B ...

  6. iOS/Android 浏览器(h5)及微信中唤起本地APP

    在移动互联网,链接是比较重要的传播媒质,但很多时候我们又希望用户能够回到APP中,这就要求APP可以通过浏览器或在微信中被方便地唤起. 这是一个既直观又很好的用户体验,但在实现过程中会遇到各种问题: ...

  7. Linux-iptables初识

    Linux-iptables初识 了解 iptables是与Linux内核集成的IP信息包过滤系统.如果Linux系统连接到因特网或LAN.服务器或连接LAN和因特网的代理服务器,则该系统有利于在Li ...

  8. 一张图说明CDN网络的原理

    原文: http://blog.csdn.net/coolmeme/article/details/9468743 1.用户向浏览器输入www.web.com这个域名,浏览器第一次发现本地没有dns缓 ...

  9. iOS //清除本地缓存

    //清除本地缓存 -(void)clearCache{ dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT ...

  10. c语言中在引用math库后,编译出现错误(.text+0x9c):对‘sqrt’未定义的引用的解决办法

    写于2016年11月29日晚. 原因是gcc编译器没有引用默认的math库,需要在执行编译命令时加上-ml.例如: gcc 源文件 -ml -o 编译后文件名 或者 gcc 源文件 -lm -o 编译 ...