2017-01-26 5 views
2

Я понял, что программа sqldeveloper использует некоторые проверки, которые я никогда раньше не видел при создании автоматически сгенерированных SQL-скриптов, и это не имеет для меня никакого смысла. Кто-нибудь знает их цель? например сравнение «VARCHAR2» = «NUMBER».Какова цель таких проверок, как «VARCHAR2» = «NUMBER» в сценариях sqldeveloper с автоматическим генерированием?

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; 
/
+1

Чувствуется, что SQL исходит из шаблона с заполнителями. –

ответ

4

Запрос, вероятно, написано примерно так:

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

Вы видите выход, когда переменные замещения были применены к нему.

0

Я думаю, что система использует динамически сгенерированный код, который исходит от фиксированного формата, который содержит какие-заполнители или, скорее, переменных сцеплений:

EXECUTE IMMEDIATE 'ALTER TABLE "' || TABLENAME || " ADD ...'; 

Тип столбца может иметь три форматы:

  • TYPENAME
  • TYPENAME(param1)
  • TYPENAME(param1, param2)

... и у них есть шаблон, который охватывает все три ситуации, делая тщательно рассчитанные сравнения.

 Смежные вопросы

  • Нет связанных вопросов^_^