-1
我有列表框中的表名來檢查相同的表是否有相同的列。例如Foreach循環在Rich文本框中查看結果,但僅查看第一個查詢結果。
listBox3有EMPLOYEE表名我的查詢必須檢查EMPLOYEE表是否有不同的列。
此查詢的工作方式如下:userA具有Employee表,UserB具有Employee表。比較兩個用戶的Employee表後,我得到了richTextBox1上的Alter語句。
取決於我的EMPLOYEE表我想看看下面的結果;
alter table EMPLOYEE add description VARCHAR2(15);
alter table EMPLOYEE add CITY VARCHAR2(10);
但僅看到:
ALTER TABLE EMPLOYEE添加描述VARCHAR2(15);
foreach (string Items in listBox3.Items)
{
using (OracleCommand crtCommand = new OracleCommand("with src as(select src.table_name src_table_name, src.column_name src_col_name, src.data_type src_data_type, src.data_length src_data_len, src.data_precision src_data_precision, src.data_scale src_data_scale, src.nullable src_nullable,decode(T.Constraint_Type,'P', 'Primary Key','U','Unique','') as src_cons from all_tab_columns src left join (select Cc.Column_Name,Uc.Constraint_Type from user_cons_columns cc, user_constraints uc where Cc.Constraint_Name = Uc.Constraint_Name and Cc.Table_Name = Uc.Table_Name) t on T.Column_Name = Src.Column_Name where table_name = '" + Items + "' and owner='" + txtSrcUserID.Text + "'), tgt as(select tgt.table_name tgt_table_name, tgt.column_name tgt_col_name, tgt.data_type tgt_data_type, tgt.data_length tgt_data_len, tgt.data_precision tgt_data_precision, tgt.data_scale tgt_data_scale, tgt.nullable tgt_nullable, decode(T.Constraint_Type,'P', 'Primary Key','U','Unique','') as tgt_cons from all_tab_columns tgt left join (select Cc.Column_Name,Uc.Constraint_Type from user_cons_columns cc, user_constraints uc where Cc.Constraint_Name = Uc.Constraint_Name and Cc.Table_Name = Uc.Table_Name) t on T.Column_Name = tgt.Column_Name where table_name = '"+Items+"' and owner='" + txtDesUserID.Text + "'), col_details as(select src.src_table_name, nvl(tgt.tgt_table_name, first_value(tgt_table_name) over(order by tgt_table_name nulls last)) tgt_table_name, src.src_col_name, src.src_data_type, src.src_data_len, src.src_data_precision, src.src_data_scale, src.src_nullable,src_cons, tgt.tgt_col_name, tgt.tgt_data_type, tgt.tgt_data_len, tgt.tgt_data_precision, tgt.tgt_data_scale, tgt.tgt_nullable,tgt_cons from src full outer join tgt on (src.src_col_name = tgt.tgt_col_name))select * from (select case when tgt_data_type != src_data_type or tgt_data_len != src_data_len or tgt_data_precision != src_data_precision or tgt_data_scale != src_data_scale or tgt_nullable != src_nullable then 'alter table ' || tgt_table_name || ' modify ' || tgt_col_name || ' ' || src_data_type || ' ' || case when src_data_type in ('DATE') then null else case when src_data_type in ('VARCHAR', 'VARCHAR2') then ' (' ||nvl(to_char(src_data_len), ' ') || ') 'else decode(nvl(src_data_precision, -1), -1, null, nvl(to_char(src_data_precision), ' ') || ', ' || nvl(to_char(src_data_scale), ' ') || ')') end end || case when tgt_nullable = 'Y' then ' null ' else ' not null ' end || tgt_cons when tgt_col_name is null then 'alter table ' || tgt_table_name || ' add ' || src_col_name || ' ' || ' ' || ' ' || src_data_type || ' ' || case when src_data_type in ('DATE') then null else case when src_data_type in ('VARCHAR', 'VARCHAR2')then '('|| nvl(to_char(src_data_len), ' ') || ') ' else decode(nvl(src_data_precision, -1), -1, null, nvl(to_char(src_data_precision), ' ') || ', ' || nvl(to_char(src_data_scale), ' ') || ')')end end || tgt_cons when src_col_name is null then 'alter table '|| tgt_table_name ||' drop '||tgt_col_name end alter_statement from col_details) where alter_statement is not null", conn1))
{
var result = crtCommand.ExecuteScalar();
if (result != null)
{
richTextBox1.AppendText(Environment.NewLine);
richTextBox1.AppendText(result.ToString() + ";");
richTextBox1.AppendText(Environment.NewLine);
}
else
{
continue;
}
}
}
是存在的結果爲空值可我也繼續檢查下一個表列表框中與此查詢/ – user2593362
我meaned繼續檢查與此代碼 – user2593362
您可以檢查空像'reader.IsDBNull( 0)'如果這返回true,那麼你有空值 – Damith