全面对比TSQL与PLSQL.docx
- 文档编号:24081644
- 上传时间:2023-05-24
- 格式:DOCX
- 页数:12
- 大小:22.99KB
全面对比TSQL与PLSQL.docx
《全面对比TSQL与PLSQL.docx》由会员分享,可在线阅读,更多相关《全面对比TSQL与PLSQL.docx(12页珍藏版)》请在冰豆网上搜索。
全面对比TSQL与PLSQL
全面对比T-SQL与PL/SQL
2010-8-11 来源:
cnblog 作者:
and 我要评论
投稿
打印
MSN推荐
博客引用
大|中|小
导读:
本文中,作者将对SQLServer的T-SQL与Oracle的PL/SQL进行一个全面的对比,其中包括数据类型、函数、游标以及存储过程等内容。
关键词:
SQLServerT-SQLOraclePL/SQL存储过程
正在加载数据...
1)数据类型
TSQL
PL/SQL
numeric(p,s)
numeric(p,s)orNUMBER(p,s)
decimal(p,s)
decimal(p,s)orNUMBER(p,s)
char(m)
Char(m)
varchar(m)
varchar2(m)
datetime
date
记录
Record
表字段
%type
表记录
%rowtype
表
Table
自动增长变量
AUTOINCREMENT
2)变量声明、赋值与引用
TSQL
PL/SQL
声明
declare
@ls_casherchar
(1),
@ln_payAmtdecimal(14,4)
declare
on_hand INTEGER;
ls_casherchar
(1);
赋值
select@ls_casher='A'orset@is=’A’
ls_casher:
=’A’;
引用
if@ls_casher='A'
…
ifls_casher='A'then
…
在SQL语句中赋值
SELECT@ls_casher=salFROMempWHEREempno=emp_id;
SELECTsalINTOls_casherFROMempWHEREempno=emp_id;
在SQL语句中引用
SELECT*FROMempWHEREsal=@ls_casher;
SELECT*FROMempWHEREsal=ls_casher;
3)函数与操作符
字符串
TSQL
PL/SQL
连接
+
||
TRIM
LTRIM、RTRIM
SUBSTRING
SUBSTR、SUBSTRB
INSTR、INSTRB
right(str,n)
substr(str,-n)
日期
TSQL
PL/SQL
系统日期
getdate()
SYSDATE
空值判断与处理
TSQL
PL/SQL
判断
ISNULL
ISNULL
空值替换
Isnull(para,0)
NVL(para,0)
REPLACE(old_string,NULL,my_string)
转换
TSQL
PL/SQL
字符->日期
Convert(datetime,expr,style)
To_Date(format,expr)
字符<-日期、数值
Convert(char(n),expr,style)
To_char(expr,format)
数值
To_Number()
语句
TSQL
PL/SQL
statementblock
BEGIN...END
BEGIN...END;
conditional
1) IF…ELSE…
2) IF…ELSEIF…else…
3) CASE
1)IF..then...ELSE…endif;
2)If…then…
elsif…else…endif
3)decode
Repeat
WHILEBoolean_expression
{statement_block}
[BREAK]
{statement_block}
[CONTINUE]
1)Loop…exit;…endloop;
2)loop…exitwhen…endloop;
3)WHILEconditionLOOP
sequence_of_statements;
EXITWHENboolean_expression;
ENDLOOP;
3)for…in[reverse]…loop
…
endloop;
GOTO
GOTOlabel
…
label:
…
GOTOlabel;
…
<
…
Exitsunconditionally
RETURN
Return;
Setsadelayforstatementexecution
WAITFOR
Comment
--
/*…*/
--
/*…*/
PRINTstring
Setserveroutputon
dbms_output.put_line(string);
RAISERROR
RAISERROR
EXECUTE
EXECUTE
NULLstatement
NULL;
4)游标
TSQL
PL/SQL
DECLARE
DECLAREcursor_nameCURSOR
[LOCAL|GLOBAL]
[FORWARD_ONLY|SCROLL]
[STATIC|KEYSET|DYNAMIC|FAST_FORWARD]
[READ_ONLY|SCROLL_LOCKS|OPTIMISTIC]
[TYPE_WARNING]
FORselect_statement
[FORUPDATE[OFcolumn_name[,...n]]]
DECLARE
CURSORcursor_nameIS
SELECT_statement;
open
Opencursor_name
Opencursor_name;
Fetch
Fetchcursor_nameinto
var1,var2…
Fetchcursor_nameinto
var1,var2…
||
%rowtype_var;
Close
Closecursor_name
Closecursor_name;
Attribute
@@FETCH_STATUS
@@CURSOR_ROWS
CURSOR_STATUS
%found
%notfound
%isopen
%rowcount
DEALLOCATE
DEALLOCATEcursor_name
隐式cursor
Select…into(仅可处理单行记录)
5)触发器
TSQL
PL/SQL
创建
CREATETRIGGERtrigger_name
ONtable
[WITHENCRYPTION]
{FOR{[DELETE][,][INSERT][,][UPDATE]}
AS
sql_statement[...n]
}
Createorreplacetriggert_name
{before|after}{insert|update|delete}
ontable_name
[foreachrow[whenconditional]
…
类型(按触发级别和时序)
语句
after
行或语句
beforeorafter
访问数据操纵行的值
通过表Inserted、Deleted访问
通过记录:
New、:
Old访问,仅可用于行级触发器
谓词/函数/属性
Inserting、updating、deleteing
Updating(col)
Update(col)
使能
Altertabletabname {disable|enable}trigger {t_name|all}
Altertriggert_name{disable|enable}
限制
作为触发语句的一部分,不可用事务控制命令
不能声明和使用LONG、LONGRAW变量和列
删除
Droptriggert_name
Droptriggert_name;
6)过程
TSQL
PL/SQL
创建
CREATEPROCEDURE]p_name
[{@parameterdata_type}[VARYING][=default][OUTPUT]][,...n]
[WITH
{
RECOMPILE|ENCRYPTION
|RECOMPILE,ENCRYPTION
}
]
AS
sql_statement[...n]
Createorreplaceprocedurep_name
[Para1{in|out|inout}datatype[,…]
[{:
=|default}default_value]]
{IS|AS}
…
查询
删除
DROPPROCEDUREp_name
DROPPROCEDUREp_name;
调用
EXECp_name[para1[,…]]
P_name[(para1[,…])];
参数
按位置传递
1)按位置传递
2)带名传递
P_name(para1=>var1);
debit_account(amount=>500,acct_id=>10261);
7)数据字典/系统表
TSQL
PL/SQL
系统对象表
Dbo.sysobjects
User_source、User_objects(OBJ)、User_tables(TABS)、User_triggers、ALL_tables、All_View、All_catalog、All_objects
对象脚本
sp_helptext
DESC、ALL_source
用户表
Sysusers
All_users
表列
All_tab_columns
依赖
All_dependencies
字典表说明
DICT
8)SQL
TSQL
PL/SQL
Select
Select@var=
Selectvalueintovarfromdual
Insert
insert/insertinto
insertinto
Delete
比较
Any,some,all
集合
Union、Unionall、Intersect、Minus、
9)全局变量
TSQL
PL/SQL
语句执行成功
error
SQLCODE
select是否有结果
exists
select...into+SQL%FOUND
10) 命令行查询工具
ISQL
SQLPLUS
读取、执行SQL文件
Isql–Usa–Ppass–Shost–ifile
sqlplus[-s]user/pass@db-@filename
11) 杂项
TSQL
PL/SQL
锁
在SQL语句中
Insert…Withtablock
Insert…WithTablockx
Select…forupdate
Select…forreadonly
独立语句
settranscationisolationleveltoReaduncommited
在SQL语句中
select…forupdateof…;
独立语句
locktabletabnameinrowsharemode;
locktabletabnameinshareexclusivemode;
用户连接数
数据库文件
Device
Tablespace
CREATETABLESPACEtestdbDATAFILE'C:
\ORANT\DATABASE\testdb.ORA'SIZE20MAUTOEXTENDONNEXT2M;
CREATEROLLBACKSEGMENT"RB_TESTDB"TABLESPACE"TESTDB";
ALTERROLLBACKSEGMENT"RB_TESTDB"ONLINE;
显示DML执行计划
Showplan
Explainplan
保留点
♦ SavetranscationSp_name
♦ ROLLBACKTRANSACTIONpercentchanged
♦ SavepointSp_name
♦ Rollbacktosavepointsp_name
对模式对象改名
Rename
分析对象
Analyze
Sp_help?
1.selectinto语法
现在有表
tablea
(
cola int ,
colb varchar(20)
)
要把tablea中满足条件(cola<100)的记录生成新的表tableb。
在mssqlserver可以直接用selectinto语法:
select * into tableb
where cola < 100
在oracle中语法如下:
create table tableb
as
(
select * from tablea
where cola <100
)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 全面 对比 TSQL PLSQL