在oracle建表的时候遇到了一些问题,列名加“”和不加的区别,再此记录:
在Oracle中,在创建表时使用双引号将列名括起来,会使得列名区分大小写,并且允许使用特殊字符和保留字作为列名。
如果你在创建表时没有使用双引号括起来的列名,Oracle会自动将其转换为大写并视为不区分大小写的名称。在这种情况下,你不能使用特殊字符或保留字作为列名。
例如,考虑以下两个创建表的语句:
CREATE TABLE mytable ("Name" VARCHAR2(50), "Type" VARCHAR2(50));
CREATE TABLE mytable (Name VARCHAR2(50), Type VARCHAR2(50));
在第一个语句中,列名"Name"和"Type"被双引号括起来,这使它们区分大小写,并允许使用保留字作为列名。在第二个语句中,列名没有被双引号括起来,并被转换为大写,这使得它们不区分大小写,并且不允许使用保留字作为列名。
通常建议避免在列名中使用双引号,除非绝对必要,因为它可能会使你的SQL查询更加复杂,并且在不同的数据库系统之间移植性较差。
另外再建表的时候,需要主要不要drop先把表删除,不然会把客户的数据删除掉,我们可以先判断表是否存在再进行建表。
declare
v_cnt pls_integer;
v_tab_cnt pls_integer:=0;
v_tabname varchar2(50);
v_col varchar2(100);
v_dbuser varchar2(50);
begin
select count(*) into v_cnt from user_tables a where a.table_name=upper('mytable');
if v_cnt=0
execute immediate 'CREATE TABLE mytable ("Name" VARCHAR2(50), "Type" VARCHAR2(50));';
end if;
select count(*) into v_cnt from user_indexes a where a.index_name=upper('idx_mytable_1');
if v_cnt=0 then
execute immediate 'create index idx_mytable_1 on mytable (Name)';
end if;
commit;
end;