oracle VS sql server脚本语法

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

 

写的不好,拿出来见笑了,只为那些需要的人提供一些东东吧。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值