oracle VS sql server指令碼文法

來源:互聯網
上載者:User
oracle VS sql server指令碼文法

Luo Weifeng 2010-7-9

原文發表於QQ空間。

 

 

話說當日杜boss(當然現在不能這麼叫了)下聖旨道要用oracle 和sql server分別對**寫指令碼。這可慘死我了,整整一天光oracle的指令碼移植成sqlserver的就讓我差點吐死。現在,都過去老長時間了,感覺自己也不會再有什麼出息了,就貼出來曾經的心路曆程,好讓更多的哥們姐們少走彎路。

 

這個是oracle的文法:

--AUTHOR:luoweifeng
--TIME: 2010-6-23
DROP USER LUO CASCADE;

CREATE USER "LUO"  PROFILE "DEFAULT" 
    IDENTIFIED BY "oradb" DEFAULT TABLESPACE "USERS" 
    ACCOUNT UNLOCK;
GRANT "CONNECT" TO "LUO";
GRANT "RESOURCE" TO "LUO";

CONNECT LUO/oradb;

CREATE TABLE "LUO"."LOGIN_RECORD" (
 "USER_NAME" VARCHAR2(10) NOT  NULL, 
 "USER_PASSWD" VARCHAR2(10) NOT NULL, 
 "RECORD_TIME" DATE DEFAULT sysdate NOT NULL,
 "SUCCESS" VARCHAR2(10) NOT NULL  
)  ;

CREATE TABLE "LUO"."LOGIN" (
 "USER_NAME" VARCHAR2(10) NOT NULL, 
 "USER_PASSWD" VARCHAR2(10) NOT NULL
)  ;

 

CREATE OR REPLACE TRIGGER "LUO"."LOGIN_RECORD_TRIGER" 
BEFORE INSERT ON "LUO"."LOGIN" FOR EACH ROW 
BEGIN
    INSERT INTO LOGIN_RECORD VALUES(
   :new.USER_NAME,
   :new.USER_PASSWD,
   sysdate,
 'HI'
 );
END;

 

--建立預存程序
CREATE OR REPLACE PROCEDURE LOGIN_PROCEDURE(
 usern IN LUO.LOGIN.USER_NAME%TYPE, passwd IN LUO.LOGIN.USER_PASSWD%TYPE
)AS
 count_num INTEGER ;
BEGIN
 SELECT COUNT(*)
 INTO count_num
 FROM LOGIN
 WHERE LOGIN.USER_NAME = usern
  AND LOGIN.USER_PASSWD = passwd;
 IF count_num = 0 THEN
  INSERT INTO "LUO"."LOGIN_RECORD" VALUES(usern,passwd,sysdate,'failure');
  DBMS_OUTPUT.PUT_LINE('LOGIN FAILD!');
 ELSE 
  INSERT INTO "LUO"."LOGIN_RECORD" VALUES(usern,passwd,sysdate,'success');
  DBMS_OUTPUT.PUT_LINE('LOGIN SUCCESS!');
 END IF;
 COMMIT;
EXCEPTION 
 WHEN OTHERS THEN
  DBMS_OUTPUT.PUT_LINE('EXCEPTION OCCURED!');
  ROLLBACK;
END LOGIN_PROCEDURE;

/

 

下面是sql server的文法:

--RecordLoginWithTrigerUseSql.SQL - Creates the LabTest database                                                                              
--Author: Luo Weifeng
--Time :  2010-6-23
--All Rights Reserved.

--切換到master資料庫
USE master

-- 查詢有沒有以我們期望的資料名為名的資料庫,存在則刪除
if exists (select * from sysdatabases where name='LabTest')
begin
  raiserror('Dropping existing LabTest database ....',0,1)
  DROP database LabTest
end
GO

-- 建立資料庫(大小等用預設值)
CREATE DATABASE LabTest
GO

-- 進入建立資料庫建立表
USE LabTest
GO

-- 檢查是否正確
if db_name() <> 'LabTest'
   raiserror('Error in RecordLoginWithTrigerUseSql.SQL, ''USE LabTest'' failed!  Killing the SPID now.'
            ,22,127) with log
GO

--建立記錄表
CREATE TABLE LOGIN_RECORD (
 "USER_NAME" VARCHAR(10) NOT  NULL, 
 "USER_PASSWD" VARCHAR(10) NOT NULL, 
 "RECORD_TIME" DATE NOT NULL DEFAULT( getdate() ),
 "SUCCESS" VARCHAR(10) NOT NULL  
)  
Go

--建立使用者名稱/密碼錶
CREATE TABLE "LOGIN" (
 "USER_NAME" VARCHAR(10) NOT NULL, 
 "USER_PASSWD" VARCHAR(10) NOT NULL
)  
GO

-- 檢查出錯
raiserror('Now at the create trigger section ...',0,1)
GO

-- 建立觸發器

CREATE TRIGGER LOGIN_RECORD_TRIGER 
ON LOGIN
FOR INSERT
AS
BEGIN
 DECLARE @new_name VARCHAR(10);
 DECLARE @new_passwd VARCHAR(10);
 SET @new_name = (SELECT INSERTED.USER_NAME FROM INSERTED)
 SET @new_passwd = (SELECT INSERTED.USER_PASSWD FROM INSERTED) 
 
    INSERT INTO LOGIN_RECORD VALUES(
   @new_name,
   @new_passwd,
   getdate(),
 'HI'
 );
END

CREATE PROCEDURE LOGIN_PROCEDURE
 (
 @usern VARCHAR(10), 
 @passwd VARCHAR(10)
 )
AS
BEGIN
 DECLARE @count_num INTEGER;
 SET @count_num = ( SELECT COUNT(*) 
      FROM LOGIN
      WHERE LOGIN.USER_NAME = @usern
       AND LOGIN.USER_PASSWD = @passwd)  
  
 
 IF (@count_num = 0) 
 BEGIN
  INSERT INTO LOGIN_RECORD VALUES(@usern,@passwd,getdate(),'failure')
 END
 ELSE 
 BEGIN
  INSERT INTO LOGIN_RECORD VALUES(@usern,@passwd,getdate(),'success')
 END
END

 

寫的不好,拿出來見笑了,只為那些需要的人提供一些東東吧。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.