Sql Server和Oracle语法对比
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1create table SYS.CMS_CASE_FEE(
CASE_ID NUMBER(15,0) NOT NULL,
SOURCE_KIND nvarchar2(1) NOT NULL,
SEQ_NO NUMBER(15,0) NOT NULL ,
FEE_KIND1 nvarchar2(5) NULL,
FEE_AMT1 NUMBER(15,1) NULL,
FEE_KIND2 nvarchar2(5) NULL,
FEE_AMT2 NUMBER(15,1) NULL,
FEE_KIND3 nvarchar2(5) NULL,
FEE_AMT3 NUMBER(15,1) NULL,
PRIMARY KEY(CASE_ID,SEQ_NO,SOURCE_KIND) )
2栏位自增:
1 创建表(create table)
create table test
(
autoid number(10,0)
......
CONSTRAINT test PRIMARY KEY(autoid)
)
2 建立序列(create sequence)
create sequence seq_test_autoid increment by 1 start with 1 3 插入数据(insert data)
insert into test values(seq_test_autoid.nextval,......)
3Oracle 中的表名和列名可以包括字母,数字和下划线,名字长度为1-30个字符.
4Oracle 中定义变量及变量使用:
declare
var1 number;
var2 nvarchar2(10):='test';--初始化
var3 nvarchar2(10);
begin
--处理语句
select 'hello' into var3 from dual;
var3:='test';
insert into tablename(......) values(var1,var2,var3); end;
中传多个SQL语句到Oracle中执行:
begin
--执行语句
insert into tablename(......) values(var1,var2,var3); insert into tablename(......) values(var1,var2,var3); end;
6在执行insert语句时,如果db中的栏位类型为data类型,不能像sql server中那样insert字符类型的数据,
要将此转化为date类型,才可进行新增操作
如:
sql server:
insert into table1(clomn1,clomn2)values(12,'2006/01/02')
orcal:
insert into
table1(clomn1,clomn2)values(12,to_date('2006/01/02','yyyy/mm/dd'))
0.07Oracle 中文占3个字节问题:
1 存在表中的欄位類型為Nvarchar2的中文还是占2个字节.
select lengthb(strword) from word_test --结果:8
( 表word_test存有一条记录,strword2栏位值位:"汉汉汉汉",lengthb()为取字节长度函数).
2 存在表中的欄位類型為varchar2(varchar)的中文还是占3个字节.
select lengthb(strword) from word_test --结果:12
( 表word_test存有一条记录,strword2栏位值位:"汉汉汉汉",lengthb()为取字节长度函数).
3 字符串中中文占3个字节.
select lengthb('汉汉汉汉') from word_test --结果:12
4 按字符长度处理栏位(如:SUBSTR()等函数)处理栏位和中文字串时处理方式一样.
select SUBSTR('汉汉汉汉',1,3) from dual --结果:汉汉汉
select SUBSTR(strword,1,3) from word_test --结果:汉汉汉
5 按字节长度处理栏位(如:SUBSTRB()按字节截取)处理栏位和中文字串时方式有差异:
select SUBSTRB('汉汉汉汉',1,4) from dual --结果:汉
select SUBSTRB(strword,1,4) from word_test --结果:汉汉(strword
欄位類型位Nvarchar2)
select SUBSTRB(strword,1,4) from word_test --结果:汉汉(strword 欄位類型位varchar2(varchar))
8grant create any table to cms --解決建立臨時表的權限問題create or replace procedure cms.lucytest4 is
begin
execute immediate 'CREATE GLOBAL TEMPORARY TABLE lucyT4 (
pid nvarchar2(3),
pname nvarchar2(10)
) ON COMMIT delete ROWS';
execute immediate 'insert into lucyT4 values(''001'',''A1'')'; execute immediate 'SELECT * FROM lucyT4';
--execute immediate 'DELETE * FROM lucyT4';
execute immediate 'DROP TABLE lucyT4';
end;
go
begin
cms.lucytest4();
end;
9查询表中TREE_ID栏位最大的值,然后加1,产生最大的ID:
select right('00000' + cast((select isnull(max(TREE_ID),0) + 1 from CMS_Problem_Data) as varchar),5) AS TREE_ID
转换方式:
SELECT
SUBSTR('00000' || TO_CHAR(NVL(MAX(TREE_ID),0) + 1)
,LENGTH('00000' || TO_CHAR(NVL(MAX(TREE_ID),0) + 1))-4
,LENGTH('00000' || TO_CHAR(NVL(MAX(TREE_ID),0) + 1))
) AS TREE_ID
FROM
CMS_PROBLEM_DATA
10栏位排序:
SQL Server 以某栏位升序排序,则会将栏位值为"Null"的数据排在最前面. 而 Oracle 以某栏位升序排序,则会将栏位值为"Null"的数据排在最后面.
SQL Server中的查询条件不区分全角,半角;
Oracle中的查询条件区分全角,半角.
如条件:WHERE USER_ID = '730097'或WHERE USER_ID = '730097'