日期:2014-05-16  浏览次数:20923 次

请帮忙看一个存储过程~~
CREATE OR REPLACE PROCEDURE insert_test1
as
  v_date varchar2(50);
  v_sql varchar(2000);
  begin 
  select to_char(sysdate-1/(60*24),'yyyyMMddHHmi') INTO v_date from dual;--查询当前时间的前一分钟
   v_sql:='create table view_test_'||v_date||' as(select count(1) js from g_test)';--组成SQL创建表
  EXECUTE IMMEDIATE v_sql;
  commit;
end;
上面这个存储过程为什么是错的?能编译过去,但是执行不了,我直接拿出来.

declare
  v_date varchar2(50);
  v_sql varchar(2000);
  begin 
  select to_char(sysdate-1/(60*24),'yyyyMMddHHmi') INTO v_date from dual;--查询当前时间的前一分钟
   v_sql:='create table view_test_'||v_date||' as(select count(1) js from g_test)';--组成SQL创建表
  EXECUTE IMMEDIATE v_sql;

这样执行是对的~~
------解决方案--------------------
怎么就执行不了?

17:01:23 @ > conn / as sysdba
已连接。
17:01:28 SYS@tdwora > grant create any table to scott;

授权成功。

17:01:29 SYS@tdwora > conn scott/bee56915
已连接。
17:01:37 SCOTT@tdwora > CREATE OR REPLACE PROCEDURE insert_test1
17:01:50   2  as
17:01:50   3    v_date varchar2(50);
17:01:50   4    v_sql varchar(2000);
17:01:50   5    begin
17:01:50   6    select to_char(sysdate-1/(60*24),'yyyyMMddHHmi') INTO v_date from dual;--查询当前时间的前一分钟
17:01:50   7    v_sql:='create table view_test_'
------解决方案--------------------
v_date
------解决方案--------------------
' as select count(1) js from g_test';--组成SQL创建表
17:01:50   8    EXECUTE IMMEDIATE v_sql;
17:01:50   9    commit;
17:01:50  10  end;
17:01:50  11  /

SP2-0804: 过程已创建, 但带有编译警告

17:01:52 SCOTT@tdwora > exec insert_test1;

PL/SQL 过程已成功完成。

17:02:53 SCOTT@tdwora > select table_name from user_tables where table_name like 'VIEW%';

VIEW_TEST_201209210500

17:03:16 SCOTT@tdwora > SELECT * FROM VIEW_TEST_201209210500;

         2

17:03:33 SCOTT@tdwora > set heading of
SP2-0265: heading 必须设置为 ON 或 OFF
17:04:02 SCOTT@tdwora > set heading on
17:04:05 SCOTT@tdwora > SELECT * FROM VIEW_TEST_201209210500;

        JS
----------
         2