2017-01-26 7 views
2

私は、自動生成されたSQLスクリプトを作成するときに、今までに見たことがないいくつかのチェックをsqldeveloperプログラムが使用していることに気付きました。誰も彼らの目的を知っていますか?たとえば、 'VARCHAR2' = 'NUMBER'の比較です。自動生成されたsqldeveloperスクリプトで '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; 
/
+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 ...'; 

列の型が3を持つことができます形式:

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

...そして、彼らは慎重に計算し比較を行うことにより、3つのすべての状況をカバーテンプレートを持っています。

関連する問題