我从SQL SERVER 2000里面导到ORACLE数据库 用的SQL SERVER 2000的DTS工具 创建的模式是"SYSTEM"."t_user" 后来在用到这个表的时候 每次都要加表空间前缀 而且表名称都要加“”,为了解决这个
CREATE OR REPLACE  PROCEDURE SYSTEM.DFSDFS  AS
cursor c_mycursor is 
SELECT TABLE_NAME  FROM ALL_TAB_COMMENTS WHERE OWNER = 'SYSTEM' AND 
TABLE_TYPE = 'TABLE' AND TABLE_NAME <> UPPER(TABLE_NAME) ;
TABLENAME1 VARCHAR2(100);
 str VARCHAR2(100);
begin
  
  open c_mycursor;
   loop
     begin
     fetch c_mycursor into TABLENAME1;
      
     
     exit when c_mycursor%notfound;
      
     str:='alter table system."'||TABLENAME1||'" rename to ' || TABLENAME1;
   
     execute immediate str ;     end;
     
   end loop;
   close c_mycursor;
   
 exception 
 when others then 
 rollback;
end;
我用这个把表名称都处理了 
可是 我在点击表 然后选择“显示DDL的相关性”导出的语句怎么还是CREATE TABLE "SYSTEM"."T_USER" 
我看了下 如果我创建一个临时表CREATE TABLE SYSTEM.T_CESHI用的是不加引号的方式 在“显示DDL的相关性”后创建语句还是CREATE TABLE "SYSTEM"."T_CESHI" 
这是怎么回事 有人明白的帮我解答下 

解决方案 »

  1.   

    你cursor根本就没有更新你的表啊!结果集没有:
    SELECT TABLE_NAME FROM ALL_TAB_COMMENTS WHERE OWNER = 'SYSTEM' AND  
    TABLE_TYPE = 'TABLE' AND TABLE_NAME = UPPER(TABLE_NAME) ;
      

  2.   

    我的意思就是非常简单了
    CREATE TABLE "SYSTEM"."T_CESHI" 

    CREATE TABLE SYSTEM.T_CESHI
    有没有区别两种表 我在 select * from  SYSTEM.T_CESHI 这个语句中都可以查询出来
      

  3.   


    这是oracle 的标准规范像mssql 的SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    SET ANSI_PADDING ON
    GO
    CREATE TABLE [dbo].[c_bill](
    [billcode] [varchar](10) COLLATE Chinese_PRC_CI_AS NOT NULL,
    [billname] [varchar](40) COLLATE Chinese_PRC_CI_AS NOT NULL,
    [serialtype] [varchar](30) COLLATE Chinese_PRC_CI_AS NOT NULL,
    [serialno] [numeric](20, 0) NOT NULL,
    [serialdate] [datetime] NULL,
     CONSTRAINT [pk_c_bill] PRIMARY KEY CLUSTERED 
    (
    [billcode] ASC
    ) ON [PRIMARY]
    ) ON [PRIMARY]GO
    SET ANSI_PADDING OFF
      

  4.   

    你所谓的标准规范是不是就是CREATE TABLE SYSTEM.T_CESHI 这种不带引号的 可我为什么在显示表的DDL的时候 是这种呢CREATE TABLE "SYSTEM"."T_CESHI"
    我目前想把临时表 存储过程的创建语句导出来 我是问
    CREATE TABLE "SYSTEM"."T_CESHI"  

    CREATE TABLE SYSTEM.T_CESHI
    有没有区别
    哪个用起来一定没问题
      

  5.   

    这个主要是因为大小写的问题.默认情况下,oracle会将你的表名里的小写字母全部替换成大写字母,当你用双引号包含的时候,oracle不做这种替换,但是这也就将造成你访问表的时候要加双引号,并且表名里的大小写都要对应.如下.
    SQL> create table 'aa' (id number(10));
     
    create table 'aa' (id number(10))
     
    ORA-00903: invalid table name
     
    SQL> create table "aa" (id number(10));
     
    Table created
     
    SQL> select * from  aa;
     
    select * from  aa
     
    ORA-00942: table or view does not exist
     
    SQL> select * from "aa";
     
             ID
    -----------
     
    SQL> drop table "aa";
     
    Table dropped
     
    SQL> create table aa (id number(10));
     
    Table created
     
    SQL> select * from aa;
     
             ID
    -----------
     
    SQL> select * from AA;
     
             ID
    -----------
     
    SQL> select * from "AA";
     
             ID
    -----------
     
    SQL> select * from "aa";
     
    select * from "aa"
     
    ORA-00942: table or view does not exist
     
    SQL> 
      

  6.   

    这么看来 还是不加引号的好啊 能适应很多种 我在把创建语句导出来的时候 把引号全去掉好了
    目前我把存储过程语句创建语句导出来 用的就是那个”显示对象DDL“ 然后CREATE里面就出现双引号的"SYSTEM"."T_CESHI"这种模式了 还有其他方法把DDL创建语句导出来吗
      

  7.   

    没用过你用的工具.但是在plsql developer里,你用"加大写字母建的表.view的时候,建表语句里是没"的.
      

  8.   

    SQL SERVER 2000的DTS工具,在创建表的时候都会在表的两边加上双引号,按这种方式创建的表查询没有问题,但是要用 drop table "表名" ,
      

  9.   


    我用的就是plsql developer啊 我刚才说的”显示对象DDL“是ORACLE数据库点击表名然后得选项 我刚才看
    plsql developer里了 好像在SYSTEM/OBJECTS/TABLES下面 然后选择表名字 点DBMS_metddate选择DDL也可以显示出来建表语句 不过那里的也同样是 create table "SYSTEM"."T_CESHI"这种模式的 我就那么了 我创建表的时候是create table SYSTEM.T_CESHI这样的 导出DDL怎么就变成create table "SYSTEM"."T_CESHI"这种了呢
      

  10.   

    没用过你用的工具.但是在plsql developer里,你用"加大写字母建的表.view的时候,建表语句里是没"的.
    这里面的.view是什么啊  view不是视图吗
      

  11.   

    打开一个command窗口,输入 view 表名.会弹出表的属性窗口,点右下角的view sql可以看表的创建语句.
    当然你在table列表里右键点view也能弹出这个窗口.
    如果是中文版可以能叫查看吧.
      

  12.   

    呵呵  我用的就是那个中文的 你说的COMMAND窗口是啥 在哪里打开
      

  13.   

    file->new->command windows
    中文版应该是
    文件->新建->命令窗口
      

  14.   

    CREATE TABLE "SYSTEM"."T_CESHI"  

    CREATE TABLE SYSTEM.T_CESHI
    有没有区别-----------------
    有区别的,如果不加引号,默认全部是大写,如果在引号里面,可以为小写,oracle不会自动转换
      

  15.   

    好像不对哦 我打开的就像是SQLPLUS界面 像这样的
    sql>
      

  16.   

    可能COMMAND窗口我不会用 呵呵 你输入表名 那根本执行不过去嘛 不是SQL语句 不过我在”当然你在table列表里右键点view也能弹出这个窗口.
    如果是中文版可以能叫查看吧.“这个里面找到了 呵呵
      

  17.   

    还真是啊  你说的是对的 确实没有"" 呵呵 拿我就用这个查DDL创建表语句好了
      

  18.   

    是输入 view 表名,不是直接输入表名.