T-SQL与PL/SQL的比较

  以前一直用mssql 做开发,最近的项目都Oracle,T-SQL与PL/SQL比较下怎么样呢,从网上搜索下相关的资料,整理如下:

1)数据类型

TSQL

PL/SQL

numeric(p,s)

numeric(p,s) or NUMBER(p,s)

decimal(p,s)

decimal(p,s) or NUMBER(p,s)

char(m)

Char(m)

varchar(m)

varchar2(m)

datetime

date

记录

Record

表字段

%type

表记录

%rowtype

Table

自动增长变量

AUTOINCREMENT

2)变量声明、赋值与引用

TSQL

PL/SQL

声明

declare

@ls_casher char(1),

@ln_payAmt decimal(14,4)

declare

on_hand INTEGER;

ls_casher char(1);

赋值

select @ls_casher = 'A'

ls_casher:=’A’;

引用

if @ ls_casher = 'A'

if ls_casher = 'A' then

在SQL语句中赋值

SELECT @ls_casher=sal FROM emp WHERE empno = emp_id;

SELECT sal INTO ls_casher FROM emp WHERE empno = emp_id;

在SQL语句中引用

SELECT * FROM emp WHERE sal = @ls_casher;

SELECT * FROM emp WHERE sal = 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

判断

IS NULL

IS NULL

空值替换

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

statement block

BEGIN...END

BEGIN...END;

conditional

1) IF…ELSE…

2) IF…ELSE IF…else…

3) CASE

1)IF..then...ELSE…end if;

2)If…then…

elsif…else…endif

3)decode

Repeat

WHILE Boolean_expression

{statement_block}

[BREAK]

{statement_block}

[CONTINUE]

1)Loop …exit;…end loop;

2)loop…exit when…end loop;

3)WHILE condition LOOP

sequence_of_statements;

EXIT WHEN boolean_expression;

END LOOP;

3)for…in [reverse]…loop

end loop;

GOTO

GOTO label

label:

GOTO label;

<<label>>

Exits unconditionally

RETURN

Return;

Sets a delay for statement execution

WAITFOR

Comment

--

/*…*/

--

/*…*/

PRINT

PRINT string

Set serveroutput on

dbms_output.put_line(string);

RAISERROR

RAISERROR

EXECUTE

EXECUTE

NULL statement

NULL;

4)cursor

TSQL

PL/SQL

DECLARE

DECLARE cursor_name CURSOR

[LOCAL | GLOBAL]

[FORWARD_ONLY | SCROLL]

[STATIC | KEYSET | DYNAMIC | FAST_FORWARD]

[READ_ONLY | SCROLL_LOCKS | OPTIMISTIC]

[TYPE_WARNING]

FOR select_statement

[FOR UPDATE [OF column_name [,...n]]]

DECLARE

CURSOR cursor_name IS

SELECT_statement;

open

Open cursor_name

Open cursor_name;

Fetch

Fetch cursor_name into

var1,var2…

Fetch cursor_name into

var1,var2…

||

%rowtype_var;

Close

Close cursor_name

Close cursor_name;

Attribute

@@FETCH_STATUS

@@CURSOR_ROWS

CURSOR_STATUS

%found

%notfound

%isopen

%rowcount

DEALLOCATE

DEALLOCATE cursor_name

隐式cursor

Select…into (仅可处理单行记录)

5)trigger

TSQL

PL/SQL

创建

CREATE TRIGGER trigger_name

ON table

[WITH ENCRYPTION]

{FOR {[DELETE][,][INSERT][,] [UPDATE] }

AS

sql_statement [...n]

}

Create or replace trigger t_name

{before|after}{insert|update|delete}

on table_name

[for each row [when conditional]

类型(按触发级别和时序)

语句

after

行或语句

before or after

访问数据操纵行的值

通过表Inserted、Deleted访问

通过记录 :New、 :Old访问,仅可用于行级触发器

谓词/函数/属性

Inserting、updating、deleteing

Updating(col)

Update(col)

使能

Alter table tabname {disable|enable} trigger {t_name|all}

Alter trigger t_name {disable|enable}

限制

作为触发语句的一部分,不可用事务控制命令

不能声明和使用LONG、LONG RAW变量和列

删除

Drop trigger t_name

Drop trigger t_name;

6)procedure

TSQL

PL/SQL

创建

CREATE PROCEDURE] p_name

[ {@parameter data_type} [VARYING] [= default] [OUTPUT] ] [,...n]

[WITH

{

RECOMPILE | ENCRYPTION

| RECOMPILE, ENCRYPTION

}

]

AS

sql_statement [...n]

Create or replace procedure p_name

[Para1 {in|out|inout} datatype[,…]

[{:=|default} default_value]]

{IS|AS}

查询

删除

DROP PROCEDURE p_name

DROP PROCEDURE p_name;

调用

EXEC p_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=<value>

Select value into var from dual

Insert

insert / insert into

insert into

Delete

比较

Any, some, all

集合

Union、Union all、Intersect、Minus、

9)全局变量

TSQL

PL/SQL

语句执行成功

error

SQLCODE

select 是否有结果

exists

select...into + SQL%FOUND

10)     命令行查询工具

ISQL

SQL PLUS

读取、执行SQL文件

Isql –Usa –Ppass –Shost –ifile

sqlplus [-s] user/pass@db -@filename

11)     杂项

 

TSQL

PL/SQL

在SQL语句中

Insert…With tablock

Insert…With Tablockx

Select…for update

Select…for readonly

独立语句

set transcation isolation level to Read uncommited

在SQL语句中

select …for update of…;

独立语句

lock table tabname in row share mode;

lock table tabname in share exclusive mode;

用户连接数

数据库文件

Device

Tablespace

CREATE TABLESPACE testdb DATAFILE 'C:\ORANT\DATABASE\testdb.ORA' SIZE 20M AUTOEXTEND ON NEXT 2M;

CREATE ROLLBACK SEGMENT "RB_TESTDB" TABLESPACE "TESTDB";

ALTER ROLLBACK SEGMENT "RB_TESTDB" ONLINE;

显示DML执行计划

Show plan

Explain plan

保留点

¨         Save transcation Sp_name

¨         ROLLBACK TRANSACTION percentchanged

¨         Savepoint Sp_name

¨         Rollback to savepoint sp_name

对模式对象改名

Rename

分析对象

Analyze

Sp_help?

1. select into 语法
 
现在有表
tablea 

 cola int ,
 colb varchar(20)
)
 
要把tablea中满足条件(cola <100)的记录生成新的表tableb。
 
在ms sqlserver 可以直接用select into语法:
select * into tableb 
where cola < 100 
 
在oracle中语法如下:
create table tableb 
as 

  select * from tablea 
    where cola <100 
)

T-SQL与PL/SQL的比较相关推荐

  1. oracle 的遍历语法,oracle pl/sql之pl/sql语法

    一.pl/sql基础 pl/sql分匿名块和命名块. 命名块:存储过程,函数,触发器,包等. pl/sql语句块分3部分: (1)声明部分 (2)可执行部分 (3)异常处理部分 其中可执行部分是语句块 ...

  2. 如何在Oracle数据库内格式化SQL或PL/SQL ?

    点击上方"蓝字" 关注我们,享更多干货! 在一些情况下,梳理复杂的SQL或PL/SQL代码逻辑时最好是格式化一下文本. 当然我们有Toad或PL/SQL Developer等其它第 ...

  3. 线上分享丨自治时代DBA的技能库:SQL和PL/SQL的深度编程(附上期PPT和视频)-云和恩墨大讲堂201905...

    云和恩墨大讲堂又和大家见面了! 2018年云和恩墨大讲堂走过了祖国的大好河山,从大连到海口,从上海到昆明--不知道我们的课堂里有没有出现过你的身影. 2019我们也不会停下分享的脚步.不过这一次,我们 ...

  4. ORACLE PL/SQL编程--PL/SQL块结构和组成元素

      本篇主要内容如下: 2.1   PL/SQL块 2.2   PL/SQL结构 2.3   标识符 2.4   PL/SQL 变量类型 2.4.1  变量类型 2.4.2  复合类型 2.4.2.1 ...

  5. oracle pl sql注意问题,Oracle PL/SQL编写PL/SQL代码的注意事项

    (1)几个值得注意的关键字(2)变量常量赋值注意: ---------------------------------------------------------------------[@mor ...

  6. (转)动态SQL和PL/SQL的EXECUTE IMMEDIATE选项

    EXECUTE IMMEDIATE代替了以前Oracle8i中DBMS_SQL package包.它解析并马上执行动态的SQL语句或非运行时创建的PL/SQL块.动态创建和执行SQL语句性能超前,EX ...

  7. 动态SQL和PL/SQL的EXECUTE选项分析

    EXECUTE IMMEDIATE代替了以前Oracle8i中DBMS_SQL package包.它解析并马上执行动态的SQL语句或非运行时创建的PL/SQL块.动态创建和执行SQL语句性能超前,EX ...

  8. 【PL/SQL】PL/SQL语言基础

    一.PL/SQL的块 (1)块(Block)是PL/SQL的基本程序单元 (2)一个PL/SQL应用程序由一个或多个块组成 1.PL/SQL块的基本组成 (1)定义部分(declare) --定义常量 ...

  9. 【PL/SQL】PL/SQL介绍

    一.PL/SQL的概述 PL/SQL也是一种程序语言,叫做过程化SQL语言(Procedural Language/SQL).PL/SQL是Oracle数据库对SQL语句的扩展.在普通SQL语句的使用 ...

  10. SQL游标——PL/SQL教程(三)

    SQL游标 /* 在执行执行增删改查语句的时候,Oracle都会开辟一块内存空间, 用来暂时存放收到SQL语句影响的数据. 这块内存空间就被称为游标区域,我们可以借助于游标来分析这些受到影响的数据 * ...

最新文章

  1. python音频聚类_Python实现聚类算法AP
  2. ASP.NET中移除全部缓存
  3. 让powershell同时只能运行一个脚本(进程互斥例子)
  4. 架构宣言: MDA 实战
  5. 蚂蚁金服资深技术专家经国:云原生时代微服务的高可用架构设计
  6. python上下文管理器细读
  7. Command对象应用--增加问卷调查
  8. JAVA将Excel中的报表导出为图片格式(三)换一种实现
  9. 分享一个关于跨境电商的竞品分析报告
  10. oracle 按照中文姓首字母排序,按照偏旁部首,笔画排序 sql
  11. php 获取当天是星期几,php 怎么获取今天星期几
  12. 存储卡被格式化了咋恢复文件?
  13. Go channel 通道
  14. 公鸡5元每只,母鸡3元每只,小鸡3只1元,100元买一百只鸡多少种办法?
  15. ceph 监控--calamari
  16. Krpano入门,导航栏,与javascript交互!!
  17. Java-基于SSM的体育竞赛成绩管理系统
  18. 基于babylon.js的3D网页游戏从零教程
  19. Unicode、UTF-8、UTF-16之间的区别
  20. 电脑市场装机版Ghost XP SP2 v2.0 [修正版]

热门文章

  1. mysql8 OCP 1Z0-908题库(持续更新)
  2. pcb各层的含义及作用
  3. positivessl证书旗下的IP证书
  4. BIOS设置u盘启动找不到u盘选项怎么办?
  5. java用account类型定义两个变量_java 编程
  6. MySQL启动失败,试图访问许可验证文件时出错,请重新安装SQL Server来更正次文件
  7. 常用的hook js
  8. git添加diff tool和merge tool
  9. 绩效反馈评语:如何评估团队合作
  10. 【转载】eMule电驴使用从入门到精通(8)-------代理和高ID、低ID