ORCL MSSQL 异同

ORACLE SQL
字串连接 || +'
流控制(Control-of-Flow)语言
声明变量 DECLARE DECLARE
语句块 BEGIN...END
条件处理 IF…THEN,   ELSIF…THEN,   ELSE   ENDIF; IF…[BEGIN…END]   ELSE   [BEGIN…END]        ELSE IF   CASE expression
无条件结束 RETURN RETURN
无条件结束当前程序块后面的语句 EXIT BREAK  
重新开始一个WHILE循环 N/A CONTINUE  
等待指定间隔 N/A (dbms_lock.sleep) WAITFOR  
循环控制 WHILE LOOP…END LOOP; LABEL…GOTO LABEL;   FOR…END LOOP;   LOOP…END LOOP; WHILE   BEGIN… END   LABEL…GOTO LABEL
执行程序 EXECUTE EXECUTE
打印输出 RDBMS_OUTPUT.PUT_LINE PRINT   
引发程序错误(Raise program error) RAISE_APPLICATION_ERROR RAISERROR   

语句终止符 Semicolon (;) N/A
程序注释 /* … */, /* … */,
声明变量 DECLARE   VSSN CHAR(9);   VFNAME VARCHAR2(12);   VLNAME VARCHAR2(20);   VBIRTH_DATE DATE;    VLOAN_AMOUNT NUMBER(12,2); DECLARE   @VSSN CHAR(9),   @VFNAME VARCHAR2(12),   @VLNAME VARCHAR2(20),   @VBIRTH_DATE DATETIME,   @VLOAN_AMOUNT NUMERIC(12,2)
给变量赋值

DECLARE VSSN CHAR(9);   VFNAME VARCHAR2(12);   VLNAME VARCHAR2(20);   BEGIN   VSSN := ?'    SELECT FNAME, LNAME INTO VFNAME, VLNAME FROM STUDENTS WHERE SSN=VSSN; END; DECLARE @VSSN CHAR(9),   @VFNAME VARCHAR(12),   @VLNAME VARCHAR(20)   SET @VSSN = ?'    SELECT @VFNAME=FNAME, @VLNAME=LNAME FROM STUDENTS WHERE SSN = @VSSN  
语句快 都支持用BEGIN…END术语来标记语句块 都支持用BEGIN…END术语来标记语句块
DECLARE    DECLARE VARIABLES ...    BEGIN -- THIS IS REQUIRED SYNTAX   PROGRAM_STATEMENTS ...   IF ...THEN   STATEMENT1;   STATEMENT2;   STATEMENTN;   END IF;   WHILE ... LOOP   STATEMENT1;   STATEMENT2;   STATEMENTN;   END LOOP;    END; -- THIS IS REQUIRED SYNTAX DECLARE   DECLARE VARIABLES ...    BEGIN -- THIS IS OPTIONAL SYNTAX   PROGRAM_STATEMENTS ...   IF ...  IF语句和WHILE循环中有多于一个语句被执行,则需要使用BEGIN…END语句块



Transact-SQL 不支持%TYPE和%ROWTYPE变量数据类型定义。一个Transact-SQL 变量不能在DECLARE命令中初始化。    在Microsoft SQL Server数据类型定义中也不能使用Oracle 的NOT NULL和CONSTANT关键字。    像Oracle 的LONG和LONG RAW数据类型一样。文本和图形数据类型不能被用做变量定义。    此外,Transact-SQL 不支持PL/SQL 风格的记录和表的定义。



1) create table mytab1e(mydec decimal,
                       myint inteter)
                 tablespace user_data
                 pctfree   5
                 pctused   30;
   2) create table mytable2
             as ( select * from mytable1);
一、 create sequence语句
序列用来为表的主键生成唯一的序列值.
1) create sequence myseq
         increment by 4
         start with 50
         maxvalue 60
         minvalue 50
         cycle
         cache 3;
2)
   sql> create sequence new_s;
   sql>insert into new (new_id,last_name,first_name)
       values(new_s.nextval,’daur’,’permit’);

create view语句
视图实际上是存储在数据库上旳 select语句.每次在sql语句中使用视图时,表示该视图的select语句就用来得到需要的数据.

1) create or place view new_v
as
   select substr(d.d_last_name,1,3),
      d.d_lastname,d.d_firstname,b.b_start_date,b.b_location
   from new1 d,
        new2 b
   where d.d_lastname=b.b_lastname;

一、 INSERT语句:
插入单行 两个连续的逗号也可以表示空值,也可使用NULL关键词

INSERT INTO DEPARTMENT
       (DEPARTMENT_ID,NAME,LOCATION_ID)
VALUES (01,’COMPUTER’,167)

插入多行 将SELECT语句检索出来的所有数据行都插入到表中.这条语句通常在从一个表向另一个表快速复制数据行.

INSERT INTO ORDER_TEMP
SELECT A.ORDER_ID,B.ITEM_ID,C.NAME,E.FIRST_NAME||'.'||E.LAST_NAME,
       A.ORDER_DATE,A.SHIP_DATE,D.DESCRIPTION,B.ACTUAL_PRICE,
       B.QUANTITY,B.TOTAL
  FROM SALES_ORDER A,    ITEM B,  CUSTOMER C,
       PRODUCT D,        EMPLOYEE E
WHERE MONTHS_BETWEEN(TO_DATE(A.ORDER_DATE),TO_DATE('01-7月-91'))>0
       AND A.CUSTOMER_ID=C.CUSTOMER_ID
       AND C.SALESPERSON_ID=E.EMPLOYEE_ID
       AND A.ORDER_ID=B.ORDER_ID
       AND B.PRODUCT_ID=D.PRODUCT_ID

从其它表复制数据:
要快速地从一个表向另一个尚不存在的表复制数据,可以使用CREATE TABLE语句定义该表并同时将SELECT语句检索的结果复制到新表中.

CREATE TABLE EMPLOYEE_COPY
      AS
      SELECT *
        FROM EMPLOYEE

一、 UPDATE语句:
UPDATE语句更新所有满足WHERE子句条件的数据行.同样,该语句可以用SELECT语句检索得到.但SELECT必须只检索到一行数据值.否则报错.而且每更新一行数据,均要执行一次SELECT语句.

UPDATE EMPLOYEE_COP
   SET SALARY=
       SALARY-400
WHERE TO_NUMBER(TO_CHAR(HIRE_DATE,'YYMMDD'))<850101

UPDATE ITEM_COP A
    SET A.ACTUAL_PRICE=
      (
      SELECT B.LIST_PRICE
        FROM PRICE B,SALES_ORDER C
       WHERE A.PRODUCT_ID=B.PRODUCT_ID AND
             A.ORDER_ID=C.ORDER_ID AND
             TO_NUMBER(TO_CHAR(C.ORDER_DATE,'YYYYMMDD')) BETWEEN
             TO_NUMBER(TO_CHAR(B.START_DATE,'YYYYMMDD')) AND
             NVL(TO_NUMBER(TO_CHAR(END_DATE,'YYYYMMDD')),29991231)
      )

DELETE语句:
DELETE语句删除所有满足WHERE子句条件的数据行.

DELETE FROM item
WHERE ORDER_ID=510

一、 TRUNCATE语句:
TRUNCATE [schema.]table


一、 各类Functions:

SELECT ASCII('Z')
     FROM dual

ASCII('Z')
----------
90


CHR(number) SELECT CHR(65)||'BCDEF'
      FROM dual  ABCDEF

INSTR(input_string,search_string[,n[,m]])

该函数是从字符串input_string的第n个字符开始查找搜索字符串的第m次出现,如果没有找到搜索的字符串,函数将返回0.如果找到,函数将返回位置.

SELECT INSTR('the quick sly fox jumped over the
           lazy brown dog','the',2,1)
      FROM dual    31

INSTRB(input_string,search_string[,n[,m]])
该函数类似于INSTR函数,不同之处在于INSTRB函数返回搜索字符串出现的字节数,而不是字符数.在NLS字符集中仅包含单字符时,INSTRB函数和INSTR函数是完全相同的.
LENGTHB(string)
该函数用于返回输入字符串的字节数.对于只包含单字节字符的字符集来说LENGTHB函数和LENGTH函数完全一样.
LOWER(string)
该函数将字符串string全部转换为小写字母,对于数字和其它非字母字符,不执行任何转换.
UPPER(string)
该函数将字符串string全部转换为大写字母,对于数字和其它非字母字符,不执行任何转换.
LPAD(string,length[,’set’])
iF…THEN,   ELSIF…THEN,   ELSE   ENDIF;
SELECT first_name,LPAD(first_name,20,' ')
      FROM employee RFGD8FLE_RF0A8FMI_Z
rfgd08fle_rfoa8fmi_z
FIRST_NAME      LPAD(FIRST_NAME,20,'') REXF8FHH_RF0A8FMI_Z
--------------- -----------------------------------------
JOHN                            JOHN
KEVIN                          KEVIN

RPAD(string,length[,’set’])
在字符串string的右边加上一个指定的字符集set,从而使串的长度达到指定的长度length.参数set可以是单个字符,也可以是字符串.如果string的长度小于length时,取string字符串的前length个字符.
SELECT first_name,rpad(first_name,20,'-')
      FROM employee

FIRST_NAME      RPAD(FIRST_NAME,20,'-')
--------------- -----------------------------------------
JOHN            JOHN----------------
KEVIN           KEVIN---------------

LTRIM(string[,’set’])
该函数从字符串的左边开始,去掉字符串set中的字符,直到看到第一个不在字符串set中的字符为止.
RTRIM(string[,’set’])





select TEXT FROM ALL_SOURCE WHERE NAME='AAAA' AND OWNER='AMLU';

sp_helptext
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值