以前在sqlserver 2008中,可以使用CTE进行开发,避免了定义很多临时表,代码结构也比较清晰,现在转到了oracle上面开发,发现CTE只允许在查询中使用,无法在存储过程中使用,这是为何,查了半天这方面的资料,没有一个确切的答案,上来指教大家Oracle存储SQL ServerStructureCTE

解决方案 »

  1.   

    oracle总是推崇它自己的工具SQL developer,感觉还行,PL/SQL developer也行
      

  2.   

    with table as怎么不能在存储过程里使用,只要oracle的SQL支持的语法PL/SQL都支持。说不能用是因为你不知道select语句在racle的存储过程里怎么用。写个select * from table 在存储过程里用明白了,with table as一样用。
      

  3.   

    create table t_emp as select * from scott.emp where 1=2;
    /
    create or replace procedure cte is
    begin  insert into t_emp
        with emp_1 as
         (select * from scott.emp)
        select * from emp_1;  commit;end;
    /
      

  4.   

    晕,在sqlserver中insert into 是放在CTE下面插入的,所以我也以为在oracle中CTE的用法一致,因为我是用CTE查询方式测试过正确的。看来oracle还是有差别的。另外我想问一下scott.emp这个表再oracle中是什么表,感谢u010412956给出的实例,让我明白那里错了,感觉oracle的cte资料比较少,我查了google很多,就是没有找到很有用的信息
      

  5.   

    另外能不能再给个update和delete的cte实例,谢谢!
      

  6.   


    scott.emp 是oracle安装时 可以选择自带的一个样例库中的用户,供学习使用
      

  7.   

    with + update 和delete 我也没在工作中用过,不知道可以不。
      

  8.   

    scott是oracle的一个sample用户,其中的对象,都是用来测试和学习用的,mssql里,似乎也有sample库的。
    我也是只用过insert,delete,update你可以自己测试下,merge语句我试过,似乎不支持的,当时的版本是10g.