+ -
当前位置:首页 → 问答吧 → 如何在查询语句中建立一个临时表

如何在查询语句中建立一个临时表

时间:2011-09-15

来源:互联网

大家好,我使用plsqldev.exe登录服务器的oracle数据库采集部分信息。
遇到一个问题
在某些情况下,我想要查询与某些特定内容有关的数据,
比如查询主队或客队中含有(湖人、小牛、马刺)这样的比赛记录。以下是一个查询信息的SQL
SQL code
SELECT BSC.NAME BSC,
             BTS.SEGMENT_ID SEG,
             BTS.LA_ID_LAC LAC,
             BTS.CELL_ID CI,
             ABSC.NAME ABSC,
             ABTS.SEGMENT_ID ASEG,
             ABTS.LA_ID_LAC ALAC,
             ABTS.CELL_ID ACI,
             ADJ.HO_MARGIN_PBGT PMRG,
             ADJ.RX_LEV_MIN_CELL - 110 SL,
             DECODE(BTS.cell_reselect_param_ind, 0, 0, 1) *
             DECODE(BTS.penalty_time, 31, -1, 1) * BTS.cell_reselect_offset * 2 REO,
             DECODE(ABTS.cell_reselect_param_ind, 0, 0, 1) *
             DECODE(ABTS.penalty_time, 31, -1, 1) * ABTS.cell_reselect_offset * 2 AREO,
             DECODE(BTS.cell_reselect_param_ind, 0, 0, 1) *
             DECODE(BTS.penalty_time, 31, -1, 1) * BTS.cell_reselect_offset * 2 -
             BTS.RX_LEV_ACCESS_MIN CRO,
             DECODE(ABTS.cell_reselect_param_ind, 0, 0, 1) *
             DECODE(ABTS.penalty_time, 31, -1, 1) * ABTS.cell_reselect_offset * 2 -
             ABTS.RX_LEV_ACCESS_MIN AREO,
             BTS.RX_LEV_ACCESS_MIN - 110 RXP,
             ABTS.RX_LEV_ACCESS_MIN - 110 ARXP
    FROM C_ADJACENT_CELL ADJ,
             C_BTS           BTS,
             OBJECTS         BSC,
             C_BTS           ABTS,
             OBJECTS         ABSC
 WHERE BSC.INT_ID = BTS.BSC_INT_ID
     AND BTS.INT_ID = ADJ.BTS_INT_ID
     AND ADJ.ADJ_CELL_INT_ID = ABTS.INT_ID
     AND ABTS.BSC_INT_ID = ABSC.INT_ID
     AND (BSC.NAME LIKE 'LC%' OR BSC.NAME LIKE 'LIC%')
     AND BTS.CELL_ID IN (25011, 25012, 27003, 27741, 27743, 56121, 57421, 57422, 59231)
     AND ABTS.CELL_ID IN (25011, 25012, 27003, 27741, 27743, 56121, 57421, 57422, 59231)

最后两行就是我希望能解决的部分,
现在我只会用笨办法,输入两次或者替换为
AND BTS.CELL_ID IN (&cilist)
AND ABTS.CELL_ID IN (&cilist)
这样可以只输入一次,但比较麻烦,不直观。
我想请教各位,可不可以自己定义一个表A,内容就只有一个字段,数据就是以上的CELL_ID。
这样我只要用(BTS.CELL_ID=A.CI or ABTS.CELL_ID=A.CI)替换以上的部分。以后直接修改A表就行了。
——
这个表是随时都要变的,我只能在自己的SQL语句里修改,不能修改oracle端。谢谢大家

作者: idseair   发布时间: 2011-09-15

SQL code
-- 自己去查资料:
scott@TBWORA> CREATE GLOBAL TEMPORARY TABLE T1_MEM ON COMMIT PRESERVE ROWS AS SELECT * FROM EMP WHERE 1=2;

表已创建。

作者: luoyoumou   发布时间: 2011-09-15

-- Oracle 有两种类型的临时表:事务临时表 和 会话临时表

作者: luoyoumou   发布时间: 2011-09-15