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
寫的不好,拿出來見笑了,只為那些需要的人提供一些東東吧。