oracle相关

我爱海鲸 2023-03-29 19:44:16 暂无标签

简介oracle中遇到的问题

在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;

 

你好:我的2025