- 论坛徽章:
- 0
|
strcpy(strSql,"SELECT
COLUMN_NAME,
DATA_TYPE,
DATA_LENGTH,
NULLABLE,
DATA_DEFAULT,
decode((select count(*) from USER_CONS_COLUMNS cons_col, USER_CONSTRAINTS cons ,
Entity b ,gen_code_info c
where
b.entity_id=c.entity_id
and c.entity_id=:entityId
and c.version=:version
and cons.table_name=b.name AND cons.CONSTRAINT_TYPE='P'
and cons_col.constraint_name=cons.constraint_name
and cons_col.column_name=col.column_name), 0, 'N','Y') PK_COL,
b.table_type_id as tableTypeId,
c.service_name as serviceName,
c.db_access as dbAccess,
c.version as version
FROM USER_TAB_COLUMNS col ,Entity b ,gen_code_info c
where
b.entity_id=c.entity_id
and c.entity_id=:entityId
and c.version=:version
and col.TABLE_NAME=b.name");
DEFINE_OCICMDPOINT(m_pSelect);
m_pSelect->setSQL(strSql);
userlog(" sqlStr = %s",strSql);
m_pSelect->setParameter("entityId",entityId);
m_pSelect->setParameter("version",version);
//m_pSelect->setParameter("entityId",entityId);
//m_pSelect->setParameter("version",version);
userlog(" entityId chen =%s",entityId);
userlog(" version chen=%s",version);
m_pSelect->open();
1.以上的代码是在一个查询对象中赋上sql语句,语句中要用到两个参数:entityId,:version.这两个参数要
出现在两个位置上,为了你对这个两个参数有直观的认识,entityId是NUMBER(12)类型,version是VARCHAR2(6)
2.我的问题很简单,在上面的查询语句中,要用到两个参数,:entityId和:version,这个两个参数
要出现在两个位置中, 原先以为编译器找不到对应的参数,因为第一处出现的entityId和第二个
出现的entityId是一样的,采用了不同名的方法,例如: 在语句出现的位置都改成 :entityId1,
:version1,entityId2,:version2.这样他们的参数就不一样了,发现还是不能打开查询对象.
m_pSelect->setParameter("entityId1",entityId);
m_pSelect->setParameter("version1",version);
//m_pSelect->setParameter("entityId2",entityId);
//m_pSelect->setParameter("version2",version);
3.有些奇怪的是,当我去掉最上面的位置的一组参数而直接取默认值时.而保留最下面的一组参数并
赋值后,查询的对象是可以打开的.我试验过....
4.我说的第2种情况就不能打开查询对象.
很迷惑,请高手指点.....不胜感激..... |
|