分享
 
 
 

Oracle 和 MIcrosoft SQL 的不同

王朝oracle·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

还是有很多的不同,转贴如下:http://www.bristle.com/Tips/SQL.htm#Oracle%20Tips

Table of Contents:

Oracle Tips

SQL Tips

SELECT * and more

Materialized View

PL/SQL Tips

SQL Navigator Tips

See Also

MS SQL Server Tips

SQL Tips

Dynamic SQL in a Stored Procedure

SQL Enterprise Manager Tips

Keyboard Shortcuts

SQL Generating SQL

See Also

Differences Between Oracle and MS SQL Server

Concepts and Terminology

Data Types

Limits

Operators

Built-In Functions

Differences in SQL Syntax

Differences in SQL Semantics

Differences in Managing Databases

Differences in Managing Database Objects

Differences in Managing Users

Differences in Integration with MS ADO, RDO, etc.

Miscellaneous Differences

See Also

Details of Tips:

Oracle Tips

SQL Tips

This section contains tips on standard SQL (Structured Query Language) statements in Oracle.

SELECT * and more

Last Updated: 6/6/1999

Applies to: Oracle 7.3, 8 (and probably earlier versions)

To select all columns of a table:

select * from table

However, to select all real columns, plus a pseudo-column like "user":

select table.*, user from table

The following does not work:

select *, user from table

--Fred

Materialized View

Last Updated: 1/7/2002

Applies to: Oracle 8+

Oracle 8i introduced a new feature called a "materialized view". You define it just like any other view, except that you add the keyword MATERIALIZED:

CREATE MATERIALIZED VIEW view_name

A materialized view is like a combination of a table and a view. Like a view, it is defined as a logical view into the data of one or more tables. When you update the tables, subsequent queries of the view see the updated data. However, like a table, its data is stored in the database. Also, like a table, it is faster if you define indexes for it.

A regular view is stored as a mapping of data from tables. When you modify the data in the tables, the view is completely ignored. When you access the view, it joins the data currently in the tables, and returns the data you requested. A materialized view is stored as such a mapping along with a copy of the actual data from the tables. When you modify the data in the tables, the view's copy of the data is also updated. When you access the view, the data is drawn directly from the copy.

Thus a materialized view makes table updates a little slower, but makes view queries much faster. It also consumes additional space in the database.

You could accomplish the same effect by defining an additional table instead of the view, and using triggers on the component tables to update it each time they are changed. However, using a materialized view is more convenient, more efficient, and clearer to the next person who has to maintain your database.

Thanks to Andy Glick for sending me a sample of a materialized view from his application!

--Fred

PL/SQL Tips

This section contains tips on PL/SQL statements -- the Oracle "procedural language" superset of SQL that you use to write stored procedures.

SQL Navigator Tips

This section contains tips on the SQL Navigator tool by Quest Systems. It is a graphical front end to the Oracle database, allowing you to create, delete, view, and modify all Oracle objects: tables, views, stored procedures, etc.

See Also

Last Updated: 6/6/1999

Applies to: Oracle 7.3+

The following are good sources of info about Oracle:

Koch, George, and Kevin Loney. Oracle 8, The Complete Reference. Berkeley CA: For Oracle Press by Osborne McGraw-Hill, 1997. ISBN 0-07-882396-X.

This book includes introductory database concepts as well as a complete reference to Oracle SQL and PL/SQL statements. The companion CD contains a complete copy of the book, so you can read it on-line, search it, etc.

Any of the O'Reilly books. I've been very impressed by all of the O'Reilly books since my early Unix and X-Windows days in the 80's, and they have a complete series on Oracle, covering PL/SQL, the standard packages, etc.

--Fred

MS SQL Server Tips

SQL Tips

This section contains tips on SQL (Structured Query Language) statements in MS SQL Server.

Dynamic SQL in a Stored Procedure

Last Updated: 2/7/1999

Applies to: MS SQL Server 6.5+

A typical tradeoff for a database application is dynamic SQL (SQL commands embedded in the application -- for flexibility) vs. stored procedures (pre-compiled SQL procedures stored in the database and invoked by name from the application -- for speed and control over what SQL statements get executed). However, you can have the best of both worlds by using dynamic SQL inside your stored procedures. In a stored procedure, you can use the EXEC statement to execute a string of SQL statements that you built dynamically in the stored procedure or read from the database or any other data source.

Thanks to Steve Rhoads for this tip.

--Fred

SQL Enterprise Manager Tips

This section contains tips on the SQL Enterprise Manager tool. It is a graphical front end to the database, allowing you to create, delete, view, and modify all MS SQL Server objects: tables, views, stored procedures, etc.

Keyboard Shortcuts

Last Updated: 6/20/1999

Applies to: MS SQL Server 7.0

Here is a list of some of the more useful shortcut keys in SQL Enterprise Manager.

Key

Function

F1

Help on SQL Enterprise Manager

Shift-F1

Help on syntax of current SQL statement

Ctrl-E

Execute selected text in Query Analyzer

Ctrl-R

Hide/show results pane in Query Analyzer

Obviously, this list is far from complete. Please feel free to mail me your favorite shortcuts. I'll add to this list as time permits.

See also: Windows Shortcut Keys

--Fred

SQL Generating SQL

Last Updated: 2/7/1999

Applies to: MS SQL Server 6.5+

To automate tedious database maintenance chores, you can use SQL statements to generate SQL statements that do your maintenance for you. For example, to change the permissions on all stored procedures in a database, you can use a SELECT statement like:

SELECT 'GRANT EXECUTE ON ' + name + ' TO PUBLIC

GO'

FROM sysobjects

WHERE type = 'P'

The output of this SELECT statement is a series of alternating GRANT and GO statements, one pair per stored procedures, for all stored procedures in the database. Then you copy that output as your next set of commands and execute it.

Note: Be sure to leave the line break before the word GO. It is required to start on a new line, after the GRANT statement.

Thanks to Steve Rhoads for this tip.

--Fred

See Also

Last Updated: 6/6/1999

Applies to: MS SQL Server 6.5+

The following are good sources of info about MS SQL Server:

MS SQL Server books on the MSDN Library CD.

--Fred

Differences Between Oracle and MS SQL Server

Concepts and Terminology

Last Updated: 4/24/2001

Applies to: Oracle 7.3+, MS SQL Server 6.5+

The following table shows some differences in concepts and terminology between Oracle and MS SQL Server:

Concept/Term

Oracle

MS SQL Server

Database engine

database

database server

Database (collection of tables)

schema

database

Roles/Groups

roles

groups

Database adminstrator account, database owner

dba

sa, dbo

Data about the database

Data Dictionary

- one per server

Database Catalog

- one per database

"master" database

- one per server

Blocks and extents

blocks and extents

pages and extents

Network software

SQL*Net

Net-library

Data stream protocol

Transparent Network Substrate (TNS)

Tabular Data Stream (TDS)

Case sensitivity of names of tables, columns, etc.

case-insensitive

depends on character sort order, default is case-insensitive

Synonyms

supported

not supported

Readonly transaction

supported

not supported

--Fred

Data Types

Last Updated: 6/6/1999

Applies to: Oracle 7.3+, MS SQL Server 6.5+

The following table shows the corresponding data types in Oracle and MS SQL Server:

Data Type

Oracle

MS SQL Server

Fixed Length String

CHAR(n)

- limit 2KB

CHAR(n), CHARACTER(n)

- limit 255 (6.5)

- limit 8KB (7.0)

Variable Length String

VARCHAR2(n), VARCHAR(n)

- limit 4KB in a column

- limit 32KB in a variable

- VARCHAR is obsolete

VARCHAR(n), CHAR VARYING(n), CHARACTER VARYING(n)

- limit 255 (6.5)

- limit 8KB (7.0)

Integer

INTEGER, INTEGER(n), SMALLINT

INTEGER (4 bytes),

INT (4 bytes),

SMALLINT (2 bytes),

TINYINT (1 byte),

BIT (1 bit)

Fixed Point

NUMBER, NUMBER(n), NUMBER(n,d),

FLOAT, FLOAT(n), FLOAT(n,d)

NUMERIC, NUMERIC(n), NUMERIC(n,d),

DECIMAL, DECIMAL(n), DECIMAL(n,d),

DEC, DEC(n), DEC(n,d),

MONEY, SMALLMONEY

Floating Point

DECIMAL

FLOAT, FLOAT(n), DOUBLE PRECISION,

REAL,

Date

DATE

DATETIME, SMALLDATETIME, TIMESTAMP

- TIMESTAMP auto-updated

Binary

RAW(n)

- limit 255 bytes

BINARY(n), VARBINARY(n), BINARY VARYING(n)

- limit 255 (6.5)

- limit 8KB (7.0)

Large String

LONG, LONG VARCHAR

- limit 2GB

- limit one per table row

CLOB

- limit 4GB

TEXT

- limit 2GB

Large Binary

LONG RAW

- limit 2GB

- limit one per table row

BLOB

- limit 4GB

IMAGE

- limit 2GB

Multi-byte chars

NCHAR(n)

NVARCHAR(n)

NCLOB

- same limits as CHAR, VARCHAR, CLOB

NCHAR(n), NATIONAL CHAR(n), NATIONAL CHARACTER(n)

NVARCHAR(n), NATIONAL CHAR VARYING(n), NATIONAL CHARACTER VARYING(n)

NTEXT, NATIONAL TEXT

- same limits as CHAR, VARCHAR, TEXT

OS File

BFILE

<not supported>

Row Identifier

implicit ROWID column

(use an IDENTITY column)

Secure OS Label

MLSLABEL, RAW MLSLABEL

<not supported>

128-bit Unique Number

(UUID, GUID)

<not supported>

UNIQUEIDENTIFIER (version 7.0 only)

--Fred

Limits

Last Updated: 6/14/2000

Applies to: Oracle 7.3+, MS SQL Server 6.5+

The following table shows differences in limits of Oracle and MS SQL Server:

Description

Oracle

MS SQL Server

Columns per table

1000

250 (6.5)

1024 (7.0)

Row size

unlimited

1962 bytes (6.5)

8060 bytes (7.0)

- includes pointers, but not data, for TEXT and IMAGE columns

LONG and LONG RAW columns per row

1 (must be last column)

unlimited (16-byte pointer per)

LOB, TEXT, and IMAGE columns per row

unlimited (16-byte pointer per)

unlimited (16-byte pointer per)

Clustered indexes per table

1

1

Non-clustered indexes per table

unlimited

249

Columns per index

16

16

Index row size

2K bytes

900 bytes

Identifier Length

30 chars

30 chars (6.5)

128 chars (7.0)

Tables per SELECT

unlimited

16 (6.5)

256 (7.0)

Source code per stored procedure

64KB (6.5)

250MB (7.0)

Data type limits

(see Data Types)

--Fred

Operators

Last Updated: 6/7/1999

Applies to: Oracle 7.3+, MS SQL Server 6.5+

Most operators are the same in Oracle and MS SQL Server. Here are some that differ:

Description

Oracle

MS SQL Server

String concatenation

string1 || string2

string1 + string2

--Fred

Built-In Functions

Last Updated: 6/7/1999

Applies to: Oracle 7.3+, MS SQL Server 6.5+

Oracle and MS SQL Server offer many of the same built-in functions. For example, they both offer ABS, EXP, ROUND, UPPER, LOWER, AVG, COUNT, SUM, ASCII, etc. The following table shows some of the corresponding functions that don't have the same name. For a more complete list, see "Migrating Oracle Applications to SQL Server"

Description

Oracle

MS SQL Server

Smallest integer >= n

CEIL

CEILING

Modulus

MOD

%

Truncate number

TRUNC

<none>

Max or min number or string in list

GREATEST,

LEAST

<none>

Translate NULL to n

NVL

ISNULL

Return NULL if two values are equal

DECODE

NULLIF

String concatenation

CONCAT(str1,str2)

str1 + str2

Convert ASCII to char

CHR

CHAR

Capitalize first letters of words

INITCAP

<none>

Find string in string

INSTR

CHARINDEX

Find pattern in string

INSTR

PATINDEX

String length

LENGTH

DATALENGTH

Pad string with blanks

LPAD,

RPAD

<none>

Trim leading or trailing chars other than blanks

LTRIM(str,chars),

RTRIM(str,chars)

<none>

Replace chars in string

REPLACE

STUFF

Convert number to string

TO_CHAR

STR, CAST

Convert string to number

TO_NUMBER

CAST

Get substring from string

SUBSTR

SUBSTRING

Char for char translation in string

TRANSLATE

<none>

Date addition

ADD_MONTH or +

DATEADD

Date subtraction

MONTHS_BETWEEN or -

DATEDIFF

Last day of month

LAST_DAY

<none>

Time zone conversion

NEW_TIME

<none>

Next specified weekday after date

NEXT_DAY

<none>

Convert date to string

TO_CHAR

DATENAME, CONVERT

Convert string to date

TO_DATE

CAST

Convert date to number

TO_NUMBER(TO_CHAR(d))

DATEPART

Date round

ROUND

CONVERT

Date truncate

TRUNC

CONVERT

Current date

SYSDATE

GETDATE

Convert hex to binary

HEXTORAW

CAST

Convert binary to hex

RAWTOHEX

CONVERT

If statement in an expression

DECODE

CASE ... WHEN

or COALESCE

User's login id number or name

UID, USER

SUSER_ID, SUSER_NAME

User's database id number or name

UID, USER

USER_ID, USER_NAME

Current user

USER

USER

--Fred

Differences in SQL Syntax

Last Updated: 3/21/2001

Applies to: Oracle 7.3+, MS SQL Server 6.5+

The following table shows the different syntax used in Oracle and MS SQL Server for the same SQL operations:

Description

Oracle

MS SQL Server

Left Outer Join

WHERE column1 = column2(+)

FROM table1 LEFT OUTER JOIN table2 ON table1.column1 = table2.column2

Note: The following syntax is also supported, but is no longer recommended:

WHERE column1 *= column2

Right Outer Join

WHERE column1(+) = column2

FROM table1 RIGHT OUTER JOIN table2 ON table1.column1 = table2.column2

Note: The following syntax is also supported, but is no longer recommended:

WHERE column1 =* column2

Full Outer Join

FROM table1 FULL OUTER JOIN table2 ON table1.column1 = table2.column2

SELECT without FROM

SELECT 'hello world' FROM DUAL

SELECT 'hello world'

SELECT data into a table

CREATE TABLE AS SELECT ...

SELECT ... INTO

Intersection of 2 SELECTS

SELECT ... INTERSECT SELECT ...

SELECT ... WHERE EXISTS (SELECT ...)

Subtraction of 2 SELECTS

SELECT ... MINUS SELECT ...

SELECT ... WHERE NOT EXISTS (SELECT ...)

INSERT into a JOIN

INSERT INTO SELECT ...

Create a VIEW and INSERT INTO it.

UPDATE data in a JOIN

UPDATE SELECT...

Create a VIEW and INSERT INTO it.

UPDATE one table based on criteria in another table

<not supported>

UPDATE table FROM ...

DELETE rows from one table based on criteria in another table

<not supported>

DELETE FROM table FROM ...

DROP a column from a table

<not supported until Oracle 8i>

ALTER TABLE table_name DROP COLUMN column_name

Readonly VIEW

CREATE VIEW ... WITH READONLY

GRANT SELECT ...

Save point

SAVEPOINT

SAVE TRANSACTION

Table lock

LOCK TABLE...IN SHARE MODE

SELECT...table_name (TABLOCK)

Exclusive table lock

LOCK TABLE...IN EXCLUSIVE MODE

SELECT...table_name (TABLOCKX)

Reserving index space

PCTFREE=0

FILLFACTOR=100

Declaring a local variable

DECLARE varname type;

DECLARE @varname type

Initializing a local variable

DECLARE varname type := value;

<not supported>

Declaring a constant

DECLARE varname CONSTANT type := value;

<not supported>

Assigning to a variable

varname := value

SELECT value INTO varname

SET @varname = value

SELECT @varname = value

Assigning to a variable from a cursor

FETCH cursorname INTO varname

FETCH NEXT FROM cursorname INTO varname

Declaring a cursor

CURSOR curname (params)

IS SELECT ...;

DECLARE curname CURSOR FOR SELECT ...

If statement

IF ... THEN

ELSIF ... THEN

ELSE

ENDIF

IF ...

BEGIN ... END

ELSE BEGIN ... END

While loop

WHILE ... LOOP

END LOOP

WHILE ...

BEGIN ... END

Other loops

FOR ... END LOOP

LOOP ... END LOOP

<not supported>

Loop exit

EXIT, EXIT WHEN

BREAK, CONTINUE

Print output

DBMS_OUTPUT.PUT_LINE

PRINT

Raise error

RAISE_APPLICATION_ERROR

RAISERROR

Statement terminator

Semi-colon (;)

<none required>

Thanks to Tom Johnston for catching a mistake in this tip. I had the FROM DUAL in the wrong column.

--Fred

Differences in SQL Semantics

Last Updated: 6/6/1999

Applies to: Oracle 7.3+, MS SQL Server 6.5+

The following table shows some semantic differences between Oracle and MS SQL Server:

Description

Oracle

MS SQL Server

Commit

Explicit COMMIT statement required

Automatic commit unless SET IMPLICIT_TRANSACTIONS ON

Reading uncommitted data

Database does temporary internal rollback to reconstruct most recently committed data for reader.

Depending on options, reader as allowed to read uncommitted data, or is forced to wait for writer to commit or rollback.

Releasing cursor data

CLOSE CURSOR releases all data. You can't re-open.

CLOSE CURSOR does not release data. You must explicitly call DEALLOCATE CURSOR. Until then, you can re-open the cursor.

Implicit data conversion in a statement like the following where vc is a column of type VARCHAR2:

SELECT * FROM person

WHERE vc =123

As each row is fetched from the table, an attempt is made to convert it to a number for the comparison with 123. If any row contains a value that cannot be converted to a number, a runtime error occurs.

The number 123 is converted to the string '123' once, and then the data is fetched from the table. If any row contains a value that cannot be converted to a number, it simply doesn't match '123' and is skipped without any error.

Conversion to NULL

Setting a VARCHAR2 column to '' (the empty string) makes it NULL.

Setting a VARCHAR column to '' makes it the empty string (not NULL).

--Fred

Differences in Managing Databases

Last Updated: 6/6/1999

Applies to: Oracle 7.3+, MS SQL Server 6.5+

The following table shows some differences in how databases are managed in Oracle and MS SQL Server:

Description

Oracle

MS SQL Server

Model database

No model database

Newly created databases inherit characteristics (users, etc.) from the special database named "model".

--Fred

Differences in Managing Database Objects

Last Updated: 6/6/1999

Applies to: Oracle 7.3+, MS SQL Server 6.5+

The following table shows some differences in how database objects (tables, views, stored procedures, etc.) are managed in Oracle and MS SQL Server:

Description

Oracle

MS SQL Server

Fully qualified name

[schema.]table

[schema.]view

[[[server.][database].][owner].]table

[[[server.][database].][owner].]view

Temp tables

Pre 8i: Temporary tables must be deleted explicitly

8i+: CREATE GLOBAL TEMPORARY TABLE

#table -- Any table named starting with a pound sign (#) is automatically deleted when the user logs off or the procedure ends.

##table -- Same as above, except that the table is accessible to other users.

Re-creating an object

CREATE OR REPLACE ...

DROP ...

CREATE ...

Create view before dependent tables

CREATE FORCE VIEW

Not supported. Tables used by view must exist before view can be created.

--Fred

Differences in Managing Users

Last Updated: 6/6/1999

Applies to: Oracle 7.3+, MS SQL Server 6.5+

The following table shows some differences in how users are managed in Oracle and MS SQL Server:

Description

Oracle

MS SQL Server

Membership in groups

Each user can be a member of any number of groups.

Each user can be a member of only one group other than "public".

--Fred

Differences in Integration with MS ADO, RDO, etc.

Last Updated: 6/6/1999

Applies to: Oracle 7.3+, MS SQL Server 6.5+

The following table shows the different techniques used in Oracle and MS SQL Server to interact with MS ADO, RDO, etc.:

Description

Oracle

MS SQL Server

Return a recordset to the caller

Return a handle to a cursor.

For more info: See MS KB article Q174679.

SELECT with no INTO clause;

Multiple such SELECTs return multiple recordsets

--Fred

Miscellaneous Differences

Last Updated: 6/6/1999

Applies to: Oracle 7.3+, MS SQL Server 6.5+

The following table shows miscellaneous differences between Oracle and MS SQL Server:

Description

Oracle

MS SQL Server

Generate unique numbers

CREATE SEQUENCE

IDENTITY column of a table

Cascaded DELETE

DELETE CASCADE ...

(use triggers)

Call a user-defined function from a SQL statement (as column of SELECT or expression in WHERE clause)

supported

not supported

--Fred

See Also

Last Updated: 3/3/2001

Applies to: Oracle 7.3+, MS SQL Server 6.5+

The following are good sources of info about differences between Oracle and MS SQL Server:

Bowman, Judith S., Sandra L. Emerson, and Marcy Darnovsky. The Practical SQL Handbook. Addison-Wesley Publishing Company, 1993. ISBN 0-201-62623-3.

This book gives a good introduction to SQL, with a slight emphasis on Sybase, but with a useful summary in the back of the syntax for each of the SQL statements (SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, GRANT, REVOKE, etc.) for each of the major databases (Oracle, Sybase, DB2, Informix, Ingres, etc.) The book pre-dates MS SQL Server, but the Sybase info is a good approximation since MS SQL Server is a derivative of Sybase.

"Migrating Oracle Applications to SQL Server" on MSDN CD, and at MS TechNet Web site:

http://www.microsoft.com/TechNet/sql/Tools/Sqldevkt/ORCL2SQL.asp

Microsoft clearly intended this to be used in one direction only, but I've used it quite successfully to translate my SQL Server knowledge to Oracle as well.

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有