壹佰网|ERP100 - 企业信息化知识门户

 找回密码
 注册
楼主: YUGENPING

[财务] [分享知识 原创连载]一个EBS技术顾问在开发学习中遇到的问题连载,欢迎大家给我点评;

    [复制链接]
 楼主| 发表于 2013/8/14 09:26:43 | 显示全部楼层
本帖最后由 YUGENPING 于 2013/8/14 15:40 编辑

首先说声不好意思    这10来天都是在搭建EBS开发环境 今天要重装64位系统  所以更新一下

EBS安装介质下载   http://edelivery.oracle.com/

个人学习的下载安装并不产生费用,只有用于商业用途,才有可能要向Oracle缴费了,下载的都是正式版的

点评

昨晚下了两个64位系统 加起来7 8G的,一个坑爹的是32位系统 另外一个安装是出错 据百度上面解释 是文件已经损坏了。。。 真心伤不起  发表于 2013/8/14 11:56
oh ye  发表于 2013/8/14 09:27
 楼主| 发表于 2013/8/14 10:07:18 | 显示全部楼层
本来我最初是想在我的32位系统上安装EBS R12.1.1的  但是发现安装到了一定程度后   系统内存明显不够   卡机了  

没办法  今天重装64位系统了  

安装前 我买了一个750G的移动硬盘   保证硬盘的足够   其实安装系统250G的就够了

内存我插上了4G+1G (两个内存条) 但是32位系统只能读到2.5G  

嗯   建议4G内存   250G的硬盘空间  

我是在虚拟机中安装Linux  然后在Linux中安装EBS  所以也挺麻烦的   而且我是菜鸟一枚 (任务是经理下的 要求本菜鸟自己搭建EBS的开发环境 )

我首先下载的是VM box  ,安装过程可以参考如下文档 VM box安装.doc (1.02 MB, 下载次数: 3)

点评

加油  发表于 2013/8/14 10:31
 楼主| 发表于 2013/8/14 10:51:32 | 显示全部楼层
现在就可以进入Linux的安装了  我这一个礼拜安装过好几个版本的Redhat了  Oracle的Redhat、Redhat6、Redhat5了,安装过程大同小异吧
Linux Redhat 安装.doc (2.98 MB, 下载次数: 0)

点评

??干货??  发表于 2013/8/14 11:32
干货噢  发表于 2013/8/14 10:57
发表于 2013/8/14 11:01:27 | 显示全部楼层
在我安装的过程中,我试过Virtual Box,Red Hat,Virtual Box以前在大学的学习中,感觉很好用,而且似乎不是占用太多内存,所以我也想过用这个,但是后面的装Linux的时候,总是进行不去,所以就没用了,而Redt Hat也试过,但我总是发现,总是有些Package和EBS要求Package不符合,少了,然后自己手动补也似乎没有用,所后来直接用Oracle Linux了。

话说是Oracle Linux和Red Hat Linux一样,只是Oracle公司加些东西而已。我想可能在装Oracle数据库的时候相对容易些吧。


加油!

点评

那你最后安装成功的版本是什么 或者说组件是什么?  发表于 2013/8/14 11:30
 楼主| 发表于 2013/8/14 11:49:23 | 显示全部楼层
本帖最后由 YUGENPING 于 2013/8/14 12:03 编辑

安装到目前碰到的问题有:
RW20009:hosts配置出问题了  可以从第二次的图片中大概看出有没有问题吧

               

图片

图片

如果配置对的话  第二次的时候第一行和 第二行都不用输入的
   我当时的配置    test1.ebs.ygp.com test1    后面改了 改成   ebs.ygp.com  ebs  然后再次弄就好了  

为了防止出现RW-50015错误 需要在安装好Xorg......rpm和openmotif....rpm之后执行
  1. #unlink /usr/lib/libXtst.so.6
  2. #ln -s  /usr/X11R6/lib/libXtst.so.6.1  /usr/lib/libXtst.so.6
  3. 然后再次执行
  4. #ln -s /usr/lib/libgdbm.so.2.0.0
  5. /usr/lib/libdb.so.2
  6. #chmod 755   /usr/lib/libgdbm.so.2.0.0
  7. #chmod 755   /usr/lib/libdb.so.2
复制代码
还有最重要的一点  找到与自己最接近的文档一步步安装 不要左边的文档装一下 右边的文档装一下  那样 很耗时间  极有可能弄得四不像
在安装过程中可能会碰到Linux系统自带的unzip版本较高,出现RW-50004:Error code received when running external process..错误
就需要startCD中的unzip替换了
  1. #cd /usr/bin
  2. #mv unzip unzip.old
  3. #cd    (自己的文件夹)/startCD/Disk1/rapidwiz/unzip/linux_x6#cp unzip /usr/bin
  4. #cp  unzip  /usr/bin
复制代码

点评

努力 唉 也许把 都两个多礼拜了 又得重新弄 菜鸟就是伤不起  发表于 2013/8/15 16:10
楼主努力让人佩服;  发表于 2013/8/14 20:05
发表于 2013/8/14 17:16:13 | 显示全部楼层
davidma 发表于 2013/8/14 11:01
在我安装的过程中,我试过Virtual Box,Red Hat,Virtual Box以前在大学的学习中,感觉很好用,而且似乎不 ...

Oracle Enterprise Linux 5.5 (ole 5.5吧),我是听说这个版本装EBS R12容易些,之前我也试过别的版本的Linux,但是一直有问题,所以最才换成的这个版本的ole5.5,不过我我想只要原理懂了,在不同的版本上装也应该是一样的。只是我是装在USB上,而且我的笔记本配置过低,所以就没有那么容易操作,慢得要死,也没那么多的时间和精力耗着。

点评

努力  发表于 2013/8/14 20:05
 楼主| 发表于 2013/8/15 15:56:57 | 显示全部楼层
本帖最后由 YUGENPING 于 2013/8/15 16:04 编辑

昨天晚上重装好的Win7  64位系统,通宵下载好了EBS 64位的安装文件   

到公司后安装VMbox ,然后启动  遇到这种错误  

VT-x features locked or unavailable in MSR. (VERR_VMX_MSR_LOCKED_OR_DISABLED).

返回 代码:E_FAIL (0x80004005)
组件:Console
界面:IConsole {db7ab4ca-2a3f-4183-9243-c1208da92392}
出现这种问题的原因便是系统的CPU 默认是禁用 VT 的,手动开启后应该就可以了


怎么开启  进入bios中进入config 然后cpu   然后便是Inter  Virtual Technology使其为enable便可以了  然后关机  等待10分钟左右


再次进入系统 开启VMbox  便可以了


第二个问题便是VMbox的安装增前功能了  


点击设备->安装增强功能  系统便会自动加载光盘了


打开终端,root用户下
  1.    
  2. # mkdir vbox
  3. # cp -r /media/VBOXADDITIONS_4.1.20_80170/* vbox/
复制代码

上述命令成功执行后,虚拟机增强功能安装完成



点评

重现错误了 双击rpm包时提示 The name org.freedesktop.PackageKit was not provided by any .service file  发表于 2013/8/15 22:26
安装好之后 查找包的缺失与否 当在光盘中找到对应的RPM文件 不能安装 然后百度里面说是安装了两个桌面的缘故 有包冲突 本来想重现的 但是不知道怎么样重现错误了 从KDE切换到GNOME安装就好了。。  发表于 2013/8/15 22:20
代码   # mkdir vbox  # cp -r /media/VBOXADDITIONS_4.1.20_80170/* vbox/  # cd vbox  # chmod a+x VBoxLinuxAddi   发表于 2013/8/15 16:06
现在有些CPU不支持虚拟技术,这点确实让人O疼  发表于 2013/8/15 16:06
增强功能的代码 弄了好多次 没用 没办法      四、在终端窗口中依次执行如下命令(需要使用root用户): # mkdir vbox  # cp -r /media/VBOXADDITIONS_4   发表于 2013/8/15 16:05
发表于 2013/8/15 16:09:51 | 显示全部楼层
老师,问一下,为什么要用虚拟机呢?可以给讲讲吗?谢谢!

点评

对的 大部分人主机不是Linux系统 毕竟Linux系统用起来不怎么方便 所以都是在虚拟机上面安装Linux版本的ebs  发表于 2013/8/16 12:42
直接在本机上安装是一样的,只是有些人主机是windows,想安装Liunx版本的ebs,则可以用虚拟机安装,一是不用修改主机系统,二是放在移动硬盘里面携带方便  发表于 2013/8/16 11:22
打开什么??  发表于 2013/8/15 21:42
好像是用虚拟机可以直接用笔记本打开这个;还是请楼主来说吧;  发表于 2013/8/15 18:14
 楼主| 发表于 2013/8/16 10:40:01 | 显示全部楼层
本帖最后由 YUGENPING 于 2013/8/16 14:09 编辑

执行安装文件时候发生错误:Exception in thread "main" java.lang.UnsatisfiedLinkError: /tmp/RapidInstall/jre/Linux_x64/1.6.0/lib/i386/xawt/libmawt.so: libXtst.so.6: cannot open shared object file: Too many levels of symbolic links

这问题是设置出问题了 然后重新设置了ln -s那些

Too many levels of symbolic links 变成了No such file or directory

metalink上说明是缺少了libXp.so.6包,


根据Oracle的解决方案需要安装xorg-x11-deprecated-libs-6.8.2-1.EL.13.20.i386.rpm包


xorg-x11-deprecated-libs-6.8.2-31.i386.zip (35.92 KB, 下载次数: 0)

点评

其实 安装就应该找个与自己环境最接近的文档 参考着安装  发表于 2013/8/16 12:35
libXp必须的,如果数据库是11g,也许还需要UnixODBC等组件  发表于 2013/8/16 11:21
发表于 2013/8/18 14:04:14 | 显示全部楼层
   楼主 交友

点评

好啊  发表于 2013/8/18 17:40
 楼主| 发表于 2013/8/22 11:47:56 | 显示全部楼层
本帖最后由 YUGENPING 于 2013/8/22 16:29 编辑

白天继续学习PLSQL了,晚上继续搭建环境了,学的比较零散了
开发中碰到的小问题
1   需要让平均值保留几位小数点输出:select ... cast(AVG(列名) as  numeric(m,n)) from  ...  其中m是几位有效数字,n表示的是小数点后几位
2   加深SQL语句的执行顺序:
   SQL Select语句完整的执行顺序:
    1、from子句组装来自不同数据源的数据;
    2、where子句基于指定的条件对记录行进行筛选;
    3、group by子句将数据划分为多个分组;
    4、使用聚集函数进行计算;
    5、使用having子句筛选分组;
    6、计算所有的表达式;
    7、使用order by对结果集进行排序。
3 左/右连接
有时需要将进行连接的其中一个表作为基准显示全部的数据,根据连接条件在其它表中可能会出现无法匹配的数据,此时就用空值来代替。比如显示员工信息时,有的员工可能还没有分配到某个具体的部门(新进员工),其所属部门一项就没有数据,但是员工仍然需要显示,即员工表数据需要全部显示。
具体语法:select ... from table1 t1 left join table2 t2 on ti.id = t2.id; --左连接
            或 select ... from table1 t1 right join table2 t2 on ti.id = t2.id; --右连接
左还是右的区别,简单地说左(右)连接就是指join的左(右)边是基准表,全部数据都要显示,根据
连接条件无法进行连接的记录就用空值代替。比如: select e.empno, e.ename, d.dname from emp e left join dept d on e.deptno =d.deptno;
还没有分配到某个具体的部门的员工的e.deptno肯定是没有值的,无法满足“e.deptno = d.deptno”的条件,但由于是左连接,左边的员工表的数据必然会显示,这时该员工的部门名称就是空值。若是right join ... on,就表示部门表的数据全部显示,员工表中无法连接的数据就是空值代替,意思就是说这个部门还没有员工,因为在员工表中没有一条记录的deptno与该部门的deptno相匹配(可能是刚刚成立的新部门)
在Oracle中,对于左/右连接和全连接还有一种特殊的表示方法,使用“(+)”符号,
例如:select ... from table1 t1, table2 t2 where ti.id = t2.id(+); --左连接
select ... from table1 t1, table2 t2 where ti.id(+) = t2.id; --右连接

与SQL SERVER相比,Oracle没有Top n 这样简单方便取前几名的方法.
       但也有相对应的方法可以实现,使用的是Oracle中的伪列:rownum.

       最简单的方法如下:

一:最简单的问题:直接取前几名
        SELECT A.* from Company_Expense  A WHERE ROWNUM<=N
         (注意,在上句中我们没有指定按哪列进行排序,而具体rownum序号是依据哪一列,现在我都不确定。但可以明确一点的是,如果我们按主键进行排序,rownum号不会乱,但如果指定其它列的号,序号有可能会乱)        

二:麻烦一点的:取后几名
        上面方法的一点变通,首先在内部以某列进行排列,在外面取
        select V.* from
(
select rownum,A.* from company_expense A
order by a.expenseid desc
)V where rownum<3

三:变态一点的:取前几名,但值相同的记录为同一名次
        比如:对班级学生成绩进行排名,第一名:100,共2名,第二名,98,共5名........如此类推,取出排名前十名的所有学生。
        基本思路是:先使用Distinct取得成绩的前十名,并使用rownum排序.这样可以得出第十名的值,然后取所有成绩大于等于第十名的所有学生信息。
        记录得到后,然后再与刚使用Distinct取得成绩为前十名,且有rownum序号的表Join,以成绩为条件。就可以得到正常的排名次序。
         相关代码请参考如下脚本:

select rownum, T.Row_Num, v.*
  from (select A.Name,
               A.Employee_Code,
               v.STATUS,
               To_Char(v.JOIN_DATE, 'yyyy-mm-dd') Join_Date,
               V.Unit_Name,
               p.line_description Line_Num,
               sum(a.last_result) Sum_result
          from QM_QUALITY_LEVEL_JUDGE   A,
               hr_lbr_employee_tl_tbl_v v,
               Qm_Product_Line          P
         Where a.employee_code = v.EMPLOYEE_CODE
           And A.LINE_NUM = P.Line_Num
           And To_Char(A.Index_Date, 'yyyy-mm-dd') >= '2006-05-01'
           And To_Char(A.Index_Date, 'yyyy-mm-dd') <= '2006-07-24'
           And A.Last_Result > 0
         group by A.Name,
                  A.Employee_Code,
                  V.STATUS,
                  V.JOIN_DATE,
                  V.Unit_Name,
                  A.Line_Num,
                  P.LINE_DESCRIPTION
         order by Sum_Result desc, employee_code desc) v   ---基本的信息
  left join (select rownum row_Num, v.*
               from (select distinct sum(a.last_result) Sum_result
                       from QM_QUALITY_LEVEL_JUDGE   A,
                            hr_lbr_employee_tl_tbl_v v,
                            Qm_Product_Line          P
                      Where a.employee_code = v.EMPLOYEE_CODE
                        And A.LINE_NUM = P.Line_Num
                        And To_Char(A.Index_Date, 'yyyy-mm-dd') >=
                            '2006-05-01'
                        And To_Char(A.Index_Date, 'yyyy-mm-dd') <=
                            '2006-07-24'
                        And A.Last_Result > 0
                      group by A.Name,
                               A.Employee_Code,
                               V.STATUS,
                               V.JOIN_DATE,
                               V.Unit_Name,
                               A.Line_Num,
                               P.LINE_DESCRIPTION
                      Order by Sum_Result Desc) v
              Where rownum <= 10) T On v.Sum_Result = T.Sum_Result  --得到正确的排名序号
              
-----以下条件是取得所有大于第十名成绩的记录              
where V.sum_Result >=
       (select min(Sum_Result) Sum_Result
          from (select rownum row_Num, v.*
                  from (select distinct sum(a.last_result) Sum_result
                          from QM_QUALITY_LEVEL_JUDGE   A,
                               hr_lbr_employee_tl_tbl_v v,
                               Qm_Product_Line          P
                         Where a.employee_code = v.EMPLOYEE_CODE
                           And A.LINE_NUM = P.Line_Num
                           And To_Char(A.Index_Date, 'yyyy-mm-dd') >=
                               '2006-05-01'
                           And To_Char(A.Index_Date, 'yyyy-mm-dd') <=
                               '2006-07-24'
                           And A.Last_Result > 0
                         group by A.Name,
                                  A.Employee_Code,
                                  V.STATUS,
                                  V.JOIN_DATE,
                                  V.Unit_Name,
                                  A.Line_Num,
                                  P.LINE_DESCRIPTION
                         Order By Sum_Result Desc) v
                 Where rownum <= 10))


 楼主| 发表于 2013/8/23 14:46:16 | 显示全部楼层
本帖最后由 YUGENPING 于 2013/8/23 16:43 编辑

IS NULL 判断是否为空,为空并不等价于空字符或者数字0,而=NULL则是判断某个值是否等于NULL

NULL=NULL和NULL<>NULL均为FALSE

当我们想输出¥或者$
to_char('数字','L99,999.99')
to_char('数字','$99,999.99')
L:表示强制显示当地货币符号
$: 表示显示美元符号
9: 表示一个数字
0: 表示强制0显示
.: 表示一个小数点
,: 表示一个千位分隔符

经典Oracle SQL查询练习.pdf (1.06 MB, 下载次数: 11)
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2013/8/23 17:12:16 | 显示全部楼层
sql查询重复记录、删除重复记录方法大全

一。查找重复记录

1。查找全部重复记录

Select * From 表 Where 重复字段 In (Select 重复字段 From 表 Group By 重复字段 Having Count(*)>1)

2。过滤重复记录(只显示一条)

Select * From HZT Where ID In (Select Max(ID) From HZT Group By Title)

注:此处显示ID最大一条记录

二。删除重复记录


1。删除全部重复记录(慎用)

Delete 表 Where 重复字段 In (Select 重复字段 From 表 Group By 重复字段 Having Count(*)>1)

2。保留一条(这个应该是大多数人所需要的 ^_^)

Delete HZT Where ID Not In (Select Max(ID) From HZT Group By Title)

注:此处保留ID最大一条记录

1、查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断

select * from people

where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1)



2、删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留有rowid最小的记录

delete from people

where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1)

and rowid not in (select min(rowid) from people group by peopleId having count(peopleId )>1)



3、查找表中多余的重复记录(多个字段)

select * from vitae a

where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)



4、删除表中多余的重复记录(多个字段),只留有rowid最小的记录

delete from vitae a

where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)

and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)



5、查找表中多余的重复记录(多个字段),不包含rowid最小的记录

select * from vitae a

where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)

and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)


补充:

有两个以上的重复记录,一是完全重复的记录,也即所有字段均重复的记录,二是部分关键字段重复的记录,比如Name字段重复,而其他字段不一定重复或都重复可以忽略。


1、对于第一种重复,比较容易解决,使用

select distinct * from tableName


就可以得到无重复记录的结果集。



如果该表需要删除重复的记录(重复记录保留1条),可以按以下方法删除

select distinct * into #Tmp from tableName
drop table tableName
select * into tableName from #Tmp
drop table #Tmp
发生这种重复的原因是表设计不周产生的,增加唯一索引列即可解决。


2、这类重复问题通常要求保留重复记录中的第一条记录,操作方法如下

假设有重复的字段为Name,Address,要求得到这两个字段唯一的结果集

select identity(int,1,1) as autoID, * into #Tmp from tableName

select min(autoID) as autoID into #Tmp2 from #Tmp group by Name,autoID

select * from #Tmp where autoID in(select autoID from #tmp2)

评分

参与人数 1努力值 +5 收起 理由
Doraemon + 5 很给力!

查看全部评分

发表于 2013/8/23 18:10:27 | 显示全部楼层
好好学习,天天向上!!
发表于 2013/8/26 16:00:25 | 显示全部楼层
感谢楼主的分享,持续关注。
发表于 2013/8/28 16:24:21 | 显示全部楼层
感谢楼主的分享,学到不少东西。
发表于 2013/8/30 00:49:41 | 显示全部楼层
强烈跟贴中 。。。。关注关注

点评

得进项目组才能更有学习的劲头  发表于 2013/8/30 16:25
 楼主| 发表于 2013/8/30 16:33:34 | 显示全部楼层
本帖最后由 YUGENPING 于 2013/8/30 16:57 编辑

经常用到 的 OracleEBS中文数据字典

OracleEBS中文数据字典.doc

661.98 KB, 下载次数: 1, 下载积分: 努力值 -5 点

OracleEBS中文数据字典

 楼主| 发表于 2013/9/9 14:11:11 | 显示全部楼层
本帖最后由 YUGENPING 于 2013/9/9 14:13 编辑

看了几个项目的文档之后   发现报表开发的时候    大部分是'模块化开发'   把所需要的数据放到一张临时表中  也就是把所需要的数据作为临时表的属性  而且项目需要开发的报表其实大同小异    比如三大报表利润表  资产负债表 现金流量表  等等 只是每个甲方的机构名称  部门名称不同  但是报表的逻辑是一样的   
发表于 2013/9/17 09:22:50 | 显示全部楼层
本人也开始学,受教了,一起加油吧~~~~~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|壹佰网 ERP100 ( 京ICP备12025635号 京ICP证120590号 )  

Copyright © 2005-2012 北京海之大网络技术有限责任公司 服务器托管由互联互通
手机:13911575376
网站技术点击发送消息给对方83569622   广告&合作 点击发送消息给对方27675401   点击发送消息给对方634043306   咨询及人才点击发送消息给对方138011526

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表