oracle11g-oracle的merge into中 where子句不能使用别名问题

问题描述

oracle的merge into中 where子句不能使用别名问题

CREATE OR REPLACE PROCEDURE YAXIA0617.YHYX_FI_SERIES
AS
CUR_TIME DATE;--当前时间
PK_GROUP_TAG VARCHAR(20);--集团pk
PK_SOURCE_TAG VARCHAR(20);--资源Pk
BEGIN
SELECT SYSDATE-5/1440 INTO CUR_TIME FROM DUAL;
SELECT PK_GROUP INTO PK_GROUP_TAG FROM ORG_GROUP;

MERGE INTO BD_MATERIAL a2
USING (select * from TEMP_SERIES where STATUS = 0 and CREATE_DATE <= CUR_TIME) b2
ON (a2.CODE = b2.CLASS_CODE)
    WHEN MATCHED THEN
        UPDATE SET
            a2.NAME = b2.CLASS_NAME,
            a2.TS = to_char(sysdate,'yyyy-mm-dd HH24:MI:SS')
    WHEN NOT MATCHED THEN
        Insert
           (code, creationtime, creator, dataoriginflag, discountflag, dr, electronicsale, enablestate, fee,
            intolerance, iselectrans, latest, modifier, name, outcloselowerlimit, outtolerance, pk_group,
            pk_marbasclass, pk_material,
            pk_mattaxes, pk_measdoc, pk_org, pk_source,
            productfamily, retail, setpartsflag, ts, unitvolume, unitweight,version)
        Values
           (b2.CLASS_CODE,to_char(sysdate,'yyyy-mm-dd HH24:MI:SS'), '9999999', 0, 'N', 0, 'N', 2, 'N',
            0, 'N', 'Y', '~',b2.CLASS_NAME, 0, 0,PK_GROUP_TAG,
            (select pk_marbasclass from bd_marbasclass where code=b2.BRAND_CODE), to_char(SEQ_INTERFACE_DATA.nextval),
            (select pk_mattaxes from bd_mattaxes where MATTAXESCODE='CN001'),(select pk_measdoc from bd_measdoc where code='EA'),PK_GROUP_TAG, '~',
            'N', 'N', 'N', to_char(sysdate,'yyyy-mm-dd HH24:MI:SS'), 0, 0,  1);
   --处理pk_source和PK_MATERIAL一样
   select PK_MATERIAL into PK_SOURCE_TAG from BD_MATERIAL where CODE=b2.CLASS_CODE;
   if PK_SOURCE_TAG is not null then
   update BD_MATERIAL set pk_source=PK_SOURCE_TAG where CODE=b2.CLASS_CODE;
   end if;

update TEMP_SERIES set STATUS = 1,UPDATE_DATE=sysdate where STATUS = 0 and CREATE_DATE <= CUR_TIME;
COMMIT;

END;

执行上面语句时候,报错

ora-00904 “b2”."BRAND_CODE "标识符无效
就是where子句在此不能使用B2这个别名,应该怎么换呢?求大神们赐教,谢谢!

时间: 2024-09-04 10:37:32

oracle11g-oracle的merge into中 where子句不能使用别名问题的相关文章

MySQL中实现插入或更新操作(类似Oracle的merge语句)_Mysql

如果需要在MySQL中实现记录不存在则insert,不存在则update操作.可以使用以下语句: 更新一个字段: INSERT INTO tbl (columnA,columnB,columnC) VALUES (1,2,3) ON DUPLICATE KEY UPDATE columnA=IF(columnB>0,1,columnA) 更新多个字段: INSERT INTO tbl (columnA,columnB,columnC) VALUES (1,2,3) ON DUPLICATE KE

SQL Server中TOP子句可能导致的问题以及解决办法

原文:SQL Server中TOP子句可能导致的问题以及解决办法 简介      在SQL Server中,针对复杂查询使用TOP子句可能会出现对性能的影响,这种影响可能是好的影响,也可能是坏的影响,针对不同的情况有不同的可能性.      关系数据库中SQL语句只是一个抽象的概念,不包含任何逻辑.很多元数据都会影响执行计划的生成,SQL语句本身并不作为生成执行计划所参考的元数据(提示除外),但TOP关键字却是直接影响执行计划的一个关键字,因此在某些情况下使用TOP会导致性能受到影响,下面我们来

oracle修改一个表中的主键字段值,与其外键关联的另一个表中的相应字段值也改变

问题描述 oracle修改一个表中的主键字段值,与其外键关联的另一个表中的相应字段值也改变 oracle 中修改一个表中的主键字段值,与其外键关联的另一个表中的相应字段值也改变? 有如下两张表,表a和表b 表a 结构如下: ID Name age 1 lisi 18 2 wangwu 21 3 sunliu 34 4 yiliu 24 ... ... ... 其中ID字段为表a主键且自增 表b结构如下: CID CNAME ID 1 aaaaa 1 2 bbbbb 2 3 cccccc 4 4

Oracle或者Pl/Sql中001与1一样吗?

今天写了一个插入语句,往表C中插入数据.insert into 表名(列名) values () where A.列aa=B.列bb;      但半天没反应,select aa from A;select bb from B,发现存在相等的值      A中的aa是1,2,3:B中是001,002,003 解决:把1改为001,2改为002,3改为003后问题解决,从此可以看出001与1在Oracle或者Pl/Sql中是不一样的!     这个问题很可能是由于在数据库中这个字段是字符型的,导致

表空间 数据文件-oracle数据库表空间中的数据文件自动扩展到32G后不再自动扩展

问题描述 oracle数据库表空间中的数据文件自动扩展到32G后不再自动扩展 CSDN移动问答oracle表空间中的数据文件自动扩展到32G后不再自动扩展,报ora-01653错误,我之后手动加了个数据文件,但是不久之后这个数据文件自动扩展到了32G又报错,请问这是什么原因,难道以后只能手动添加数据文件么????

oracle视图V$CLIENT_STATS中查不到数据

问题描述 oracle视图V$CLIENT_STATS中查不到数据 想试试DBMS_MONITOR.CLIENT_ID_STAT_DISABLE包的作用,需要填写一个client标识符,需要用到 V$CLIENT_STATS视图中的CLIENT_IDENTIFIER字段的数据,但是,在查询V$CLIENT_STATS时没有任何数据,请问如何做才可以使这个视图中显示一些数据? 解决方案 [转]oracle 动态性能(V$)视图oracle v$视图

如何解读:熟悉SQL Server、Oracle等常见数据库中的至少一种数据库

问题描述 招聘要求上经常有熟悉SQLServer.Oracle等常见数据库中的至少一种数据库的要求,不知道,到底要掌握到神马程度呢?需要掌握哪些技能.还望哪位大虾指点一二 解决方案 解决方案二:会insertdeleteupdateselect会create解决方案三:引用1楼ztglf521的回复: 会insertdeleteupdateselect会create 这个是最今本的吧,就行了么?解决方案四:基本的命令可以有很多组合的,不是那么简单的.另有groupby,orderby.各类函数.

oracle能给表中数据赋予权限么?

问题描述 oracle能给表中数据赋予权限么? 现在我有一张教师表和一张学生学籍表,需要让教师具有查看学生学籍的权限能不能实现? 如果能实现,该怎么实现?(请注意,这里是教师表,不是oracle用户) 解决方案 不能满足你的要求,你这个授权需要通过自己的业务逻辑去实现.orzcle中的授权是针对oracle用户的授权,你这个是针对业务数据的授权,oracle是搞不定的.可以增加角色表,在角色中的用户都可以查看学生学籍 解决方案二: 你自己都说了不是oracle用户, 你可以判断用户是不是存在与教

MySQL中Union子句不支持order by的解决方法_Mysql

本文实例讲述了MySQL中Union子句不支持order by的解决方法.分享给大家供大家参考,具体如下: 我对DB知之甚少,这问题只在MySQL遇到,不知道别的DBMS是不是也如此. 问题是这样的,我打算在一个表里获得与某一行记录相邻的两行,并且想通过union一起取出来,所以这么写: select id,title from subjects where id>#some_id# order by id limit 1 union select id,title from subjects