t-sql临时表与plsql

禅院小沙弥 2012-12-03 10:22:43

declare @old table()——字段省略
UPDATE a
SET
IsRestrictContract
,IsAnyDT
,ApplyBefortDelivery
,ApplyEndDateType
,ApplyEndDate
,OpenBefortDelivery
,OpenEndDateType
,OpenEndDate
,IsAssignPeriod
,AssignPeriod
,IsReusePeriod
,ReuseBefortDelivery
,ReuseEndDateType
,ReuseEndDate
,UpdateDT := SYSDATE
output
deleted.ProductId,
deleted.IsRestrictContract,
deleted.IsAnyDT,
deleted.ApplyBefortDelivery,
deleted.ApplyEndDateType,
deleted.ApplyEndDate,
deleted.OpenBefortDelivery,
deleted.OpenEndDateType,
deleted.OpenEndDate,
deleted.IsAssignPeriod,
deleted.AssignPeriod,
deleted.IsReusePeriod,
deleted.ReuseBefortDelivery,
deleted.ReuseEndDateType,
deleted.ReuseEndDate
into v_old
FROM ProductHedge a
WHERE ProductId = v_ProductId

我想问下 :deleted.ProductId类的是否是只是一个别名 如果转成PLSQL 需要哪些注意的?
...全文
199 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
以学习为目的 2012-12-03
  • 打赏
  • 举报
回复
deleted.ProductId类的是否是只是一个别名 答:deleeted是表名或者别名 转换成PLSQL注意什么 答:PLSQL不会
  • 打赏
  • 举报
回复

deleted.ProductId中的deleted指的是表的名字或者给表的别名  oracle中不知道是怎么处理的
noteasytoregister 2012-12-03
  • 打赏
  • 举报
回复
好象PL/SQL没有这个功能(returning into 返回的是新值),可以先在更新a表之前保存旧值:
select Id,
             LoginId,
             TradePW,
             PWErrTime,
             PWExpireDate,
             ReSetDT,
             PWStatus,
             IsPermanent
      INTO @Id
FROM [Customer].[dbo].[LoginAccount] AS a
       WHERE a.LoginId = @LoginId
         AND a.Flag = 0
houyajin 2012-12-03
  • 打赏
  • 举报
回复
可以弄到临时表里面的吧,其实就是把更新的那些数据保存起来,不过这个前提是你知道更新了那些操作,你可以看一下MSDN的OUTPUT 的UPDATE这个的子句。 其实就是你把更新的数据备份一下,对应的PLSQL如果你会的话照着这个意思写就可以了。 这个参考一下:http://msdn.microsoft.com/zh-cn/library/ms177523.aspx
發糞塗牆 2012-12-03
  • 打赏
  • 举报
回复
比较块的方法还是丢到Oracle里面执行一下,然后根据报错信息再改。Oracle我也不会,只是还没见过update into 这种格式....
禅院小沙弥 2012-12-03
  • 打赏
  • 举报
回复
引用 10 楼 DBA_Huangzj 的回复:
冒昧一下,这是SQLServer写的?好像好厉害的样子
别个写的 我现在要迁移到ORACLE 下,T-SQL 不是很深入啊~!~
發糞塗牆 2012-12-03
  • 打赏
  • 举报
回复
冒昧一下,这是SQLServer写的?好像好厉害的样子
禅院小沙弥 2012-12-03
  • 打赏
  • 举报
回复
引用 5 楼 DBA_Huangzj 的回复:
你这段代码应该是在触发器里面跳出来的吧?deleted是触发器专用的表。应该没有脑袋有病的人会用来做别名吧?你最好看看plsql里面触发器的使用。
附上代码
禅院小沙弥 2012-12-03
  • 打赏
  • 举报
回复

ALTER PROC [dbo].[spUpdPwdReset] @OperateId    varchar(20),
                                 @LoginId      varchar(20),
                                 @TradePW      varchar(20),
                                 @PWErrTime    int,
                                 @PWExpireDate bigint,
                                 @ReSetDT      bigint,
                                 @PWStatus     tinyint,
                                 @IsPermanent  tinyint
AS
  BEGIN
    SET nocount ON

    DECLARE @err int
    DECLARE @unique int
    DECLARE @Id TABLE(
      Id           int,
      LoginId      varchar( 20 ),
      TradePW      varchar( 20 ),
      PWErrTime    int,
      PWExpireDate bigint,
      ReSetDT      bigint,
      PWStatus     tinyint,
      IsPermanent  tinyint )
    DECLARE @field int

    SET @err=0
    SET @unique=( SELECT TOP 1 OperateObjectId
                    FROM OperateObject
                   WHERE TableName = 'LoginAccount'
                     AND IsUnique = 1 )

    BEGIN try
      UPDATE a
         SET TradePW = @TradePW,
             PWErrTime = @PWErrTime,
             PWExpireDate = @PWExpireDate,
             ReSetDT = @ReSetDT,
             PWStatus = @PWStatus,
             IsPermanent = @IsPermanent,
             [UpdateDT] = GETDATE( )
      output deleted.Id,
             deleted.LoginId,
             deleted.TradePW,
             deleted.PWErrTime,
             deleted.PWExpireDate,
             deleted.ReSetDT,
             deleted.PWStatus,
             deleted.IsPermanent
      INTO @Id
        FROM [Customer].[dbo].[LoginAccount] AS a
       WHERE a.LoginId = @LoginId
         AND a.Flag = 0

      IF EXISTS( SELECT 1
                   FROM @Id )
        BEGIN
          --TradePW
          SET @field=( SELECT TOP 1 OperateObjectId
                         FROM OperateObject
                        WHERE TableName = 'LoginAccount'
                          AND Fields = 'TradePW'
                          AND Flag = 0 )

          INSERT OperateLog
                 (OperateDT,
                  OperatorId,
                  OperateType,
                  OperateObjectId,
                  UniqueId,
                  BeforeValue,
                  AfterValue,
                  Flag)
          SELECT GETDATE( ),
                 @OperateId,
                 3,
                 @field,
                 a.Id,
                 a.TradePW,
                 @TradePW,
                 0
            FROM @Id AS a

      
        END
    END try

    BEGIN catch
      SET @err=ERROR_NUMBER( )
    END catch

    SELECT @err

    SET nocount OFF
  END 
禅院小沙弥 2012-12-03
  • 打赏
  • 举报
回复
引用 5 楼 DBA_Huangzj 的回复:
你这段代码应该是在触发器里面跳出来的吧?deleted是触发器专用的表。应该没有脑袋有病的人会用来做别名吧?你最好看看plsql里面触发器的使用。
这个代码确实出现在T-SQL 里哦 T-SQL 不是很熟是不是SQLSERVER 触发器里的呢,但 @id是个临时表啊
BaronZ 2012-12-03
  • 打赏
  • 举报
回复
引用 5 楼 DBA_Huangzj 的回复:
你这段代码应该是在触发器里面跳出来的吧?deleted是触发器专用的表。应该没有脑袋有病的人会用来做别名吧?你最好看看plsql里面触发器的使用。
版主好,麻烦帮看个帖子 http://bbs.csdn.net/topics/390301668
發糞塗牆 2012-12-03
  • 打赏
  • 举报
回复
你这段代码应该是在触发器里面跳出来的吧?deleted是触发器专用的表。应该没有脑袋有病的人会用来做别名吧?你最好看看plsql里面触发器的使用。
禅院小沙弥 2012-12-03
  • 打赏
  • 举报
回复
引用 2 楼 galenkeny 的回复:
deleted.ProductId类的是否是只是一个别名 答:deleeted是表名或者别名 转换成PLSQL注意什么 答:PLSQL不会
下面的v_old @old 请问下是不是字段别名 output是什么含义呢
禅院小沙弥 2012-12-03
  • 打赏
  • 举报
回复
引用 1 楼 TravyLee 的回复:
SQL code??1deleted.ProductId中的deleted指的是表的名字或者给表的别名 oracle中不知道是怎么处理的
下面的v_old 是@old 所以应该不是表名,而是字段名吧?另外这个字段怎么赋值到临时表中呢?
《Oracle 从入门到精通》中的视频教程和PPT资料。 Oracle 11G从入门到精通视频的PPT 第1章-Oracle 11g数据库简介 认识Oracle 11g 回忆Oracle的产品版本 学习Oracle 11g的新特性 第2章-Oracle 11g的安装与测试 能够使用Oracle 11g的基本条件 在Windows 2003上安装Oracle 11g 移除Oracle 11g 第3章-熟悉数据库 什么是数据库 范式,设计关系型数据库的准则 绘制E-R图设计数据库 第4章-SQL基础 SQL-数据库沟通的语言标准 Oracle 11g中支持的数据类型 数据库定义语言(DDL) 约束的使用 数据操纵语言(DML) 第5章-利用SELECT检索数据 SQL-数据库沟通的语言标准 Oracle 11g中支持的数据类型 数据库定义语言(DDL) 约束的使用 数据操纵语言(DML) 第6章-Oracle内置函数 数值型函数 字符型函数 日期型函数 转换函数 NULL函数 集合函数 其他函数 第7章-PLSQL基础 PL/SQL是什么 PL/SQL 变量的使用 表达式 PL/SQL结构控制 PL/SQL中使用DML和DDL语言 PL/SQL中的异常 PL/SQL函数编写 第8章-游标,数据的缓存区 什么是游标 显示游标 隐式游标 第9章-视图,数据库中虚拟的表 什么是视图 视图的创建 操作视图数据的限制 视图的修改 视图的删除 第10章-存储过程,提高程序执行的效率 什么是存储过程 在SQL*Plus中创建存储过程 使用PL/SQL工具创建存储过程 修改删除存储过程 第11章-触发器,保证数据的正确性 什么是触发器 SQL*PLUS操作触发器 使用PL/SQL工具操作触发器 删除修改触发器 第12章-事务和锁,确保数据安全 什么是事务 什么是锁 第13章-使用Oracle 11g Enterprise Manager 什么是Oracle 11g Enterprise Manager 使用OEM管理Oracle 第14章-常用工具介绍 什么是SQL*Plus 使用SQL*Plus 使用PL/SQL Developer 第15章-控制文件和日志文件 控制文件与日志文件 初识控制文件 控制文件的多路复用 创建控制文件 日志文件的管理 第16章-表空间的管理 与表空间有关的概念 表空间的管理 临时表空间的管理 数据文件管理 第17章-与数据库安全性有关的对象 用户管理 权限管理 角色管理 概要文件PROFILE 第18章-备份与恢复 数据库备份与恢复 物理备份和恢复数据库 逻辑备份和恢复数据库 本章小结 第19章-使用RMAN工具 RMAN的概述 使用恢复目录 通道分配 备份集 使用RMAN恢复 本章小结 http://down.51cto.com/data/376692 第20章-在线考试系统数据库设计 在线考试系统需求 模块设计 本章小结 第21章-在.NET中连接Oracle 什么是ADO.NET 使用绑定的方式连接Oracle 使用写代码的方式连接Oracle 第22章-在Java中连接Oracle JDBC与ODBC简介 Thin方式连接Oracle JDBC-ODBC桥连接Oracle
第一章 集合 1.1 索引表 1.1.1 定义索引表 1.1.2 将条目插入到索引表中 1.1.3 对索引表中进行操作 1.1.4 索引表中的函数 1.2 嵌套表 1.2.1 初始化嵌套表 1.2.2 扩展嵌套表 1.2.3 删除嵌套表中的条目 1.3 变长数组 1.3.1 定义变长数组 1.3.2 扩展变长数组 1.4 批绑定 1.5 集合的异常处理 第二章 触发器 2.1 触发器的创建 2.2 触发器的管理 2.3 触发器的新功能 2.4 替代触发器 2.5 触发器的局限性 第三章 对象 3.1 对象的定义 3.2 对象的存贮和检索 第四章 调试 4.1 编写 DEBUG 程序包(例程) 4.2 调用函数 第五章 大对象类型 5.1 大对象数据类型 5.2 在Oracle8i 数据库中使用外部文件: 5.3 DBMS_LOB 包 5.3.1 函数说明 5.3.2 应用举例 5.3.3 内部 LOB 的函数和过程5.3.4 内部 LOB 的函数和过程的应用举例 5.3.5 临时 LOB 第六章 管理事务和锁定 6.1 事务 6.2 锁定 第七章 动态 SQL 7.1 DBMS_SQL 程序包 7.2 本机动态SQL 7.2.1 执行 DDL 语句 7.2.2 使用绑定变量 7.2.3 执行 PL/SQL 块 第八章 显示数据 8.1 DBMS_OUTPUT 程序包 8.1.1 开启屏幕显示 8.1.2 关闭屏幕显示 8.1.3 其他函数 8.1.4 引发的异常 8.2 UTL_FILE 程序包 8.2.1 概述 8.2.2 函数描述 8.2.3 例程 8.3 TEXT_IO 程序包 第九章 管理数据作业 9.1 DBMS_JOB 包 9.2 使用后台进程 9.3 执行作业 9.3.1 使用SUBMIT 将作业提交给作业队列 9.3.2 使用RUN 立即执行作业 9.3.3 作业环境 9.4 查看作业 9.4.1 DBA_JOBS 视图的结构 9.4.2 DBA_JOBS_RUNNING 视图的结构 9.5 管理作业 9.5.1 删除作业 9.5.2 修改作业 9.5.3 导入和导出作业 9.5.4 处理损坏的作业 9.5.5 例程 第十章 过程通信 10.1 报警(DBMS_ALERT 程序包) 10.1.1 建立报警的次序 10.1.2 函数应用和说明 10.1.3 应用举例 10.2 DBMS_PIPE 程序包 10.2.1 公有管道和私有管道 10.2.2 使用管道 10.2.3 DBMS_PIPE 包的函数 10.2.4 例程 10.3 DBMS_ALERT 与 DBMS_PIPE 的比较 第十一章 PL/SQL 和 JAVA 11.1 Oracle JAVA 11.2 装载、应用、删除JAVA

34,594

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧