CREATE OR REPLACE
PROCEDURE PROCEDURE1 AS
BEGIN
 CREATE GLOBAL TEMPORARY TABLE email_temp
(name varchar(10),
nm char(10)
);
insert into email_temp;
SELECT case when(INSTR(read_state,',321088770429811,'))>0 
then '已读' else '未读' end 阅读状态,count(id) 条
FROM oa_email where INSTR(addressed,',321088770429811,')>0
group by case when(INSTR(read_state,',321088770429811,'))>0 
then '已读' else '未读' end ;select * from email_temp;
END PROCEDURE1;报错如下:
Error(4,2): PLS-00103: 出现符号 "CREATE"在需要下列之一时:  begin case declare exit    for goto if loop mod null pragma raise return select update    while with <an identifier>    <a double-quoted delimited-identifier> <a bind variable> <<    close current delete fetch lock insert open rollback    savepoint set sql execute commit forall merge pipe 

解决方案 »

  1.   

    1、创建表要用动态sql
    2、不用直接select
      

  2.   

    我已经成功的建立的临时表,临时表我是事先建好的.不过下面的代码仍然无法实现
    insert into email_temp;
    SELECT case when(INSTR(read_state,',321088770429811,'))>0 
    then '已读' else '未读' end 阅读状态,count(id) 条
    FROM oa_email where INSTR(addressed,',321088770429811,')>0
    group by case when(INSTR(read_state,',321088770429811,'))>0 
    then '已读' else '未读' end ;select * from email_temp;
      

  3.   

    郁闷死了.即使只写一句也报错.email_temp是我已经建好的临时表,而且已经能在管理器里看见了.
    create or replace PROCEDURE PROCEDURE1 AS
    BEGIN
      insert into email_temp values ('zhan',23) ;
    END PROCEDURE1;Error(4,3): PL/SQL: SQL Statement ignored
    Error(4,15): PL/SQL: ORA-00942: 表或视图不存在
      

  4.   

    一楼的正确,全部使用动态SQL,
    然后用Execute immediate  ;
    以前好像遇到过类似问题
      

  5.   

    表的拥有者和存储过程的拥有者是否是一致?如果不一致,应该在表名前加上用户名。
    如system.email_temp 
      

  6.   

    select * from email_temp;不能将这个语句写入过程中。要加INTO保留字