触发器这么些事物,oracle 所特有的 函数

如下:SELECT LogID,UserID,LogTime,Url,Description,(case OperateType when
OperateType = 0 then 新增 when OperateType=1 then 修改 else 删除 end
case) FROM LOG ????

12、说明:日程安排提前五分钟提醒

  AS

在网上查了部分资料但是发现粘上去的代码都存在问题,无奈只好自己修改了一下,代码如下:
如下代码能正常运行,都是网上查找资料最后拼凑总结出来的。条件就自己加吧。网上好像也有不少类型的东西,这里留着以备不时只需!
复制代码 代码如下: SELECT (case when
a.colorder=1 then d.name else ” end) N’表名’, a.colorder N’字段序号’,
a.name N’字段名’, (case when COLUMNPROPERTY( a.id,a.name,’IsIdentity’)=1
then ‘√’else ” end) N’标识’, (case when FROM sysobjects WHERE (name in
(SELECT name FROM sysindexes WHERE AND (indid in (SELECT indid FROM
sysindexkeys WHERE AND (colid in (SELECT colid FROM syscolumns WHERE AND
AND >0 then ‘√’ else ” end) N’主键’, b.name N’类型’, a.length
N’占用字节数’, COLUMNPROPERTY(a.id,a.name,’PRECISION’) as N’长度’,
isnull(COLUMNPROPERTY,0) as N’小数位数’, (case when a.isnullable=1 then
‘√’else ” end) N’允许空’, isnull N’默认值’, isnull AS N’字段说明’
–into ##tx FROM syscolumns a left join systypes b on
a.xtype=b.xusertype inner join sysobjects d on a.id=d.id and d.xtype=’U’
and d.name<>’dtproperties’ left join syscomments e on
a.cdefault=e.id left join sys.extended_properties g on a.id=g.major_id
AND a.colid = g.minor_id order by object_name,a.colorder
sysproperties表的详解:
1、表名:sqlserver的注释表,每个数据库都有,包括表和字段的注释,表或者列的注释都会存储,没有注释不存储。
2、字段: id:表的ID或者是列的ID smallid:列的顺序,排序用 type:3
表,4字段,可能还有约束什么的,还没有测试出 name:统一的MS_Description
value:描述 如需修改 如果需要更新 此表的 内容 需要 开启
[允许对系统目录直接进行修改] ,否则 改不了 系统表 如果 不开启 此 功能
,那么也可以 使用 存储过程[sp_addextendedproperty] 来 添加更新删除
表和字段的描述 用法如下 –创建表 Create Table 表,a2 char –为表 添加
描述信息 : 第二个参数为 [描述] 第六个参数为 [表名] EXECUTE
sp_addextendedproperty N’MS_Description’, ‘人员信息表’, N’user’,
N’dbo’, N’table’, N’表’, NULL, NULL –为表 更新 描述信息 : 第二个参数为
[描述] 第六个参数为 [表名] EXECUTE sp_updateextendedproperty
‘MS_Description’,N’adsfasfdas’, N’user’, N’dbo’, N’table’, N’表’, NULL,
NULL –为表 删除 描述信息 : 第五个参数为 [表名] EXEC
sp_dropextendedproperty ‘MS_Description’,N’user’, N’dbo’, N’table’,
N’表’, NULL, NULL –字段的 添加 更新 删除 方法 –为 字段a1 添加
描述信息: 第二个参数为 [描述] 第六个参数为 [表名] 第八个参数为
[字段名称] EXECUTE sp_addextendedproperty N’MS_Description’, ‘姓名’,
N’user’, N’dbo’, N’table’, N’表’, N’column’, N’a1′ –更新 字段 a1
的描述属性:第二个参数为 [描述] 第六个参数为 [表名] 第八个参数为
[字段名称] EXEC sp_updateextendedproperty
‘MS_Description’,’字段1dd’,’user’,dbo,’table’,’表’,’column’,N’a1′
–删除 字段 a1 的描述属性:第五个参数为 [表名] 第七个参数为
[字段名称] EXEC sp_dropextendedproperty
‘MS_Description’,’user’,dbo,’table’,’表’,’column’,’a1′ –删除测试 Drop
Table 表

2.DECODE的写法:SELECT LogID,UserID,LogTime,Url,Description,
decode(OperateType,0,新增,1,修改,删除) OperationName FROM LOG

oracle教程:PLSQL常用方法汇总

 

  1. caseSELECT LogID,UserID,LogTime,Url,Description,(case when
    OperateType = 0 then 新增 when OperateType=1 then 修改 else 删除 end )
    FROM LOG

23、说明:初始化表table1

 

建议用DECODE的写法

3,

 

  WHERE name = @LogicalFileName

 

                                group by
t.xingshi))) t

按UserID分组

手机 B 3

select a,b,c from tablename ta where
a=(select max(a) from tablename tb where tb.b=ta.b)

–包含用户表,产品表和订单表关联后的所有信息

法二:select top 0 * into b from a

 

INSERT INTO TBL_TEST(ID,NAME,PID)
VALUES(‘5′,’121′,’2’);

–插入订单表数据

                                where
xingshi not between

  如果您有什么问题,欢迎在下面评论,我们一起讨论,谢谢~

BEGIN    

INNER JOIN Tse_User AS U WITH(NOLOCK) ON O.UserID = U.UserID

DECLARE curObject CURSOR FOR

–匹配除126以外的所有邮箱

select decode(sign(numb-6),-1,numb,6)
numb,decode(sign(numb-6),-1,xingshi,’其他’) xingshi, sum(amount) from

因为用户编号在订单表中为外键,所以,直接删除某个用户时,如果该用户下了订单,就会提示有外键不能删除。针对这种情况,可以考虑使用触发器。

总数:select count as totalcount from
table1

–匹配126邮箱的

INTERSECT 运算符通过只包括 TABLE1 和
TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当 ALL 随 INTERSECT
一起使用时 (INTERSECT ALL),不消除重复行。

插入

 

  CREATE VIEW V_Tse_TotalInfo

create table tabname(col1 type1 [not
null] [primary key],col2 type2 [not null],..)

select * from Tse_User with(nolock)

删除索引:drop index idxname

  如果您觉得还不错,不妨点下右下方的推荐,有您的鼓励我会继续努力的~

BACKUP DATABASE pubs TO testBack

 

GO

CREATE TRIGGER TR_Tse_ADDOrder
    ON Tse_Order
    AFTER INSERT
    AS
    BEGIN
        UPDATE Tse_Product SET Storage = Storage – (SELECT Number FROM
INSERTED)
        WHERE ProductID IN (SELECT ProductID FROM INSERTED)
  END  关于SQL定时作业部门的介绍,请看“工作经常使用的SQL整理,实战篇(三)”~

      AND @OriginalSize = (SELECT size
FROM sysfiles WHERE name = @LogicalFileName) 

 

2,向上查询

  CREATE TRIGGER TR_Tse_DelUser
    ON Tse_User
    INSTEAD OF DELETE  –代替默认的删除
    AS
    BEGIN
        SET NOCOUNT ON
        DELETE FROM Tse_Order WHERE UserID IN (SELECT UserID FROM
Deleted)
        DELETE FROM Tse_User WHERE UserID IN (SELECT UserID FROM
Deleted)
  END   使用触发器,添加订单时,产品表库存相应减少

三、技巧

11.存储过程和事务

— 创建 备份数据的 device

  工作经常使用的SQL整理,实战篇(三)

查找:select * from table1 where field1
like ’%value1%’ —like的语法很精妙,查资料!

 

平均:select avg(field1) as avgvalue from
table1

获取所有产品的名字,以‘|’分隔,包含在输出参数@Names中

2、说明:删除数据库

创建触发器,删除用户表中用户时,会自动先删除订单表中的订单

11、说明:四表联查问题:

–左右表匹配的行

    WHILE  ((@Counter < @OriginalSize
/ 16) AND (@Counter < 50000))

–右边表中所有行,左边匹配右边,左边为空的补NULL

Delete from tablename where id not in
(select max(id) from tablename group by col1,col2,…)

 

SET NOCOUNT OFF

–将年,月,日,时,分,秒,毫秒以字符串形式连接起来作为订单号

 @NewOwner as NVARCHAR(128)

  工作经常使用的SQL整理,实战篇(二)

        @NewSize INT

9.通配符

                                ‘a’ and
‘z’ and xingshi

SELECT * FROM Tse_Order AS O WITH(NOLOCK)

select a.title,a.username,b.adddate from
table a,(select max(adddate) adddate from table where
table.title=a.title) b

values(111, ‘zhangsan’, ‘zhangsan’, 'zs@126.com', ”)

insert into b(a, b, c) select d,e,f from
b in ‘具体数据库’ where 条件

–左边表中所有行,右边匹配左边, 右边为空的补NULL

 

 

全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。

select * from Tse_Order with(nolock) where ID >= 2

      AND (@OriginalSize * 8 /1024) >
@NewSize 

SELECT UserID, COUNT(0) AS Number FROM Tse_Order WITH(NOLOCK) GROUP BY
UserID HAVING COUNT(0) >=3

如:

 

SET NOCOUNT ON

 

C: INTERSECT 运算符

简单查询

6、说明:外连接查询(表名1:a
表名2:b)

SELECT UserID, COUNT(0) AS Number FROM Tse_Order WITH(NOLOCK) GROUP BY
UserID HAVING COUNT(0) >=1 ORDER BY Number ASC

12、说明:使用外连接

 

— Wrap the log if necessary.

VALUES(‘PD00030’, ‘Benz’, 500500.0, 30000)

FETCH NEXT FROM curObject INTO @Name,
@Owner

 

select * from ( select rank()
over(partition by classroom order by grade desc)mm ,name,grade,classroom
from grade_class) t where t.grade>90

 

   set @i=@i+1

修改

排序:select * from table1 order by
field1,field2 [desc]

12.游标

begin

  CREATE PROCEDURE SC_Tse_GetProductNames
    (
        @Names varchar(max) OUTPUT
    )
    AS
    BEGIN
        SET NOCOUNT ON;
        declare @ProductName varchar(64)
        declare curTest cursor
        for (select ProductName from Tse_Product)
        open curTest                –打开游标
        fetch next from curTest into @ProductName
        while @@fetch_status = 0   –获取成功
        begin
            if (@ProductName is not null and @ProductName <> ”)
            begin
                if (@Names is null or @Names = ”)
                begin
                    set @Names = @ProductName
                end
                else
                begin
                    set @Names = @Names + ‘|’+ @ProductName
                end
            end
            fetch next from curTest into @ProductName
        end
       
        close curTest            –关闭游标
        deallocate curTest        –释放游标
    END

 @OldOwner as NVARCHAR(128),

–插入产品表数据

注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。

  U.Email, U.Mobile, P.ProductName, P.Price FROM Tse_Order AS O
WITH(NOLOCK)

1、1=1,1=2的使用,在SQL语句组合时用的较多

LEFT JOIN Tse_Order AS O WITH(NOLOCK) ON U.UserID = O.UserID

SELECT  @StartTime = GETDATE(),

 

n  Select (case when condition1 then
返回值1 when condition2 then 返回值2 end) from table;

SELECT * FROM Tse_Order AS O WITH(NOLOCK)

SQL: select a.a, a.b, a.c, b.c, b.d, b.f
from a LEFT OUT JOIN b ON a.a = b.c

 

select type,sum(case vender when ‘A’ then
pcs else 0 end),sum(case vender when ‘C’ then pcs else 0 end),sum(case
vender when ‘B’ then pcs else 0 end) FROM tablename group by type

  SELECT O.OrderID, O.UserID, O.ProductID, O.PostTime, U.UserName,
U.RealName,

      END  

全连接

go

  IF EXISTS (SELECT * FROM SYSOBJECTS WHERE Name =
‘V_Tse_TotalInfo’)

drop table tabname

  工作经常使用的SQL整理,实战篇(一)

while @i<30

Delete from Tse_User Where UserID = 111

if @strWhere !=”

10.视图

二、提升

FULL JOIN Tse_Product AS P WITH(NOLOCK) ON O.ProductID = P.ProductID

 

  INNER JOIN Tse_Product AS P WITH(NOLOCK) ON O.ProductID =
P.ProductID

DBCC REINDEX

INSERT INTO Tse_Product(ProductID, ProductName, Price, Storage)

  FROM sysfiles

  DATENAME(HOUR, GETDATE()) + DATENAME(MINUTE,
GETDATE())+DATENAME(SECOND, GETDATE()) +DATENAME(MILLISECOND, GETDATE())

10、说明:几个简单的基本的sql语句

工作经常使用的SQL整理,实战篇,地址一览:

EXCEPT 运算符通过包括所有在 TABLE1
中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。当 ALL 随
EXCEPT 一起使用时 (EXCEPT ALL),不消除重复行。

  接着上一篇“工作经常使用的SQL整理,实战篇(一)”继续讨论,这一篇中主要讨论增删改查,连接,分组和排序,通配符,视图,存储过程和事务,游标,触发器这些东西。

set @strSQL = ‘select count(*) as Total
from [‘ + @tblName + ‘]’

左连接(左外连接)

       
CONVERT(VARCHAR(30),(size*8/1024)) + ‘MB’

 

8、说明:between的用法,between限制查询数据范围时包括了边界值,not
between不包括

–左右表所有行,为空的补NULL

              group by substr(t.name,1,1)
order by amount desc )

  CREATE PROCEDURE [dbo].[SC_Tse_DeleteProduct]
  (
      @ProductID VARCHAR(64),
      @Result int output
  )
  AS
  BEGIN
      SET NOCOUNT ON;
  
      BEGIN TRAN   –开始事务
      BEGIN
          DELETE FROM Tse_Order WHERE ProductID = @ProductID
         
          DELETE FROM Tse_Product WHERE ProductID = @ProductID
         
          IF (@@ERROR <> 0)
          BEGIN
              SET @Result = -999
              ROLLBACK TRAN   –回滚
          END
          ELSE
          BEGIN
              SET @Result = 888
              COMMIT TRAN     –提交
          END
      END
  END

7、说明:在线视图查询(表名1:a )

  VALUES(@OrderID,  115,  ‘PD00040’,  10,  GETDATE())

select * from a left inner join b on
a.a=b.b right inner join c on a.a=c.c inner join d on a.a=d.d where
…..

  SELECT * FROM Tse_User WITH(NOLOCK) WHERE Email LIKE
‘%@16_.com’

4、说明:子查询(表名1:a 表名2:b)

SELECT * FROM Tse_User WITH(NOLOCK) WHERE Email LIKE
‘%@126.com’

WHILE(@@FETCH_STATUS=0)

6.增删改查

14、说明:前10条记录

  INNER JOIN Tse_User AS U WITH(NOLOCK) ON O.UserID = U.UserID

select avg(grade) AS 平均分,t.classroom
from grade_class  t group by  t.classroom having
avg(grade)>94

按UserID分组,订单数量大于等于1,按订单数量升序

法一:select * into b from a where
1<>1

  –匹配16开头,后面跟一个任意字符的邮箱

You can leave a response, or trackback from your own site.

Leave a Reply

网站地图xml地图