htyy521 | 27 八月, 2006 15:03
htyy521 | 27 八月, 2006 10:10
建立表:
SQL> create table CD_BILL_LOG
2 (
3 BILL_ID NUMBER,
4 DEAL_EMP_ID NUMBER,
5 REACH_DATE DATE,
6 DONE_DATE DATE,
7 BILL_STATUS VARCHAR2(10),
8 DEAL_DEPT_ID NUMBER,
9 SIGN NUMBER,
10 REMARK VARCHAR2(50)
11 )
12 ;
建立过程:
SQL> create or replace procedure
2 cd_update_log(inputremark varchar2,msg out float)
3 as
4 begin
5
6 update cd_bill_log a
7 set a.remark =inputremark --to_char(sysdate,'mi:ss')
8 where a.bill_id=45;
9 msg:=1;
10 commit;
11 end;
调用过程:
var conn = Server.CreateObject("ADODB.Connection");
conn.Open("sczbo","sczb","sczb");
var sp_common= Server.CreateObject("ADODB.Command");
var rs = Server.CreateObject("ADODB.Recordset");
conn.CursorLocation =3;
sp_common.CommandText = "cd_update_log";
sp_common.CommandType = 4;
var para1=sp_common.CreateParameter("inputremark", 129,1,50,"联通");
sp_common.Parameters.Append(para1);
var para2=sp_common.CreateParameter("msg", 3, 2);
sp_common.Parameters.Append(para2);
sp_common.activeConnection=conn;
sp_common.execute;
var msg=sp_common("msg");
Response.write( msg);
Response.end;
htyy521 | 27 八月, 2006 10:02
var finishtime,yy,mm,bm,gd;
yy=Request("yy");
mm=Request("mm");
bm=Request("bm");
gd=Request("gd");
finishtime=mm+"/"+yy;
comm.CommandText = "HZBB_RWWCB_QUERY";
comm.CommandType = 4;
var para1=comm.CreateParameter("finishtime",200,1,50,finishtime);
comm.Parameters.Append(para1);
var para2=comm.CreateParameter("bm",200,1,50,bm);
comm.Parameters.Append(para2);
var para3=comm.CreateParameter("gd",200,1,50,gd);
comm.Parameters.Append(para3);
comm.activeConnection=conn;
rs=comm.execute;
。。。。
htyy521 | 27 八月, 2006 10:00
USE master
go
EXEC sp_addlogin 'logname','logpwd','dftdb' //新建登陆,其中dftdb是登陆时默认的数据库,缺省为master
go
USE username //用户名
go
EXEC sp_change_users_login 'Update_One', 'UserName', 'LoginName'
go
//更改当前数据库中 SQL Server 用户与 Microsoft® SQL Server™ 登录之间的关系。
新问题:
执行通过,当telnet 127.0.0.1 1433出错:sql server 不存在或拒绝访问。
可能的问题在1433端口被屏蔽,可以通过netstat -an察看1433端口是否开启。
1433端口被屏蔽的原因可能是因为在XPSP2或则是2003没有安装SQLSP3升级包,1433端口被屏蔽掉了。
解决1433端口被屏蔽的办法:你也可以打开开始-->程序--Microsoft Sql Server-->服务器网络实用工具
然后启用WinSock代理,代理地址为127.0.0.1,代理端口为1433,这样也可以打开1433端口
记住用netstat -an 查看1433端口的开启情况
htyy521 | 27 四月, 2006 15:17
移植过程:采用的oracle的移植工具Migration WorkBenth。
移植注意事项:
1. 移植前要在ODBC中建立DSN,由于移植的是sql server 2000,驱动选sql server。
2. 在oracle实例中建立登陆用户,包括用户名和密码,并赋予权限(connect,resource和dba)。这在使用WorkBenth过程中是要填写的内容。
3. 移植过程分为获取sql server Model,建立oracle Model和导入数据三部分。
4. 移植后我们会发现在oracle实例中有两个方案生成:omwb_emulation和sa。其中omwb_emulation可以不予理会,它主要提供了弱游标,供sa方案中的存储过程调用。对于方案sa我们会注意到几点:原来sql server 中的数据,包括表,视图,存储过程,索引等都在这个方案中存放;原来sql server 表中的种子类型数据在方案sa中被统一管理,放在“序列”中;
原来的数据库名称xihang_info现在是方案sa中的表空间。
移植后注意事项:
1. 因为应用程序使用的是ODBC,涉及到几个连接字符: dsn username和password。由于应用程序中的连接字符串是conn.Open("sczb","sczb","sczbpw"),而现有的schema是sa,连接失败。现在有两种方案:改连接字符串或从新建立一个方案sczb。这里我们采用了第二种方案,新建方案sczb。
方法是:先新建用户sczb,密码是sczbpw,权限是connect,resource,dba;然后将方案sa导入到方案sczb中(若是导入到另外机器上,方案omwb_emulation一并导出再导入)。
2. 在sczb中修改视图和存储过程。修改视图只要把sql语句中的方案名sa删除或改为即可。存储过程需要修改的内容比较多,具体见下:
修改存储过程:
1.修改临时表
SQL的临时表用#或##开头,使用完后自动释放,ORACLE的临时表则存在数据库中,每个会话的数据都互不干涉。语法分别为:CREATE TABLE #TEMP(ID INT,NAME VARCHAR(20))CREATE GLOBAL TEMPORARY TABLE TEMP(ID INT,NAME VARCHAR(20))
2. IDENTITY字段
Oracle不支持自增长类型,在向表中插入含有IDENTITY字段的记录时,要显示声明。例如:
Insert into tbl values(序列名.nextval,字段1,字段2,。。。)。
3. SQL与ORACLE的游标
SQL的游标用@@FETCH_STATUS判断是否还有数据,ORACLE的游标用%FOUND、%NOTFOUND来判断游标是否结束。
4. 连接字符串:
SQL的字符串连接用+号,ORACLE字符串连接用||,单引号可以做转义符。因为在sql server
中number类型的“+”运算也用到”+”,因此在移植后oracle对于number类型的“+”有时识别不出来,而作为字符连接来处理。
5. 游标的名称在移植后会有重复。不允许。
6. 日期类型数据要注意
其格式不同于sql server 中的“yyyy-mm-dd”格式,而是“dd-x月-yyyy“格式。要用to_char(?,’yyyy-mm-dd’)处理成sql server 一样的格式。
7. oracle获取sql语句所影响的行数时,不像sql server 中@@rowcount直接获取那么简单,要分以下三种情况。
Oracle中对于隐性游标,获取行数的方法是通过SQL%rowcount直接获得。
对于显性游标获取行数通过cursor_name%rowcount获得,但有有以下sql语句:
For index in cusor_name loop
变量名:=cursor_name%rowcount;
End loop;
Fetch into 语句的话,rowcount=1
8. 获得年,月,日在oracle中不支持year(),month()和day()函数。
解决的方法是通过substr()函数。例如获取‘2000-01-10’的‘年’,可以通过substr(‘2000-01-10’,1,4)得到。
9. oracle不支持case语句。
在sql server中语句:
CASE WHEN (GROUPING(BM_Name2) = 1) THEN '合计' ELSE ISNULL(BM_Name2,'未知') END AS BM_Name2,
在oracle改写为decode语句:
decode(GROUPING(BM_Name2),1,'合计',nvl(BM_Name2,'未知')) BM_Name2
10. 左右连接问题。
在sql server的连接语句如:
select a.id,b.yueshj from jh_wh_xiangmu as a left join jh_lr_zongliang as b on a.id=b.xiangmid
在oracle中应改为:
Select a.id, b.yueshj from jh_wh_xiangmu a, jh_lr_zongliang b where a.id=b.xiangmid(+);
在sql server的连接语句如:
select a.id,b.yueshj from jh_wh_xiangmu as a left join jh_lr_zongliang as b on trim(a.id)=trim(b.xiangmid)
在oracle中应改为:
Select a.id, b.yueshj from jh_wh_xiangmu a, jh_lr_zongliang b where trim(a.id)=trim(b.xiangmid(+))
11.改好的存储过程,不能编译通过就认为ok了。编译通过只能说明在语法上没有问题了,要进一步执行看逻辑上是否还有问题。在编译时产生的错误是pl/sql错误,在执行时的错误是ora错误。
12.在sql/plus或worksheet中执行存储过程的语句是:execute 存储过程名(‘参数1‘,’参数2‘,。。)
但在执行返回多条记录集的存储过程,也就是参数中含有RC1 IN OUT Omwb_emulation.globalPkg.RCT1的存储过程时,执行起来略有不同。在sql plus中执行的语法如下:
Sql〉var rc1 refcursor;
Sql〉execute pro_name(‘参数1‘,’参数2‘,:rc1,。。);
Sql〉print rc1;
htyy521 | 27 四月, 2006 15:17
移植过程:采用的oracle的移植工具Migration WorkBenth。
移植注意事项:
1. 移植前要在ODBC中建立DSN,由于移植的是sql server 2000,驱动选sql server。
2. 在oracle实例中建立登陆用户,包括用户名和密码,并赋予权限(connect,resource和dba)。这在使用WorkBenth过程中是要填写的内容。
3. 移植过程分为获取sql server Model,建立oracle Model和导入数据三部分。
4. 移植后我们会发现在oracle实例中有两个方案生成:omwb_emulation和sa。其中omwb_emulation可以不予理会,它主要提供了弱游标,供sa方案中的存储过程调用。对于方案sa我们会注意到几点:原来sql server 中的数据,包括表,视图,存储过程,索引等都在这个方案中存放;原来sql server 表中的种子类型数据在方案sa中被统一管理,放在“序列”中;
原来的数据库名称xihang_info现在是方案sa中的表空间。
移植后注意事项:
1. 因为应用程序使用的是ODBC,涉及到几个连接字符: dsn username和password。由于应用程序中的连接字符串是conn.Open("sczb","sczb","sczbpw"),而现有的schema是sa,连接失败。现在有两种方案:改连接字符串或从新建立一个方案sczb。这里我们采用了第二种方案,新建方案sczb。
方法是:先新建用户sczb,密码是sczbpw,权限是connect,resource,dba;然后将方案sa导入到方案sczb中(若是导入到另外机器上,方案omwb_emulation一并导出再导入)。
2. 在sczb中修改视图和存储过程。修改视图只要把sql语句中的方案名sa删除或改为即可。存储过程需要修改的内容比较多,具体见下:
修改存储过程:
1.修改临时表
SQL的临时表用#或##开头,使用完后自动释放,ORACLE的临时表则存在数据库中,每个会话的数据都互不干涉。语法分别为:CREATE TABLE #TEMP(ID INT,NAME VARCHAR(20))CREATE GLOBAL TEMPORARY TABLE TEMP(ID INT,NAME VARCHAR(20))
2. IDENTITY字段
Oracle不支持自增长类型,在向表中插入含有IDENTITY字段的记录时,要显示声明。例如:
Insert into tbl values(序列名.nextval,字段1,字段2,。。。)。
3. SQL与ORACLE的游标
SQL的游标用@@FETCH_STATUS判断是否还有数据,ORACLE的游标用%FOUND、%NOTFOUND来判断游标是否结束。
4. 连接字符串:
SQL的字符串连接用+号,ORACLE字符串连接用||,单引号可以做转义符。因为在sql server
中number类型的“+”运算也用到”+”,因此在移植后oracle对于number类型的“+”有时识别不出来,而作为字符连接来处理。
5. 游标的名称在移植后会有重复。不允许。
6. 日期类型数据要注意
其格式不同于sql server 中的“yyyy-mm-dd”格式,而是“dd-x月-yyyy“格式。要用to_char(?,’yyyy-mm-dd’)处理成sql server 一样的格式。
7. oracle获取sql语句所影响的行数时,不像sql server 中@@rowcount直接获取那么简单,要分以下三种情况。
Oracle中对于隐性游标,获取行数的方法是通过SQL%rowcount直接获得。
对于显性游标获取行数通过cursor_name%rowcount获得,但有有以下sql语句:
For index in cusor_name loop
变量名:=cursor_name%rowcount;
End loop;
Fetch into 语句的话,rowcount=1
8. 获得年,月,日在oracle中不支持year(),month()和day()函数。
解决的方法是通过substr()函数。例如获取‘2000-01-10’的‘年’,可以通过substr(‘2000-01-10’,1,4)得到。
9. oracle不支持case语句。
在sql server中语句:
CASE WHEN (GROUPING(BM_Name2) = 1) THEN '合计' ELSE ISNULL(BM_Name2,'未知') END AS BM_Name2,
在oracle改写为decode语句:
decode(GROUPING(BM_Name2),1,'合计',nvl(BM_Name2,'未知')) BM_Name2
10. 左右连接问题。
在sql server的连接语句如:
select a.id,b.yueshj from jh_wh_xiangmu as a left join jh_lr_zongliang as b on a.id=b.xiangmid
在oracle中应改为:
Select a.id, b.yueshj from jh_wh_xiangmu a, jh_lr_zongliang b where a.id=b.xiangmid(+);
在sql server的连接语句如:
select a.id,b.yueshj from jh_wh_xiangmu as a left join jh_lr_zongliang as b on trim(a.id)=trim(b.xiangmid)
在oracle中应改为:
Select a.id, b.yueshj from jh_wh_xiangmu a, jh_lr_zongliang b where trim(a.id)=trim(b.xiangmid(+))
11.改好的存储过程,不能编译通过就认为ok了。编译通过只能说明在语法上没有问题了,要进一步执行看逻辑上是否还有问题。在编译时产生的错误是pl/sql错误,在执行时的错误是ora错误。
12.在sql/plus或worksheet中执行存储过程的语句是:execute 存储过程名(‘参数1‘,’参数2‘,。。)
但在执行返回多条记录集的存储过程,也就是参数中含有RC1 IN OUT Omwb_emulation.globalPkg.RCT1的存储过程时,执行起来略有不同。在sql plus中执行的语法如下:
Sql〉var rc1 refcursor;
Sql〉execute pro_name(‘参数1‘,’参数2‘,:rc1,。。);
Sql〉print rc1;
htyy521 | 26 三月, 2006 20:54
| « | 一月 2012 | » | ||||
|---|---|---|---|---|---|---|
| 一 | 二 | 三 | 四 | 五 | 六 | 日 |
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| 30 | 31 | |||||