颠覆软件

关注 : 架构与设计,敏捷,快速开发,项目管理,执行力,SSH,RoR

Archive for the ‘Oracle’ Category

dbconsole启动失败

March 6, 2008

1.机器的ip经常改变,到公司一个ip,到客户那一个ip,到家又是一个ip,不知怎么搞的,今天到家oracle的dbconsole就启动不了了.

2.用命令行的方式启动 emctl.bat start dbconsole,结果还提示ORACLE_SID 还没有设置,晕,这个怎么没有了,set 一个吧 set ORACLE_SID=dggmcc (我的数据库实例)

3.还是有错,提示找不到192.168.0.52.这个地址,应该是ip和当初装数据库的时候IP不一样的缘故,将hosts设置一下 192.168.0.52 IDEA

4.OK

VN:F [1.6.3_896]
Rating: 0.0/10 (0 votes cast)
VN:F [1.6.3_896]
Rating: 0 (from 0 votes)

[转帖]协同软件市场概要[怎么忽略了oracle?]

February 23, 2008
协同软件市场,暗流涌动
据IDC、Gartner等权威分析机构的统计,早在2001年美国协同软件市场份额已经达到3%-5%,与ERP、CRM等管理软件的缓慢增长相反, 协同软件的年增长率高达15%。有分析机构预测,2008年协同软件的市场规模将会达到19.26亿美元。由于协同软件涉及到通讯、内容管理、信息安全等 方面的技术与标准,也涉及管理应用的本地化的问题,这对中国的软件业来讲,将是一次发展的机会,也将面临巨大的挑战。>>全文
协同软件
协同软件(Collaboration Software )是一种“互相配合”的软件,主要作用是为了辅助多人、多组织共同完成管理事务,协同参与者是多个人员与群组和多个应用系统。工作流管理WFM是协同软件 的主要功能核心,协同软件在文档、行政、人事、项目、客户、财务、物流、生产等管理方面有广泛应用,协同OA、协同政务、协同商务是其主要综合应用方案。>>全文
●挑战与机遇并存 协同OA创新路在何方?
●信息化建设进一步深入 协同软件春天逼近
●协同软件即将步入联动天下时代
●厚积薄发的第三股协同OA力量
●协同理念为OA重新诠释应用价值
●协同软件应用成本具有多面性
●协同的灵魂:知识管理
●协同管理是一把手运动
●全球协同商务发展现状及趋势
●2007协同综述:协同产业平稳发展
●协同软件的技术发展
●协同软件迷失热捧与冷嘲间
●沉默过后,协同产业才能迎来下一轮的爆发
●“大小通吃” 2007协同软件风生水起
●2007四大趋势引爆协同产业
●2006协同OA市场发展综述
●应用分析:从SOA技术看协同软件应用的未来
●深刻理解SOA与协同的关系
●CIO看”协同”
●提出SOA等新需求 协同软件概念赋予新含义
●SOA与协同:关系究竟多暧昧?
●协同办公爱上Web 2.0
协同软件厂商
协同软件兴起于三四年前,之后便快速发展,到现在市场上号称做协同的软件厂商已经超过500家。整个协同市场因为用户需求的增加而使得各相关厂商蜂拥而至——原来做OA的、做ERP的、做互联网的厂商都开始了在协同这个大平原上竞争和角力。 正因为协同厂商发力点的不同,使得用户协同的切入点不同—从OA起步会有更广阔的办公自动化空间,从业务出身能将生产、采购、营销的步调一致,互联网则预示着电子商务有望初具规模。 无论用户的选择是什么,企业管理和业务的协同,才是殊途同归。
●三问协同软件厂商 追踪寻源求根本
●典型协同软件厂商盘点
●分久必合 协同领导厂商加速发展
●厂商说”协同” 协同齐放迷人眼
●IBM、微软的协同与办公产品
●阿里巴巴吹响“集结号” 协同OA市场变脸
●协同走向成熟 点击、用友联手创新市场应用
●用友致远A8:开创协同应用新标准
IBM Lotus
在25年的时间里,Lotus定义了一个实现人员互连的软件行业。所有Lotus产品之间、与基于开放标准的软件之间以及与Microsoft产品之间都可很好地协同使用。它们可用于多种客户端和服务器操作系统。 Lotus产品始终致力于推动创新与合作。IBM的协作产品,包括Lotus Notes、WebSphere Portal Lotus Sametime以及新产品Lotus Quickr和
Lotus Connections可配套使用,提供业务流程环境中的协作。 IBM Lotus继续提供业界最丰富的企业通信和协作工具系列,并通过将协作技术扩展到社会计算等新领域,推动该系列的进一步发展。IBM Lotus的协作服务旨在具备灵活性,包括可在多种环境中组合使用的通信、协作和沟通工具。从电子邮件/日历环境到门户、实时协作和移动服务,
IBM Lotus协作服务涵盖多个层面和视角,为广泛的最终用户工作方式提供服务,最大限度提高最终用户的效率。
●追溯IBM Lotus家族发展轨迹
●Lotus公司的知识管理解决方案
●IBM Lotus 倡导知识管理“随需应变”
●知识管理 Lotus解决方案
●Web2.0的企业级应用IBM Lotus ND8
●IBM Lotus对知识管理的理解
●IBM Lotus 提供快速协作解决方案
●IBM Lotus提供在家办公快速协作解决方案
VN:F [1.6.3_896]
Rating: 0.0/10 (0 votes cast)
VN:F [1.6.3_896]
Rating: 0 (from 0 votes)

用DBMS_JOB调度存储过程

December 12, 2007
  1. variable remove_queue_job number
  2.  
  3. begin
  4.  
  5. //每隔一分钟调度一次
  6.  
  7. dbms_job.submit(:remove_queue_job,'mypackage.myprocedure;',sysdate,'sysdate+1/1440');
  8.  
  9. end;
  10. /
  11.  
  12. begin
  13. dbms_job.run(:remove_queue_job);
  14. end;
  15. /
  16. //看看当前有哪些job在跑
  17.  
  18. select job, priv_user, what from user_jobs
  19. select job, priv_user, what from dba_jobs;
  20.  
  21. //删除不再需要的job
  22.  
  23. exec dbms_job.remove(job_id)
VN:F [1.6.3_896]
Rating: 0.0/10 (0 votes cast)
VN:F [1.6.3_896]
Rating: 0 (from 0 votes)

ocs(oracle协作套件)常用命令

October 31, 2007

1.oracle structure:db – > AS – > apps

2.start infrastructure

#su – oracle

. oraenv

[sid] : ocsdb

ocsctl_sample –start infra

2. start apps

# su – oracle
# export ORACLE_HOME=/home/oracle/ocs/apps
# $ORACLE_HOME/bin/ocsctl_sample –start apps

(here you can set var to your .bash profile)

./opmnctl startproc gid=OC4J_Portal
./opmnctl startproc gid=OC4J_Portal

3. start single component

# ./opmnctl startproc gid=OC4J_Portal

4.the RTC components:

  • OC4J_imeeting
  • rtcpm

5.the portal components:

  •  OC4J_OCSClient
  • OC4J_Portal

note difference with iLearning:

1.db startup

sql>startup

2.start app

opmnctl startall

3.web console

emctl start iasconsole

(emctl start dbconsole command to start oracle db console)

oc4j and deployment

dcmctl createcomponent -ct oc4j -co oc4j_name

dcmctl deployapplication -co oc4j_name -f  webs.war -a  app_name -rc /rc_name

VN:F [1.6.3_896]
Rating: 0.0/10 (0 votes cast)
VN:F [1.6.3_896]
Rating: 0 (from 0 votes)

Oracle最简单的备份方式

October 29, 2007

oracle_logo.jpg可以用命令的方式来备份,先全量备份,后增量备份,这个是专业的方式,还有一种方式我称它为土八路的方式,但是好使

就是直接把oradata目录的文件拷贝出来即可,下次重新安装oracle后 把oradata目录覆盖即可。

当然,如果你愿意,也可以把所有oracle的目录拷贝下来 :)

简单就好 :)

VN:F [1.6.3_896]
Rating: 0.0/10 (0 votes cast)
VN:F [1.6.3_896]
Rating: 0 (from 0 votes)

oracle utl_file_dir

September 27, 2007

key words: invalid file operation,utl_file_dir

how to set utl_file_dir in oracle?

my db is Oracle10g,and the default boot method is spfile

1. sql> alter system set utl_file_dir=’c:\tmp’ scope=spfile

2.sql>shutdown immediate

3.sql>start

This time I change the mydbspfile.ora directly,but made mistake,late resolved it by

“create spfile from pfile”

reference here

VN:F [1.6.3_896]
Rating: 0.0/10 (0 votes cast)
VN:F [1.6.3_896]
Rating: 0 (from 0 votes)

[zt]decode使用技巧

August 23, 2007

 key words: decode,分组

使用 decode可以实现将多个不同的行级别的记录转换到列,有时很有用

come from here

表、视图结构转化
现有一个商品销售表sale,表结构为:
month    char(6)      –月份
sell    number(10,2)   –月销售金额

现有数据为:
200001  1000
200002  1100
200003  1200
200004  1300
200005  1400
200006  1500
200007  1600
200101  1100
200202  1200
200301  1300

想要转化为以下结构的数据:
year   char(4)      –年份
month1  number(10,2)   –1月销售金额
month2  number(10,2)   –2月销售金额
month3  number(10,2)   –3月销售金额
month4  number(10,2)   –4月销售金额
month5  number(10,2)   –5月销售金额
month6  number(10,2)   –6月销售金额
month7  number(10,2)   –7月销售金额
month8  number(10,2)   –8月销售金额
month9  number(10,2)   –9月销售金额
month10  number(10,2)   –10月销售金额
month11  number(10,2)   –11月销售金额
month12  number(10,2)   –12月销售金额

结构转化的sql语句为:
create or replace view
v_sale(year,month1,month2,month3,month4,month5,month6,month7,month8,month9,month10,month11,month12)
as
select
substrb(month,1,4),
sum(decode(substrb(month,5,2),01,sell,0)),
sum(decode(substrb(month,5,2),02,sell,0)),
sum(decode(substrb(month,5,2),03,sell,0)),
sum(decode(substrb(month,5,2),04,sell,0)),
sum(decode(substrb(month,5,2),05,sell,0)),
sum(decode(substrb(month,5,2),06,sell,0)),
sum(decode(substrb(month,5,2),07,sell,0)),
sum(decode(substrb(month,5,2),08,sell,0)),
sum(decode(substrb(month,5,2),09,sell,0)),
sum(decode(substrb(month,5,2),10,sell,0)),
sum(decode(substrb(month,5,2),11,sell,0)),
sum(decode(substrb(month,5,2),12,sell,0))
from sale
group by substrb(month,1,4);

VN:F [1.6.3_896]
Rating: 6.0/10 (1 vote cast)
VN:F [1.6.3_896]
Rating: 0 (from 0 votes)

利用其他表的数据update当前表

August 19, 2007

key words: update,ORA-01779

经常用到update语句,不过很少用到其他表的数据来更新当前表,这次用到了,总结一下

UPDATE
( SELECT /*+ BYPASS_UJVC */
a.groupname a1,b.groupname b1 from t_account_temp a,t_certificode_temp b
where a.certificode = b.certificode
)
SET a1=b1;

特别的地方是要加  /*+ BYPASS_UJVC */,让oracle不检查健的约束,否则会报ORA-01779错误,不过前提是你确认确实不会有多个b表的值出现,或者即使有多个值也没有影响。

相关参考如下

一种高效率的update多表关联更新测试

ORA-01779的处理方法

VN:F [1.6.3_896]
Rating: 0.0/10 (0 votes cast)
VN:F [1.6.3_896]
Rating: 0 (from 0 votes)

从数据库导出大数据量的文件的解决方案

August 18, 2007

key words: plsql,导出数据,大数据量

最近的账务的项目中需要导出Excel报表,数据量比较大,解决方案如下 :

1.通过plsql在服务器端查询出符合要求的纪录,然后直接写到文本文件中

2.在web端通过流的方式读文本文件,通过POI写到Excel,将生成的Excel流写到respoonse实现下载

这样做的好处是不必一次性将满足条件的纪录全部取出来,而是通过流的方式.

这个方式原来在处理Blob类型的字段时有直接的getStream来支持的,这次普通的数据只好通过文件的方式来实现.

贴一段sample的代码


create or replace procedure alex_table_to_txt(filepath varchar2,filename varchar2) is
--var
v1 alex2.name%type;
v2 alex2.address%type;
v3 alex2.groupname%type;

output varchar2(200);

–file var
file_handle UTL_FILE.FILE_TYPE;

cursor readtable is select t.name,t.address,t.groupname from alex2 t;
begin
file_handle:=utl_file.fopen(filepath,filename,’w',6000);
open readtable;

loop
fetch readtable into v1,v2,v3;
exit when readtable%notfound;
output:=v1 || ‘,’ || v2 || ‘,’ || v3 ;
utl_file.put_line(file_handle,output);

end loop;

close readtable;
utl_file.fclose(file_handle);
end alex_table_to_txt;
/

欢迎讨论你的方案

VN:F [1.6.3_896]
Rating: 0.0/10 (0 votes cast)
VN:F [1.6.3_896]
Rating: 0 (from 0 votes)

[zt]PL/SQL开发中动态SQL的使用方法

August 14, 2007

key words : 动态SQL

2005-07-06 13:46 作者: DINYA 出处: BLOG 责任编辑:方舟

  内容摘要:在PL/SQL开发过程中,使用SQL,PL/SQL可以实现大部份的需求,但是在某些特殊的情 况下,在PL/SQL中使用标准的SQL语句或DML语句不能实现自己的需求,比如需要动态建表或某个不确定的操作需要动态执行。这就需要使用动态SQL 来实现。本文通过几个实例来详细的讲解动态SQL的使用。

一般的PL/SQL程序设计中,在DML和事务控制的语句中可以直接使用SQL,但是DDL语句及系统控制语句却不能在PL/SQL中直接使用,要想实现在PL/SQL中使用DDL语句及系统控制语句,可以通过使用动态SQL来实现。

首先我们应该了解什么是动态SQL,在Oracle数据库开发PL/SQL块中我们使用的SQL分为:静态SQL语句和动态SQL语句。所谓静态SQL 指在PL/SQL块中使用的SQL语句在编译时是明确的,执行的是确定对象。而动态SQL是指在PL/SQL块编译时SQL语句是不确定的,如根据用户输 入的参数的不同而执行不同的操作。编译程序对动态语句部分不进行处理,只是在程序运行时动态地创建语句、对语句进行语法分析并执行该语句。

Oracle中动态SQL可以通过本地动态SQL来执行,也可以通过DBMS_SQL包来执行。下面就这两种情况分别进行说明:

  一、本地动态SQL

本地动态SQL是使用EXECUTE IMMEDIATE语句来实现的。

  1、本地动态SQL执行DDL语句:

需求:根据用户输入的表名及字段名等参数动态建表。

create or replace procedure proc_test
(
table_name in varchar2,     --表名
field1 in varchar2,          --字段名
datatype1 in varchar2,      --字段类型
field2 in varchar2,          --字段名
datatype2 in varchar2        --字段类型
) as
str_sql varchar2(500);
begin
str_sql:=’create table ’||table_name||’(’||field1||’ ’||datatype1||’,’||field2||’ ’||datatype2||’)’;
execute immediate str_sql;   --动态执行DDL语句
exception
when others then
null;
end ;

以上是编译通过的存储过程代码。下面执行存储过程动态建表。

SQL> execute proc_test(’dinya_test’,’id’,’number(8) not null’,’name’,’varchar2(100)’);

PL/SQL procedure successfully completed

SQL> desc dinya_test;
Name Type          Nullable Default Comments
---- ------------- -------- ------- --------
ID   NUMBER(8)

NAME VARCHAR2(100) Y

SQL>

到这里,就实现了我们的需求,使用本地动态SQL根据用户输入的表名及字段名、字段类型等参数来实现动态执行DDL语句。

  2、本地动态SQL执行DML语句。

需求:将用户输入的值插入到上例中建好的dinya_test表中。

create or replace procedure proc_insert
(
id in number,                                 --输入序号
name in varchar2                             --输入姓名
) as
str_sql varchar2(500);
begin
str_sql:=’insert into dinya_test values(:1,:2)’;
execute immediate str_sql using id,name; --动态执行插入操作
exception
when others then
null;
end ;

执行存储过程,插入数据到测试表中。

SQL> execute proc_insert(1,’dinya’);
PL/SQL procedure successfully completed
SQL> select * from dinya_test;
ID      NAME
1      dinya

在上例中,本地动态SQL执行DML语句时使用了using子句,按顺序将输入的值绑定到变量,如果需要输出参数,可以在执行动态SQL的时候,使用RETURNING INTO 子句,如:

declare
p_id number:=1;
v_count number;
begin
v_string:=’select count(*) from table_name a where a.id=:id’;
execute immediate v_string into v_count using p_id;
end ;

更多的关于动态SQL中关于返回值及为输出输入绑定变量执行参数模式的问题,请读者自行做测试。

  二、使用DBMS_SQL

使用DBMS_SQL包实现动态SQL的步骤如下:A、先将要执行的SQL语句或一个语句块放到一个字符串变量中。B、使用DBMS_SQL包的 parse过程来分析该字符串。C、使用DBMS_SQL包的bind_variable过程来绑定变量。D、使用DBMS_SQL包的execute函 数来执行语句。

  1、使用DBMS_SQL包执行DDL语句

需求:使用DBMS_SQL包根据用户输入的表名、字段名及字段类型建表。

create or replace procedure proc_dbms_sql
(
table_name in varchar2,       --表名
field_name1 in varchar2,      --字段名
datatype1 in varchar2,        --字段类型
field_name2 in varchar2,      --字段名
datatype2 in varchar2         --字段类型
)as
v_cursor number;              --定义光标
v_string varchar2(200);      --定义字符串变量
v_row number;                  --行数
begin
v_cursor:=dbms_sql.open_cursor;     --为处理打开光标
v_string:=’create table ’||table_name||’(’||field_name1||’ ’||datatype1||’,’||field_name2||’ ’||datatype2||’)’;
dbms_sql.parse(v_cursor,v_string,dbms_sql.native);    --分析语句
v_row:=dbms_sql.execute(v_cursor);   --执行语句
dbms_sql.close_cursor(v_cursor);     --关闭光标
exception
when others then
dbms_sql.close_cursor(v_cursor);  --关闭光标
raise;
end;

以上过程编译通过后,执行过程创建表结构:

SQL> execute proc_dbms_sql(’dinya_test2’,’id’,’number(8) not null’,’name’,’varchar2(100)’);

PL/SQL procedure successfully completed

SQL> desc dinya_test2;
Name Type          Nullable Default Comments
---- ------------- -------- ------- --------
ID   NUMBER(8)
NAME VARCHAR2(100) Y

SQL>

  2、使用DBMS_SQL包执行DML语句

需求:使用DBMS_SQL包根据用户输入的值更新表中相对应的记录。

查看表中已有记录:

SQL> select * from dinya_test2;
ID NAME
1 Oracle
2 CSDN
3 ERP
SQL>

建存储过程,并编译通过:

create or replace procedure proc_dbms_sql_update
(
id number,
name varchar2
)as
v_cursor number;            --定义光标
v_string varchar2(200);   --字符串变量
v_row number;               --行数
begin
v_cursor:=dbms_sql.open_cursor;    --为处理打开光标
v_string:=’update dinya_test2 a set a.name=:p_name where a.id=:p_id’;
dbms_sql.parse(v_cursor,v_string,dbms_sql.native);   --分析语句
dbms_sql.bind_variable(v_cursor,’:p_name’,name);     --绑定变量
dbms_sql.bind_variable(v_cursor,’:p_id’,id);          --绑定变量
v_row:=dbms_sql.execute(v_cursor);           --执行动态SQL
dbms_sql.close_cursor(v_cursor);                        --关闭光标
exception
when others then
dbms_sql.close_cursor(v_cursor);                --关闭光标
raise;
end;

执行过程,根据用户输入的参数更新表中的数据:

SQL> execute proc_dbms_sql_update(2,’csdn_dinya’);

PL/SQL procedure successfully completed

SQL> select * from dinya_test2;
ID NAME
1 Oracle
2 csdn_dinya
3 ERP
SQL>

执行过程后将第二条的name字段的数据更新为新值csdn_dinya。这样就完成了使用dbms_sql包来执行DML语句的功能。

使用DBMS_SQL中,如果要执行的动态语句不是查询语句,使用DBMS_SQL.Execute或 DBMS_SQL.Variable_Value来执行,如果要执行动态语句是查询语句,则要使用DBMS_SQL.define_column定义输出 变量,然后使用DBMS_SQL.Execute, DBMS_SQL.Fetch_Rows, DBMS_SQL.Column_Value及DBMS_SQL.Variable_Value来执行查询并得到结果。

  总结说明:

在Oracle开发过程中,我们可以使用动态SQL来执行DDL语句、DML语句、事务控制语句及系统控制语句。但是需要注意的是,PL/SQL块中使 用动态SQL执行DDL语句的时候与别的不同,在DDL中使用绑定变量是非法的(bind_variable(v_cursor,’:p_name’, name)),分析后不需要执行DBMS_SQL.Bind_Variable,直接将输入的变量加到字符串中即可。另外,DDL是在调用 DBMS_SQL.PARSE时执行的,所以DBMS_SQL.EXECUTE也可以不用,即在上例中的v_row:=dbms_sql.execute (v_cursor)部分可以不要。

VN:F [1.6.3_896]
Rating: 0.0/10 (0 votes cast)
VN:F [1.6.3_896]
Rating: 0 (from 0 votes)