📄 vc_oracle2.txt
字号:
if(flag==1)
{
sqlUpdateSelect.append(" and ");
}
else
{
flag=1;
}
sqlUpdateSelect.append(fieldName);
sqlUpdateSelect.append(" = \'");
sqlUpdateSelect.append(fieldValue);
sqlUpdateSelect.append("\'");
}
chSqlUpdateSelect = sqlUpdateSelect.c_str();
cn = OCI_ConnPoolGetConnection(pool);
if (cn)
{
st = OCI_StatementCreate(cn);
OCI_ExecuteStmt(st,MT(chSqlUpdateSelect));
OCI_Commit(cn);
rs = OCI_GetResultset(st);
while (OCI_FetchNext(rs))
{
}
n = OCI_GetRowCount(rs);
if(n!=0)
{
printf("说要修改的内容已存在,不需要进行修改!");
return false;
}
}
if(fkToPknum==0) //已经为表链的最前端,即不引用其它表的字段
{
if(strcmp(keyName,"key")==0) //判断是否存在key条件,如果存在即是对一条记录进行修改 ?
{
memset( pkColumn, '\0', sizeof(pkColumn));
for(int i=2;i<fieldUpdateCount;i++)
{
fieldName = fieldUpdate_array[i].getFieldName();
fieldValue = fieldUpdate_array[i].getFieldValue();
for(int j=0;j<pknum;j++)
{
pkname = pkSign[j];
if(strcmp(fieldName,pkname)==0)
{
strcpy(pkColumn[n++],pkname);
truePknum++;
}
}
}
if(truePknum == pknum) //所给数据中PK键都给齐全了,即都要进行修改,
{
for(int i=0;i<pknum;i++) //用于统计主键是否需要进行修改
{
pkname = pkSign[i];
pkvalue = select_value(tableName,pkname,keyName,keyValue);
for(int i=2;i<fieldUpdateCount;i++)
{
fieldName = fieldUpdate_array[i].getFieldName();
fieldValue = fieldUpdate_array[i].getFieldValue();
if(strcmp(pkname,fieldName)==0)
{
if(strcmp(pkvalue,fieldValue)==0)
{
Unum++; //Unum用于统计没有修改了的主键数
}
}
}
}
if(Unum!=pknum) //主键需要修改
{
flag = 0;
sqlUpdateSelect = "select key from "; //查询所要修改的主键是否已经存在,已存在则修改失败
sqlUpdateSelect.append(tableName);
sqlUpdateSelect.append(" where ");
for(int i=2;i<fieldUpdateCount;i++)
{
fieldName = fieldUpdate_array[i].getFieldName();
fieldValue = fieldUpdate_array[i].getFieldValue();
for(int j=0;j<pknum;j++)
{
pkname = pkSign[j];
if(strcmp(fieldName,pkname)==0)
{
if(flag==1)
{
sqlUpdateSelect.append(" and ");
}
else
{
flag=1;
}
sqlUpdateSelect.append(fieldName);
sqlUpdateSelect.append(" = \'");
sqlUpdateSelect.append(fieldValue);
sqlUpdateSelect.append("\'");
}
}
}
chSqlUpdateSelect = sqlUpdateSelect.c_str();
cn = OCI_ConnPoolGetConnection(pool);
if (cn)
{
st = OCI_StatementCreate(cn);
OCI_ExecuteStmt(st,MT(chSqlUpdateSelect));
OCI_Commit(cn);
rs = OCI_GetResultset(st);
while (OCI_FetchNext(rs))
{
value = OCI_GetString(rs,1);
if(strcmp(value,keyValue)!=0)
{
printf("所要修改的值主键重复,修改失败!");
return false;
}
}
nn = OCI_GetRowCount(rs);
}
if(nn==0)
{
int q = 0,updnum = 0; //不存在主键冲突
memset( updatefeild, '\0', sizeof(updatefeild));
if(fknum==0) //没有他表对该表内容进行引用
{
for(int i=0;i<fieldUpdateCount;i++)
{
fieldName = fieldUpdate_array[i].getFieldName();
fieldValue = fieldUpdate_array[i].getFieldValue();
strcpy(updatefeild[updnum][0][q],fieldName); //updnum表示有多少条记录要改
strcpy(updatefeild[updnum][1][q],fieldValue);
q++;
}
updnum++;
return true;
}
else //他表对该表内容进行了引用,将他表内容也进行修改
{
for(int i=0;i<fieldUpdateCount;i++)
{
fieldName = fieldUpdate_array[i].getFieldName();
fieldValue = fieldUpdate_array[i].getFieldValue();
strcpy(updatefeild[updnum][0][q],fieldName); //updnum表示有多少条记录要改
strcpy(updatefeild[updnum][1][q],fieldValue);
q++;
}
updnum++;
flag = 0;
int p;
memset( temp_value, '\0', sizeof(temp_value));
for(int i=0;i<fknum;i++)
{
tempTableN = fkSign[i][0];
if(strcmp(tempTableN,"")==0)
{
break;
}
strcpy(temp_value[tempNum][0],tempTableN);
sqlUpdateSelect = "select ";
for(int j=1,q=1;j<20;j++)
{
tempField = fkSign[i][j];
if(strcmp(tempField,"")==0)
{
break;
}
if(flag==1)
{
sqlUpdateSelect.append(",");
}
else
{
flag=1;
}
sqlUpdateSelect.append(tempField);
}
flag = 0;
sqlUpdateSelect.append(" from ");
sqlUpdateSelect.append(tableName);
sqlUpdateSelect.append(" where ");
sqlUpdateSelect.append(keyName);
sqlUpdateSelect.append(" = \'");
sqlUpdateSelect.append(keyValue);
sqlUpdateSelect.append("\'");
chSqlUpdateSelect = sqlUpdateSelect.c_str();
if (cn)
{
st = OCI_StatementCreate(cn);
OCI_ExecuteStmt(st,MT(chSqlUpdateSelect));
OCI_Commit(cn);
rs = OCI_GetResultset(st);
while (OCI_FetchNext(rs)) //循环存储表中主键纪录的值
{
const char *value;
p = 1;
while(p<=pknum)
{
value = OCI_GetString(rs,p);
strcpy(temp_value[tempNum][p],value);
p++;
}
tempNum++;
}
//n = OCI_GetRowCount(rs);
}
}
char *fkTableName,*fkFieldName;
flag = 0;
memset( temp_key, '\0', sizeof(temp_key));
for(int i=0;i<fknum;i++)
{
sqlUpdateSelect = "select key from ";
tempTableN = temp_value[i][0];
fkTableName = fkSign[i][0];
if(strcmp(tempTableN,"")==0)
{
break;
}
strcpy(temp_key[i][0],tempTableN);
sqlUpdateSelect.append(tempTableN);
sqlUpdateSelect.append(" where ");
for(int j=1;j<20;j++)
{
tempField = temp_value[i][j];
fkFieldName = fkSign[i][j];
if(strcmp(tempField,"")==0)
{
break;
}
if(flag==1)
{
sqlUpdateSelect.append(" and ");
}
else
{
flag=1;
}
sqlUpdateSelect.append(fkFieldName);
sqlUpdateSelect.append(" = \'");
sqlUpdateSelect.append(tempField);
sqlUpdateSelect.append("\'");
}
flag = 0;
chSqlUpdateSelect = sqlUpdateSelect.c_str();
p = 1;
if (cn)
{
st = OCI_StatementCreate(cn);
OCI_ExecuteStmt(st,MT(chSqlUpdateSelect));
OCI_Commit(cn);
rs = OCI_GetResultset(st);
while (OCI_FetchNext(rs)) //循环存储表中主键纪录的值
{
const char *value;
value = OCI_GetString(rs,1);
strcpy(temp_key[i][p],value);
p++;
}
//n = OCI_GetRowCount(rs);
}
}
char *tName;
for(int k=0;k<20;k++)
{
tName = temp_key[k][0];
if(strcmp(tName,"")==0)
{
break;
}
for(int i=0;i<fknum;i++)
{
tempTableN = fkSign[i][0];
if(strcmp(tName,tempTableN)==0)
{
for(int j=1;j<20;j++)
{
tempField = temp_key[k][j];
if(strcmp(tempField,"")==0)
{
break;
}
strcpy(updatefeild[updnum][0][0],"tablename");
strcpy(updatefeild[updnum][1][0],tempTableN);
strcpy(updatefeild[updnum][0][1],"key");
strcpy(updatefeild[updnum][1][1],tempField);
q=2;
for(int h=1;h<20;h++)
{
fkFieldName = fkSign[i][h];
if(strcmp(fkFieldName,"")==0)
{
break;
}
for(int i=0;i<fieldUpdateCount;i++)
{
fieldName = fieldUpdate_array[i].getFieldName();
fieldValue = fieldUpdate_array[i].getFieldValue();
if(strcmp(fkFieldName,fieldName)==0)
{
strcpy(updatefeild[updnum][0][q],fieldName); //updnum表示有多少条记录要改,此处为一
strcpy(updatefeild[updnum][1][q],fieldValue);
q++;
}
}
}
updnum++;
}
}
}
}
return true;
}
}
}
else //主键信息不用修改时,要看是否引用了其它表的字段,即fkToPknum是否为0,fkToPk数组
{
int q = 0,updnum = 0; //没有修改主键时,返回直接进行修改
memset( updatefeild, '\0', sizeof(updatefeild));
for(int i=0;i<fieldUpdateCount;i++)
{
fieldName = fieldUpdate_array[i].getFieldName();
fieldValue = fieldUpdate_array[i].getFieldValue();
strcpy(updatefeild[updnum][0][q],fieldName); //updnum表示有多少条记录要改,此处为一
strcpy(updatefeild[updnum][1][q],fieldValue);
q++;
}
updnum++;
return true;
}
}
if(truePknum<pknum) //所给数据中PK键未给齐全时
{
if(truePknum==0) //truePknum为实际包含了的PK数
{
int q = 0,updnum = 0; //不存在主键冲突,没有PK要修改
memset( updatefeild, '\0', sizeof(updatefeild));
for(int i=0;i<fieldUpdateCount;i++)
{
fieldName = fieldUpdate_array[i].getFieldName();
fieldValue = fieldUpdate_array[i].getFieldValue();
strcpy(updatefeild[updnum][0][q],fieldName); //updnum表示有多少条记录要改
strcpy(updatefeild[updnum][1][q],fieldValue);
q++;
}
updnum++;
return true;
}
else
{
memset( pkColumnValue, '\0', sizeof(pkColumnValue));
for(int i=0;i<pknum;i++) //用于统计主键是否需要进行修改
{
pkname = pkSign[i];
pkvalue = select_value(tableName,pkname,keyName,keyValue);
strcpy(pkColumnValue[i],pkvalue);
}
for(int i=0;i<pknum;i++)
{
pkname = pkSign[i];
tempField = pkColumnValue[i];
for(int j=0;j<fieldUpdateCount;j++)
{
fieldName = fieldUpdate_array[j].getFieldName();
fieldValue = fieldUpdate_array[j].getFieldValue();
if(strcmp(pkname,fieldName)==0)
{
if(strcmp(tempField,fieldValue)!=0)
{
strcpy(pkColumnValue[i],fieldValue);
Unum++; //Unum用于统计没有修改了的主键数
}
}
}
}
if(Unum!=0) //主键需要修改
{
flag = 0;
sqlUpdateSelect = "select key from "; //查询所要修改的主键是否已经存在,已存在则修改失败
sqlUpdateSelect.append(tableName);
sqlUpdateSelect.append(" where ");
for(int i=0;i<pknum;i++)
{
pkname = pkSign[i];
tempField = pkColumnValue[i];
if(flag==1)
{
sqlUpdateSelect.append(" and ");
}
else
{
flag=1;
}
sqlUpdateSelect.append(pkname);
sqlUpdateSelect.append(" = \'");
sqlUpdateSelect.append(tempField);
sqlUpdateSelect.append("\'");
}
chSqlUpdateSelect = sqlUpdateSelect.c_str();
cn = OCI_ConnPoolGetConnection(pool);
if (cn)
{
st = OCI_StatementCreate(cn);
OCI_ExecuteStmt(st,MT(chSqlUpdateSelect));
OCI_Commit(cn);
rs = OCI_GetResultset(st);
while (OCI_FetchNext(rs))
{
value = OCI_GetString(rs,1);
if(strcmp(value,keyValue)!=0)
{
printf("所要修改的值主键重复,修改失败!");
return false;
}
}
nn = OCI_GetRowCount(rs);
}
if(nn==0) //所要修改的内容不存在,可以修改
{
int q = 0,updnum = 0; //不存在主键冲突
memset( updatefeild, '\0', sizeof(updatefeild));
if(fknum==0) //没有他表对该表内容进行引用
{
for(int i=0;i<fieldUpdateCount;i++)
{
fieldName = fieldUpdate_array[i].getFieldName();
fieldValue = fieldUpdate_array[i].getFieldValue();
strcpy(updatefeild[updnum][0][q],fieldName); //updnum表示有多少条记录要改
strcpy(updatefeild[updnum][1][q],fieldValue);
q++;
}
updnum++;
return true;
}
else //他表对该表内容进行了引用,将他表内容也进行修改
{
for(int i=0;i<fieldUpdateCount;i++)
{
fieldName = fieldUpdate_array[i].getFieldName();
fieldValue = fieldUpdate_array[i].getFieldValue();
strcpy(updatefeild[updnum][0][q],fieldName); //updnum表示有多少条记录要改
strcpy(updatefeild[updnum][1][q],fieldValue);
q++;
}
updnum++;
flag = 0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -