在自动生成的 sqldeveloper 脚本中检查 'VARCHAR2' = 'NUMBER' 的目的是什么?
What is the purpose of the checks like 'VARCHAR2' = 'NUMBER' in auto-generated sqldeveloper scripts?
我意识到 sqldeveloper 程序使用了一些我以前在创建自动生成的 SQL 脚本时从未见过的检查,这对我来说毫无意义。有谁知道他们的目的吗?例如 'VARCHAR2' = 'NUMBER' 比较。
begin
if 'VARCHAR2' = 'NUMBER' and length('VARCHAR2')>0 and length('100')>0 then
execute immediate 'alter table "MYTABLE" add(COLUMN1 VARCHAR2(, 100))';
elsif ('VARCHAR2' = 'NUMBER' and length('VARCHAR2')>0 and length('100')=0) or
'VARCHAR2' = 'VARCHAR2' then
execute immediate 'alter table "MYTABLE" add(COLUMN1 VARCHAR2(100))';
else
execute immediate 'alter table "MYTABLE" add(COLUMN1 VARCHAR2)';
end if;
end;
/
我的猜测是系统使用动态生成的代码,该代码来自固定格式,其中包含某种占位符,或者更有可能是变量连接:
EXECUTE IMMEDIATE 'ALTER TABLE "' || TABLENAME || " ADD ...';
一个列类型可以有三种格式:
TYPENAME
TYPENAME(param1)
TYPENAME(param1, param2)
...他们有一个模板,通过仔细计算比较来涵盖所有三种情况。
查询大概是这样写的:
begin
if '&type' = 'NUMBER'
and length('&type')>0
and length('&size')>0
then
execute immediate 'alter table "&tablename" add(&columnname &type(&scale, &size))';
elsif ( '&type' = 'NUMBER'
and length('&type')>0
and length('&size')=0
)
or '&type' = 'VARCHAR2'
then
execute immediate 'alter table "&tablename" add(&columnname &type(&size))';
else
execute immediate 'alter table "&tablename" add(&columnname &type)';
end if;
end;
/
您将看到应用替换变量后的输出。
我意识到 sqldeveloper 程序使用了一些我以前在创建自动生成的 SQL 脚本时从未见过的检查,这对我来说毫无意义。有谁知道他们的目的吗?例如 'VARCHAR2' = 'NUMBER' 比较。
begin if 'VARCHAR2' = 'NUMBER' and length('VARCHAR2')>0 and length('100')>0 then execute immediate 'alter table "MYTABLE" add(COLUMN1 VARCHAR2(, 100))'; elsif ('VARCHAR2' = 'NUMBER' and length('VARCHAR2')>0 and length('100')=0) or 'VARCHAR2' = 'VARCHAR2' then execute immediate 'alter table "MYTABLE" add(COLUMN1 VARCHAR2(100))'; else execute immediate 'alter table "MYTABLE" add(COLUMN1 VARCHAR2)'; end if; end; /
我的猜测是系统使用动态生成的代码,该代码来自固定格式,其中包含某种占位符,或者更有可能是变量连接:
EXECUTE IMMEDIATE 'ALTER TABLE "' || TABLENAME || " ADD ...';
一个列类型可以有三种格式:
TYPENAME
TYPENAME(param1)
TYPENAME(param1, param2)
...他们有一个模板,通过仔细计算比较来涵盖所有三种情况。
查询大概是这样写的:
begin
if '&type' = 'NUMBER'
and length('&type')>0
and length('&size')>0
then
execute immediate 'alter table "&tablename" add(&columnname &type(&scale, &size))';
elsif ( '&type' = 'NUMBER'
and length('&type')>0
and length('&size')=0
)
or '&type' = 'VARCHAR2'
then
execute immediate 'alter table "&tablename" add(&columnname &type(&size))';
else
execute immediate 'alter table "&tablename" add(&columnname &type)';
end if;
end;
/
您将看到应用替换变量后的输出。