日期:2014-05-17  浏览次数:21217 次

在PL/SQL Developer中为啥看不到自己建的表呢?
PL/SQL Developer 执行以下PL/SQL语句:

SQL code

--创建无参存储过程
CREATE OR REPLACE FUNCTION CreateTables RETURN VARCHAR2 IS
    --声明语句段
    v_SQL varchar2(10000);
BEGIN
    --执行语句段
    /*
Create by zjc  2012-06-29
指标分解总表*/

v_SQL :=  '
create table TB_TGT_DECOM_TABLES
(
  id     VARCHAR2(40) not null,
  prod_type   NUMBER(4), 
  designer      VARCHAR2(40),  
  year    NUMBER(5), 
  name    VARCHAR2(40), 
  pro_comment VARCHAR2(200)  
)
 ';

execute immediate v_SQL;

commit;

END CreateTables;


declare
  str varchar2(1000);
   CURSOR tname_cursor IS
   SELECT table_name
   FROM user_tables
   where table_name like 'TB_TGT_%';
  
    begin
    
   CreateTables();
  
END; 




  执行中无错误发生,然后新开一个窗口查询自己新建的表:
SQL code

 SELECT table_name
   FROM user_tables
   where table_name like 'TB_TGT_%';



  什么结果也查询不到。直接使用创建表的语句:

SQL code

create table TB_TGT_DECOM_TABLES
(
  id     VARCHAR2(40) not null,
  prod_type   NUMBER(4), 
  designer      VARCHAR2(40),  
  year    NUMBER(5), 
  name    VARCHAR2(40), 
  pro_comment VARCHAR2(200)  
)



  这个倒是可以查询得到新建的表。为何用PL/SQL语句建表不成功呢?







------解决方案--------------------
看下all_tables下创建表的owner是谁
------解决方案--------------------
也有可能是lz打开了两个窗口,而这两个窗口连接的是不同的DB~
------解决方案--------------------
lz看看新开的窗口是不是连接的同一个DB~
------解决方案--------------------
function 可以执行这个吗? 换成procedure吧。
------解决方案--------------------
探讨
引用:

function 可以执行这个吗? 换成procedure吧。


请问创建function的语句和调用functin的语句是不是需要分开两步执行啊?

------解决方案--------------------
有可能是用户没有显式授权create table 的权限,好像有时候是会出现权限不足而无法创建表的情况的。
这时就需要要在Execute之前先grant create table to user;
------解决方案--------------------
o1,笑到我觉得为契机