上周的项目进展比较大,完成了几个重大的功能。这其中涉及到在Oracle中创建新表、序列、索引、触发器、包、存储过程、函数,当然了也在实战中学习了几个.Net的Dataset\Datatable的用法。一直想写,不过项目紧,真没空。这不今天有点时间,但是很多东西又没那么强烈的书写欲望了。
说说今天工作遇到的几个东东吧,第一个是Oracle中的包。不晓得为什么Oracle设计包,并且把存储过程和函数都写在不同的包里,而MSSQL虽然也都有存储过程和函数,但是基本上所有的C#程序调用都是对存储过程的操作。Oracle中的存储过程如果放在包内,C#程序使用“包名.存储过程(变量)”或者“包名.函数(变量)”的形式来访问。
对于创建或者修改包的语法我就不重复了,你可以搜索一下。不过有一点我需要分享给大家,在Function中,如果对变量赋值,写法可不一样。
MSSQL中一般写成
<br/>@BlockingReason nvarchar(50)<br/><br/>Select @BlockingReason = value from table where ...<br/>
而在Oracle中是Select value into variable from table where …,看下面的例子
<br/>BlockingReason varchar2(100);<br/>select trim(nvl(ipbp.t$brea,'')) into BlockingReason<br/> from baan.ttdipu010301 ipbp -- item - purchase BP data<br/> where upper(trim(ipbp.t$item)) = upper(sWAIPartNumber)<br/> and ipbp.t$otbp = upper(sBusinessPartnerCode)<br/> and rownum <=1 order by rownum;<br/>
第二个要分享的是3个很有用的Oracle函数:SUBSTR、DECODE、NVL
SUBSTR(Value,1,5) 取出从Value的第1位开始取5个字符长度
NVL(Value,’a’) 如果Value为Null返回a
DECODE比较复杂,如果你需要针对一个值做很多判断的时候,不用写case了。这个详细的介绍和用法,你搜索一下吧,我解释不清楚。
第三个要分享的,其实是C# .Net的一个Datatable绑定到Dropdownlist的代码,包括了选择值的默认选项
<br/>WAIonTracFailureModes oFailureModes = new WAIonTracFailureModes(_oWorkItem.ApplicationID);<br/><br/> DataTable dt = oFailureModes.List().Tables[0].Copy();<br/> DataRow[] drs = dt.Select("ParentID=0");<br/> foreach (DataRow r in drs)<br/> {<br/> //text,value<br/> WAIonTracFailureModeList.Items.Add(new ListItem(r["Name"].ToString(), r["FailureModeID"].ToString()));<br/> }<br/><br/> //WAIonTracFailureModeList.DataSource = oFailureModes.List();<br/> //WAIonTracFailureModeList.DataTextField = "Name";<br/> //WAIonTracFailureModeList.DataValueField = "FailureModeID";<br/> //WAIonTracFailureModeList.DataBind();<br/><br/> //DataRow[] drs2 = dt.Select("ParentID="+_oWorkItem.FailureModeID);<br/> DataTable dt2 = oFailureModes.List().Tables[0].Copy();<br/> DataRow[] drs2 = dt2.Select();<br/> //<br/> if (_oWorkItem.FailureModeID != null)<br/> {<br/> drs2 = dt2.Select("ParentID=" + _oWorkItem.FailureModeID);<br/> }<br/><br/> foreach (DataRow r2 in drs2)<br/> {<br/> //text,value<br/> WAIonTracDetailsOfFailureList.Items.Add(new ListItem(r2["Name"].ToString(), r2["FailureModeID"].ToString()));<br/> }<br/>
绑定默认/选择值的
<br/>WAIonTracFailureModeList.SelectedIndex = WAIonTracFailureModeList.Items.IndexOf(WAIonTracFailureModeList.Items.FindByValue(_oWorkItem.FailureModeID.ToString()));<br/> WAIonTracDetailsOfFailureList.SelectedIndex = WAIonTracDetailsOfFailureList.Items.IndexOf(WAIonTracDetailsOfFailureList.Items.FindByValue(_oWorkItem.DetailsOfFailureID.ToString()));<br/>
先写这么多吧,比较乱。另外,昨天买的《涂抹Oracle-三思笔记之一步一步学Oracle》已经到手,目前只知道如何用了,但是“为什么”还不知道,希望这本评价颇高的书能告诉我。