select '新鸿花园' 建筑物名称,
        ga.fulladdr 全地址,
        ga.addr_grade 地址等级,
        ga.dong 栋数,
        ga.danyuan 单元,
        ga.ceng 楼层,
        ga.fangjian 房间,
        fa.stid 标准地址id,
        sv.acc_nbr 业务接入号,
        sv.zjdz 装机地址
   into tmp_heqiyu
   from gz_addr ga,
        stg_serv sv
   where ga.stid=sv.serv_addr_id(+)
     and ga.p_stid=56187
     order by ga.dong,ga.danyuan,ga.ceng,ga.fangjian这个执行后为何会提示missing keyword的错误?并且显示tmp_heqiyu有错误,把字段后面的汉字去掉也没用,难道是有外连接时就不能这么写了?

解决方案 »

  1.   

     into tmp_heqiyu这里不能这么用~~~
      

  2.   

    你用的是sqlserver的写法吧。
    你改成:insert into table(column_Name1,column_Name2) select columnN1,columnN2 from table2 where xxxxx ;
    以这样形式看看。
      

  3.   

    在oracle中要声明变量tmp_heqiyu,才能into tmp_heqiyu,否则这样用是不允许的。
      

  4.   

    用CTAS语句
    create table tmp_heqiyu as 
    select '新鸿花园' 建筑物名称,
      ga.fulladdr 全地址,
      ga.addr_grade 地址等级,
      ga.dong 栋数,
      ga.danyuan 单元,
      ga.ceng 楼层,
      ga.fangjian 房间,
      fa.stid 标准地址id,
      sv.acc_nbr 业务接入号,
      sv.zjdz 装机地址
      from gz_addr ga,
      stg_serv sv
      where ga.stid=sv.serv_addr_id(+)
      and ga.p_stid=56187
      order by ga.dong,ga.danyuan,ga.ceng,ga.fangjian
      

  5.   

    这个tmp_heqiyu 你是打算来干嘛的哦  into 只有在函数和过程里用的哦 楼上几位都写得有理
      

  6.   

    insert into tmp_heqiyu 才要求tmp_heqiyu要事先存在,select into 就是为了不先创建表的吧?
      

  7.   

    网上不是这么说的吗:
    第一句(select into from)要求目标表(destTbl)不存在,因为在插入时会自动创建;
    第二句(insert into select from)要求目标表(destTbl)存在。
      

  8.   


    -- 首先:你的错误有2:
    -- 其一:如果你的select 语句的结果一定有且只有一条记录,那么此时你可用select ... into 到 变量(s)-- 其二:你的 select 部分有几个字段,后面就应该用几个变量与之对应起来:
    --      你想一下:某条记录的一个字段的数据只能保存入一个变量,对吧?
    --      那么N个字段的一条数据就应该用N个变量去保存,且注意变量的数据类型与字段的数据类型一致(或保持兼容)
      

  9.   


    -- 当然:也许你的变量 tmp_heqiyu 是一个类型变量,我想这个时候你这样的操作就应该是正确的,
    --       我也没看到你的 tmp_heqiyu 变量的定义!
    -- 给类型变量赋值的例子如下:DECLARE
      course_rec course%ROTTYPE;
    BEGIN
      SELECT *
        INTO course_rec
        FROM course
       WHERE coursc_no = 25;  DBMS_OUTPUT.PUT_LINE ('Course No: '||course_rec.course_no);
      DBMS_OUTPUT.PUT_LINE ('Course Description: '||course_rec.description);
      DBMS_OUTPUT.PUT_LINE ('Prerequisite: '||course_rec.prerequisite);
    END;
    /
      

  10.   

    -- 上面的代码 rowtype 写错啦,正确例子如下:
    scott@TBWORA> DECLARE
      2    v_emp emp%ROWTYPE;
      3  BEGIN
      4    SELECT *
      5      INTO v_emp
      6      FROM emp
      7     WHERE empno = 7902;
      8
      9    DBMS_OUTPUT.PUT_LINE ('Empno: '||v_emp.empno);
     10    DBMS_OUTPUT.PUT_LINE ('Ename: '||v_emp.ename);
     11    DBMS_OUTPUT.PUT_LINE ('Job: '||v_emp.job);
     12    DBMS_OUTPUT.PUT_LINE ('Mgr: '||v_emp.mgr);
     13    DBMS_OUTPUT.PUT_LINE ('Hiredate: '||to_char(v_emp.hiredate,'yyyy-mm-dd hh24:mi:ss'));
     14    DBMS_OUTPUT.PUT_LINE ('Sal: '||v_emp.Sal);
     15    DBMS_OUTPUT.PUT_LINE ('Comm: '||v_emp.Comm);
     16    DBMS_OUTPUT.PUT_LINE ('Deptno: '||v_emp.deptno);
     17  END;
     18  /
    Empno: 7902
    Ename: FORD
    Job: ANALYST
    Mgr: 7566
    Hiredate: 1981-12-03 00:00:00
    Sal: 3000
    Comm:
    Deptno: 20PL/SQL 过程已成功完成。
      

  11.   

    into  需要写在一个plsql块里面吧。
    否则你into的量又有何用?
      

  12.   

    select into 是mssql里面的写法  oracle类似的写法应该这样  select into在oracle里面是赋值语句。create table tmp_heqiyu as 
    select '新鸿花园' 建筑物名称,
      ga.fulladdr 全地址,
      ga.addr_grade 地址等级,
      ga.dong 栋数,
      ga.danyuan 单元,
      ga.ceng 楼层,
      ga.fangjian 房间,
      fa.stid 标准地址id,
      sv.acc_nbr 业务接入号,
      sv.zjdz 装机地址
      from gz_addr ga,
      stg_serv sv
      where ga.stid=sv.serv_addr_id(+)
      and ga.p_stid=56187
      order by ga.dong,ga.danyuan,ga.ceng,ga.fangjian
      

  13.   

    明白了,特别感谢luoyoumou!!!