不知道从哪里得到这个文档,有用就放上来了 -gwb

 

数据库端SQL语法的迁移

以下为常用的SQL语法迁移,包括数据类型、ID列向SEQUENCE迁移、表(主键、外键、CHECK、UNIQUE、DEFAULT、INDEX)、游标、存储过程、函数、触发器、常用SQL语法与函数几个方面,考虑SQL SERVER的实际情况,没有涉及ORACLE特有的PACKAGE、EXCEPTION等。在以下的描述中,将SQL SERVER的TRANSACT-SQL简称为T-SQL。在ORACLE中,其语法集称为PL/SQL。

 

<一> 数据类型的迁移

    <1>、ORACLE端语法说明

在ORACLE中,分析其数据类型,大致可分为数字、字符、日期时间和特殊四大类。其中,数字类型有NUMBER;字符类型有CHAR与VARCHAR2;日期时间类型只有DATE一种;除此之外,LONG、RAW、LONG RAW、BLOB、CLOB和BFILE等数据类型都可视为特殊数据类型。

 

    <2>、SQL SERVER端语法说明

在SQL SERVER中,参照上面对ORACLE的划分,数据类型也大致可分为数字、字符、日期时间和特殊四大类。数字类型又可分为精确数值、近似数值、整数、二进制数、货币等几类,其中,精确数值有DECIMAL[(P[, S])]与NUMERIC[(P[, S])];近似数值有FLOAT[(N)];整数有INT、SMALLINT、TINYINT;二进制数有BINARY[(N)]、VARBINARY[(N)];货币有MONEY、SMALLMONEY。字符类型有CHAR[(N)]与VARCHAR[(N)]。日期时间类型有DATETIME、SMALLDATETIME。除此之外,BIT、TIMESTAMP、TEXT和IMAGE、BINARY VARING等数据类型都可视为特殊数据类型。

 

<3>、从SQL SERVER向ORACLE的迁移方案

比较ORACLE与SQL SERVER在数据类型上的不同,当从SQL SERVER向ORACLE迁移时,可以做如下调整:

 

SQL SERVER

ORACLE

数字类型

DECIMAL[(P[, S])]

NUMBER[(P[, S])]

NUMERIC[(P[, S])]

NUMBER[(P[, S])]

FLOAT[(N)]

NUMBER[(N)]

INT

NUMBER

SMALLINT

NUMBER

TINYINT

NUMBER

MONEY

NUMBER[19,4]

SMALLMONEY

NUMBER[19,4]

字符类型

CHAR[(N)]

CHAR[(N)]

VARCHAR[(N)]

VARCHAR2[(N)]

日期时间类型

DATETIME

DATE

SMALLDATETIME

DATE

其它

TEXT

CLOB

IMAGE

BLOB

BIT

NUMBER(1)

方法:

公司原系统中的Money 用于金额时转换用number(14,2);用于单价时用 number(10,4)代替;

<二> ID列向SEQUENCE迁移

    <1>、SQL SERVER端语法说明

在SQL SERVER中,可以将数据库中的某一字段定义为IDENTITY列以做主键识别,如:

jlbh        numeric(12,0)        identity(1,1)        /*记录编号字段*/

CONSTRAINT  PK_tbl_example  PRIMARY KEY  nonclustered (jlbh)  /*主键约束*/

在这里,jlbh是一个ID列,在向具有该列的表插入记录时,系统将从1开始以1的步长自动对jlbh的值进行维护。

 

    <2>、ORACLE端语法说明

但在ORACLE中,没有这样的ID列定义,而是采用另一种方法,即创建SEQUENCE。

如:

/*--1、创建各使用地区编码表--*/

drop table LT_AREA;

create table LT_AREA

(

area_id    number(5,0)      NOT NULL,   /*地区编码*/

area_name    varchar2(20)     NOT NULL,   /*地区名称*/

constraint PK_LT_AREA PRIMARY KEY(area_id)

 );

 

/*--2、创建SEQUENCE,将列area_id 类ID化--*/

drop sequence SEQ_LT_AREA;

create sequence SEQ_LT_AREA increment by 1    /*该SEQUENCE以1的步长递增*/

 start with 1 maxvalue 99999;                /*从1开始,最大增长到99999*/

 

/*--3、实际操作时引用SEQUENCE的下一个值--*/

insert into LT_AREA(area_id, area_name) values(SEQ_LT_AREA.NEXTVAL, '深圳');

insert into LT_AREA(area_id, area_name) values(SEQ_LT_AREA.NEXTVAL, '广州');

insert into LT_AREA(area_id, area_name) values(SEQ_LT_AREA.NEXTVAL, '北京');

 

/*--4、新插入连续三条记录后,下一条语句运行后,‘上海’地区的area_id为4--*/

insert into LT_AREA(area_id, area_name) values(SEQ_LT_AREA.NEXTVAL, '上海');

 

   <3>、从SQL SERVER向ORACLE的迁移方案

 

根据以上分析,当从SQL SERVER向ORACLE迁移时,可以做如下调整:

1、去掉建表语句中有关ID列的identity声明关键字;

2、创建SEQUENCE,将此SEQUENCE与需类ID化的列对应;

3、在INSERT语句中对相应列引用其SEQUENCE值:SEQUENCENAME.NEXTVAL

实际上,处理以上情况在ORACLE中采用的方法为对有自动增长字段的表增加一插入前触发器(具体资料见后“触发器”一节),如下:

CREATE OR REPLACE TRIGGER GenaerateAreaID

BEFORE INSERT ON LT_AREA

FOR EACH ROW

    Select SEQ_LT_AREA.NEXTVAL INTO :NEW.ID

    FROM DUAL;

BEGIN

END GenaerateAreaID;

GenaerateAreaID实际上修改了伪记录:new的area_id值。 :new最有用的一个特性----当该语句真正被执行时,:new中的存储内容就会被使用。所以系统每次都能自动生成新的号码。

<三> 表(主键、外键、CHECK、UNIQUE、DEFAULT、INDEX)

    <1>、SQL SERVER端语法说明

有如下SQL SERVER语句:

/* ------------------------ 创建employee 表------------------------ */

IF EXISTS(SELECT 1 FROM SYSOBJECTS WHERE NAME = ‘employee’

          AND TYPE = ‘U’)

    DROP TABLE employee

GO

 

CREATE TABLE employee

(

emp_id   empid    /*empid为用户自定义数据类型*/

/*创建自命名主键约束*/

    CONSTRAINT PK_employee PRIMARY KEY NONCLUSTERED

/*创建自命名CHECK约束*/

    CONSTRAINT CK_emp_id CHECK (emp_id LIKE

                     '[A-Z][A-Z][A-Z][1-9][0-9][0-9][0-9][0-9][FM]' or

                     emp_id LIKE '[A-Z]-[A-Z][1-9][0-9][0-9][0-9][0-9][FM]'),

    /* CHECK约束说明:Each employee ID consists of three characters that

    represent the employee's initials, followed by a five

    digit number ranging from 10000 to 99999 and then the

    employee's gender (M or F). A (hyphen) - is acceptable

    for the middle initial. */

fname     varchar(20)      NOT NULL,

minit     char(1)         NULL,

lname     varchar(30)      NOT NULL,

 

ss_id     varchar(9)        UNIQUE,    /*创建唯一性约束*/

 

job_id    smallint            NOT NULL

    DEFAULT 1,            /*设定DEFAULT值*/

job_lvl tinyint

   DEFAULT 10,            /*设定DEFAULT值*/

    /* Entry job_lvl for new hires. */

pub_id   char(4)         NOT NULL

    DEFAULT ('9952')        /*设定DEFAULT值*/

    REFERENCES publishers(pub_id),  /*创建系统命名外键约束*/

    /* By default, the Parent Company Publisher is the company

    to whom each employee reports. */

hire_date        datetime       NOT NULL

    DEFAULT (getdate()),        /*设定DEFAULT值*/

    /* By default, the current system date will be entered. */

CONSTRAINT FK_employee_job FOREIGN KEY (job_id)

    REFERENCES jobs(job_id)        /*创建自命名外键约束*/

)

GO

   

/* --------------------- 创建employee表上的index --------------------- */

IF EXISTS (SELECT 1 FROM sysindexes

               WHERE name = 'emp_pub_id_ind')

DROP INDEX employee. emp_pub_id_ind

GO

 

CREATE INDEX emp_pub_id_ind

    ON employee(pub_id)

GO

 

    <2>、ORACLE端语法说明

在ORACLE端的语法如下:

/* ---------------------- 创建employee 表---------------------- */

DROP TABLE employee;

 

CREATE TABLE employee

(

emp_id    varchar2(9)  /*根据用户自定义数据类型的定义调整为varchar2(9)*/

/*创建自命名主键约束*/

    CONSTRAINT PK_employee PRIMARY KEY NONCLUSTERED

/*创建自命名CHECK约束*/

    CONSTRAINT CK_emp_id CHECK (emp_id LIKE

                     '[A-Z][A-Z][A-Z][1-9][0-9][0-9][0-9][0-9][FM]' or

                     emp_id LIKE '[A-Z]-[A-Z][1-9][0-9][0-9][0-9][0-9][FM]'),

    /* CHECK约束说明:Each employee ID consists of three characters that

    represent the employee's initials, followed by a five

    digit number ranging from 10000 to 99999 and then the

    employee's gender (M or F). A (hyphen) - is acceptable

    for the middle initial. */

fname     varchar2(20)     NOT NULL,

minit     varchar2(1)      NULL,

lname     varchar2(30)     NOT NULL,

 

ss_id     varchar2(9)      UNIQUE,    /*创建唯一性约束*/

 

job_id    number(5,0)      NOT NULL

    /*这里考虑了SMALLINT的长度,也可调整为number*/

    DEFAULT 1,            /*设定DEFAULT值*/

job_lvl     number(3,0)

    /*这里考虑了TINYINT的长度,也可调整为number*/

   DEFAULT 10,            /*设定DEFAULT值*/

    /* Entry job_lvl for new hires. */

pub_id  varchar2(4)        NOT NULL

    DEFAULT ('9952')        /*设定DEFAULT值*/

    REFERENCES publishers(pub_id),  /*创建系统命名外键约束*/

    /* By default, the Parent Company Publisher is the company

    to whom each employee reports. */

hire_date        date            NOT NULL

    DEFAULT SYSDATE,        /*设定DEFAULT值*/

    /*这里,SQL SERVER的getdate()调整为ORACLE的SYSDATE*/

    /* By default, the current system date will be entered. */

CONSTRAINT FK_employee_job FOREIGN KEY (job_id)

    REFERENCES jobs(job_id)        /*创建自命名外键约束*/

);

   

/* -------------------- 创建employee表上的index -------------------- */

DROP INDEX employee. emp_pub_id_ind;

CREATE INDEX emp_pub_id_ind ON employee(pub_id);

 

<3>、从SQL SERVER向ORACLE的迁移方案

比较这两段SQL代码,可以看出,在创建表及其主键、外键、CHECK、UNIQUE、DEFAULT、INDEX时,SQL SERVER 与ORACLE的语法大致相同,但时迁移时要注意以下情况:

(1) Oracle定义表字段的default属性要紧跟字段类型之后,如下:

Create table MZ_Ghxx

( ghlxh  number primay key ,

rq     date   default sysdate not null,

  ….

而不能写成

Create table MZ_Ghxx

( ghlxh  number primay key ,

rq     date   not null default sysdate,

  ….

2)T-SQL定义表结构时,如果涉及到用默认时间和默认修改人员,全部修改如下:

 ZHXGRQ     DATE   DEFAULT SYSDATE NULL,

 ZHXGR      CHAR(8) DEFAULT ‘FUTIAN’ NULL,

3)如表有identity定段,要先将其记录下来,建完表之后,马上建相应的序列和表触发器,并作为记录。
 

从SQL Server 向Oracle 8迁移的技术实现方案<> 游标
从SQL Server 向Oracle 8迁移的技术实现方案    
<1>、SQL SERVER端语法说明
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案
1DECLARE CURSOR语句
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案       语法:
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案           
DECLARE cursor_name [INSENSITIVE] [SCROLL] CURSOR
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案    
FOR select_statement
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案  
[FOR {READ ONLY | UPDATE [OF column_list ]}]
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案       例:
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案       
DECLARE  authors_cursor  CURSOR  FOR
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案        
SELECT  au_lname, au_fname 
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案          
FROM  authors
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案         
WHERE  au_lname LIKE ‘B%
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案      
ORDER BY  au_lname, au_fname
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案 
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案
2、OPEN语句
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案   语法:
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案       
OPEN  cursor_name
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案       例:
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案       
OPEN authors_cursor
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案 
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案
3、FETCH语句
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案   语法:
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案       
FETCH
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案             
[ [ NEXT | PRIOR | FIRST | LAST | ABSOLUTE n | RELATIVE n ]
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案           
FROM  cursor_name 
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案         
[INTO @variable_name1, @variable_name2,… ]
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案       例:
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案       
FETCH NEXT FROM authors_cursor 
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案                  
INTO @au_lname@au_fname
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案 
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案
4、CLOSE语句
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案   语法:
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案       
CLOSE  cursor_name
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案       例:
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案       
CLOSE authors_cursor
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案 
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案
5、DEALLOCATE语句
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案   语法:
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案       
DEALLOCATE  cursor_name
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案       例:
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案       
DEALLOCATE authors_cursor
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案 
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案
6、游标中的标准循环与循环终止条件判断
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案   (
1FETCH NEXT FROM authors_cursor INTO @au_lname@au_fname
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案 
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案   (
2-- Check @@FETCH_STATUS to see if there are any more rows to fetch.
从SQL Server 向Oracle 8迁移的技术实现方案

从SQL Server 向Oracle 8迁移的技术实现方案        
WHILE @@FETCH_STATUS = 0
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案        
BEGIN
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案           
-- Concatenate and display the current values in the variables.
从SQL Server 向Oracle 8迁移的技术实现方案

从SQL Server 向Oracle 8迁移的技术实现方案           
PRINT "Author: " + @au_fname + " " +  @au_lname
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案  
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案           
-- This is executed as long as the previous fetch succeeds.
从SQL Server 向Oracle 8迁移的技术实现方案

从SQL Server 向Oracle 8迁移的技术实现方案               
FETCH NEXT FROM authors_cursor INTO @au_lname@au_fname
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案        
END
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案  
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案   (
3CLOSE authors_cursor
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案
7、隐式游标
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案MSSqlServer中对于数据操纵语句受影响的行数,有一个全局的变量:
@@rowcount,其实它是一个隐式的游标,它记载了上条数据操纵语句所影响的行数,当@@rowcount小于1时,表时,上次没有找到相关的记录,如下:
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案
Update students set lastname = ‘John’ where student_id = ‘301
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案
If @@rowcount < 1 then
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案
Insert into students values (‘301’,’stdiv’,’john’,’996-03-02’)
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案表示如果数据表中有学号为“
301”的记录,则修改其名字为“John”,如果找不到相应的记录,则向数据库中插入一条“John”的记录。
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案
8、示例:
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案
-- Declare the variables to store the values returned by FETCH.
从SQL Server 向Oracle 8迁移的技术实现方案

从SQL Server 向Oracle 8迁移的技术实现方案
DECLARE @au_lname varchar(40), @au_fname varchar(20)
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案 
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案
DECLARE  authors_cursor  CURSOR  FOR
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案 
SELECT  au_lname, au_fname 
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案   
FROM  authors
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案  
WHERE  au_lname LIKE ‘B%
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案   
ORDER BY  au_lname, au_fname
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案 
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案
OPEN authors_cursor
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案 
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案
-- Perform the first fetch and store the values in variables.
从SQL Server 向Oracle 8迁移的技术实现方案

从SQL Server 向Oracle 8迁移的技术实现方案
-- Note: The variables are in the same order as the columns
从SQL Server 向Oracle 8迁移的技术实现方案

从SQL Server 向Oracle 8迁移的技术实现方案
-- in the SELECT statement. 
从SQL Server 向Oracle 8迁移的技术实现方案

从SQL Server 向Oracle 8迁移的技术实现方案 
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案
FETCH NEXT FROM authors_cursor INTO @au_lname@au_fname
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案 
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案
-- Check @@FETCH_STATUS to see if there are any more rows to fetch.
从SQL Server 向Oracle 8迁移的技术实现方案

从SQL Server 向Oracle 8迁移的技术实现方案
WHILE @@FETCH_STATUS = 0
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案 
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案
BEGIN
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案  
-- Concatenate and display the current values in the variables.
从SQL Server 向Oracle 8迁移的技术实现方案

从SQL Server 向Oracle 8迁移的技术实现方案      
PRINT "Author: " + @au_fname + " " +  @au_lname
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案  
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案      
-- This is executed as long as the previous fetch succeeds.
从SQL Server 向Oracle 8迁移的技术实现方案

从SQL Server 向Oracle 8迁移的技术实现方案      
FETCH NEXT FROM authors_cursor INTO @au_lname@au_fname
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案
END
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案  
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案
CLOSE authors_cursor
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案 
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案
DEALLOCATE authors_cursor
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案 
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案    
<2>、ORACLE端语法说明
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案
1、  DECLARE CURSOR语句
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案       语法:
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案    
CURSOR  cursor_name  IS  select_statement;
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案       例:
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案           
CURSOR  authors_cursor  IS
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案       
SELECT  au_lname, au_fname 
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案         
FROM  authors
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案        
WHERE  au_lname LIKE ‘B%
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案     
ORDER BY  au_lname, au_fname;
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案 
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案
2、  OPEN语句
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案   语法:
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案       
OPEN  cursor_name
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案       例:
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案       
OPEN authors_cursor;
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案 
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案
3、  FETCH语句
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案   语法:
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案       
FETCH  cursor_name  INTO  variable_name1 [, variable_name2,… ] ;
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案       例:
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案       
FETCH  authors_cursor  INTO  au_lname, au_fname;
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案 
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案
4、  CLOSE语句
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案   语法:
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案       
CLOSE  cursor_name
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案       例:
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案       
CLOSE authors_cursor;
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案 
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案
5、简单游标提取循环结构与循环终止条件判断
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案   
1> 用%FOUND做循环判断条件的WHILE循环
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案     (
1FETCH  authors_cursor  INTO  au_lname, au_fname ;
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案     (
2WHILE authors_cursor%FOUND LOOP
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案             
-- Concatenate and display the current values in the variables.
从SQL Server 向Oracle 8迁移的技术实现方案

从SQL Server 向Oracle 8迁移的技术实现方案                 DBMS_OUTPUT.ENABLE;
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案             DBMS_OUTPUT.PUT_LINE( ‘Author: ‘ 
|| au_fname || ‘ ‘ || au_lname) ;
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案             
FETCH  authors_cursor  INTO  au_lname, au_fname ;
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案          
END LOOP ;
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案     (
3CLOSE authors_cursor ;
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案 
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案   
2> 用%NOTFOUND做循环判断条件的简单LOOP从SQL Server 向Oracle 8迁移的技术实现方案END LOOP循环
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案     (
1OPEN authors_cursor;
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案     (
2)LOOP
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案             
FETCH  authors_cursor  INTO  au_lname, au_fname ;
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案                 
-- Exit loop when there are no more rows to fetch.
从SQL Server 向Oracle 8迁移的技术实现方案

从SQL Server 向Oracle 8迁移的技术实现方案             
EXIT  WHEN  authors_cursor%NOTFOUND ;
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案             
-- Concatenate and display the current values in the variables.
从SQL Server 向Oracle 8迁移的技术实现方案

从SQL Server 向Oracle 8迁移的技术实现方案             DBMS_OUTPUT.ENABLE;
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案             DBMS_OUTPUT.PUT_LINE( ‘Author: ‘ 
|| au_fname || ‘ ‘ || au_lname) ;
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案          
END LOOP ;
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案     (
3CLOSE authors_cursor ;
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案
3>用游标式FOR循环,如下:
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案
DECLARE
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案                
CURSOR c_HistoryStudents IS
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案                
SELECT id,first_name,last_name
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案                
FROM Students
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案                
WHERE major = ‘History’
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案
BEGIN
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案              
FOR v_StudentData IN c_HistoryStudents LOOP
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案              
INSERT INTO registered_students
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案(student_id,first_name,last_name,department,course)
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案
VALUES(v_StudentData.ID,v_StudentData.first_name, v_StudentData.last_name,’HIS’,301);
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案              
END LOOP;
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案
COMMIT;
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案
END;
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案首先,记录v_StudentData没有在块的声明部分进行声明,些变量的类型是c_HistoryStudents
%ROWTYPE,v_StudentData的作用域仅限于此FOR循环本身;其实,c_HistoryStudents以隐含的方式被打开和提取数据,并被循环关闭。
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案
6、隐式游标SQL%FOUND 与SQL%NOTFOUND
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案        与MSSQL SERVER 一样,ORACLE也有隐式游标,它用于处理INSERT、DELETE和单行的SELECT..INTO语句。因为SQL游标是通过PL
/SQL引擎打开和关闭的,所以OPEN、FETCH和CLOSE命令是无关的。但是游标属性可以被应用于SQL游标,如下:
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案
BEGIN
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案        
UPDATE rooms
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案          
SET number_seats = 100
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案        
WHERE room_id = 9990;
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案
--如果找不相应的记录,则插入新的记录
从SQL Server 向Oracle 8迁移的技术实现方案

从SQL Server 向Oracle 8迁移的技术实现方案        
IF SQL%NOTFOUND THEN
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案            
INSERT INTO rooms(room_id,number_seats)
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案            
VALUES (9990,100)
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案
END IF
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案    
END;
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案
7、示例:
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案
-- Declare the variables to store the values returned by FETCH.
从SQL Server 向Oracle 8迁移的技术实现方案

从SQL Server 向Oracle 8迁移的技术实现方案
-- Declare the CURSOR authors_cursor.
从SQL Server 向Oracle 8迁移的技术实现方案

从SQL Server 向Oracle 8迁移的技术实现方案
DECLARE 
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案   au_lname  
varchar2(40) ;
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案   au_fname  
varchar2(20) ;
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案       
CURSOR  authors_cursor  IS
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案   
SELECT  au_lname, au_fname 
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案     
FROM  authors
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案    
WHERE  au_lname LIKE ‘B%
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案 
ORDER BY  au_lname, au_fname;
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案 
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案
BEGIN
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案   
OPEN authors_cursor;
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案   
FETCH  authors_cursor  INTO  au_lname, au_fname ;
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案   
WHILE authors_cursor%FOUND LOOP
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案      
-- Concatenate and display the current values in the variables.
从SQL Server 向Oracle 8迁移的技术实现方案

从SQL Server 向Oracle 8迁移的技术实现方案          DBMS_OUTPUT.ENABLE;
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案      DBMS_OUTPUT.PUT_LINE( ‘Author: ‘ 
|| au_fname || ‘ ‘ || au_lname) ;
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案      
FETCH  authors_cursor  INTO  au_lname, au_fname ;
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案   
END LOOP ;
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案  
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案   
CLOSE authors_cursor ;
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案
END ;
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案 
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案    
<3>、从SQL SERVER向ORACLE的迁移方案
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案        比较上述SQL代码,在迁移过程中要做如下调整:
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案        (
1)T-SQL对CURSOR的声明在主体代码中,而PL/SQL中对CURSOR的声明与变
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案             量声明同步,都要在主体代码(BEGIN关键字)之前声明,所以在迁移时要
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案             将游标声明提前,MSSQL SERVER的Cursor定义后的参数省去;
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案        (
2)对CUOSOR操作的语法中PL/SQL没有T-SQL里DEALLOCATE CURSOR这一部分,
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案             迁移时要将该部分语句删除。
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案        (
3)PL/SQL 与T-SQL对游标中的循环与循环终止条件判断的处理不太一样,根
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案             据前面的讨论并参考后面对两种语法集进行控制语句对比分析部分的叙述,
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案             建议将T
-SQL中的游标提取循环调整为PL/SQL中的WHILE游标提取循环结
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案             构,这样可保持循环的基本结构大致不变,同时在进行循环终止条件判断时
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案             要注意将T
-SQL中的对@@FETCH_STATUS全局变量的判断调整为对
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案             CURSOR_NAME
%FOUND语句进行判断。
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案        (
4)对于T-SQL,没有定义语句结束标志,而PL/SQL用“;”结束语句。
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案
5)对于原MSSQL SERVER类型的游标,如果游标取出的值没有参与运算的,全部采用FOR循环方式来替换;而对于取出的值还要进行其它运算的,可以采用直接在定义变量位置定义变量。
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案 (
6)MSSQL中对于同一游标重复定义几次的情况在ORACLE中可通过游标变量来解决.如下:
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案MSSQL SERVER 中:
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案
Declare cur_ypdm cursor for
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案
Select * from yp
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案
Open cur_yp
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案
Fetch cur_yp into @yp,@mc …
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案
While @@fetch_status <> -1 
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案
Begin
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案  
If @@fetch_status <> -2 
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案  
Begin
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案    ….
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案  
End
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案  
Fetch cur_yp into @yp,@mc …
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案
End
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案
Close cur_ypdm
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案
Deallocate cur_ypdm
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案..
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案
Declare cur_ypdm cursor for
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案
Select * from yp where condition 1
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案
Open cur_yp
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案
Fetch cur_yp into @yp,@mc …
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案
While @@fetch_status <> -1 
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案
Begin
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案  
If @@fetch_status <> -2 
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案  
Begin
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案    ….
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案  
End
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案  
Fetch cur_yp into @yp,@mc …
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案
End
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案
Close cur_ypdm
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案
Deallocate cur_ypdm
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案..
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案
Declare cur_ypdm cursor for
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案
Select * from yp  where condition 2
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案
Open cur_yp
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案
Fetch cur_yp into @yp,@mc …
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案
While @@fetch_status <> -1 
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案
Begin
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案  
If @@fetch_status <> -2 
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案  
Begin
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案    ….
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案  
End
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案  
Fetch cur_yp into @yp,@mc …
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案
End
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案
Close cur_ypdm
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案
Deallocate cur_ypdm
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案..
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案在程序中,三次定义同一游标cur_yp
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案在迁移过程中,最好先定义一游标变量,在程序中用open打开,如下:
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案
declare
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案  type cur_type 
is ref  cur_type;
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案  cur_yp cur_type;
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案  …
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案
begin
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案  
open cur_yp for select * from yp;
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案  loop
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案    
fetch cur_yp into yp,mc …
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案    
Exit When cur_yp%NotFound;
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案    ….
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案  
end loop;
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案  
close cur_yp;
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案  
open cur_yp for select * from yp where condition1;
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案  loop
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案    
fetch cur_yp into yp,mc …
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案    
Exit When cur_yp%NotFound;
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案    ….
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案  
end loop;
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案  
close cur_yp;
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案  
open cur_yp for select * from yp where condition2; 
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案  loop
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案    
fetch cur_yp into yp,mc …
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案    
Exit When cur_yp%NotFound;
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案    ….
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案  
end loop;
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案  
close cur_yp;
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案
end;
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案(
7)请注意,游标循环中中一定要退出语名,要不然执行时会出现死循环。
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案
<> 存储过程/函数
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案    
<1>、SQL SERVER端语法说明
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案    
1、语法:
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案           
CREATE PROC[EDURE] [owner.]procedure_name [;number]
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案             
[ (parameter1[, parameter2][, parameter255])]
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案             
[ {FOR REPLICATION} | {WITH RECOMPILE}
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案             [ {[WITH
] | [ , ] } ENCRYPTION ] ]
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案           
AS
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案             sql_statement 
[从SQL Server 向Oracle 8迁移的技术实现方案n]
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案           其中,Parameter 
= @parameter_name datatype [=default] [output]
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案 
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案       说明:T
-SQL中存储过程的结构大致如下
从SQL Server 向Oracle 8迁移的技术实现方案
从SQL Server 向Oracle 8迁移的技术实现方案           
CREATE PROCEDURE procedure_name 
从SQL Server 向Oracle 8迁移的技术实现方案
 worker_syn;

相关文章:

  • 2021-11-17
  • 2021-07-16
  • 2021-11-19
  • 2021-11-19
  • 2021-11-19
  • 2021-09-17
猜你喜欢
  • 2022-01-24
  • 2022-03-03
  • 2021-12-31
  • 2021-09-12
  • 2021-12-20
  • 2021-05-26
  • 2021-07-05
相关资源
相似解决方案