Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CreateQueryBuilder不使用oracle返回数据,因为typeorm生成小写和引号形式的sql_Oracle_Typescript_Orm_Typeorm - Fatal编程技术网

CreateQueryBuilder不使用oracle返回数据,因为typeorm生成小写和引号形式的sql

CreateQueryBuilder不使用oracle返回数据,因为typeorm生成小写和引号形式的sql,oracle,typescript,orm,typeorm,Oracle,Typescript,Orm,Typeorm,我试图使用createQueryBuilder对Oracle进行一个小查询,但它不返回记录 我注意到TypeORM生成的SQL是小写的,并带有引号(比如:选择“m”,“codigo”作为“m_codigo”,“m”,“descripion”作为“m_descripion”来自“moneda”“moneda”“m”),这就是在oracle中产生问题的原因,因为当我删除引号或。。。我将查询转换为大写,它返回数据 代码: 从“typeorm”导入{EntityRepository,getReposit

我试图使用
createQueryBuilder
对Oracle进行一个小查询,但它不返回记录

我注意到TypeORM生成的SQL是小写的,并带有引号(比如:
选择“m”,“codigo”作为“m_codigo”,“m”,“descripion”作为“m_descripion”来自“moneda”“moneda”“m”
),这就是在oracle中产生问题的原因,因为当我删除引号或。。。我将查询转换为大写,它返回数据

代码:

从“typeorm”导入{EntityRepository,getRepository,Repository,Entity,Column,PrimaryColumn};
@实体()
出口级莫奈达{
@主列()
codigo?:编号;
@第()列
description?:字符串;
@第()列
simbolo?:字符串;
@第()列
十进制:数字;
}
@实体报告(Moneda)
导出类MonedArpository扩展存储库{
构造函数(){super()}
异步getListaMonedas(){
return wait getRepository(Moneda).createQueryBuilder()
.选择([“m.codigo”,“m.description”])
.来自(莫奈达,“m”)
.getMany();
}
}
//在另一个文件中。。。
从“/store”导入{MonedaRepository};
const monedaRepository=新monedaRepository();
const monedas=await monedaRepository.getListaMonedas();
console.log(monedas);
//结果:[]

这个解决方案是@Mukyuu给我的。 您必须在实体(“表”)中以大写字母表示实体的名称,并在querybuilder中而不是在getMany()中表示实体的名称。。。getRowMany()。。。(列的名称也必须大写):

const result=await getRepository(Currency).createQueryBuilder(“M”)
.选择([“M.CODIGO”,“M.description”])
.getRawMany();

这对我很有效。

这个解决方案是@Mukyuu给我的。 您必须在实体(“表”)中以大写字母表示实体的名称,并在querybuilder中而不是在getMany()中表示实体的名称。。。getRowMany()。。。(列的名称也必须大写):

const result=await getRepository(Currency).createQueryBuilder(“M”)
.选择([“M.CODIGO”,“M.description”])
.getRawMany();

这对我很有用。

默认情况下,Oracle标识符(表名、列名等)不区分大小写。您可以使用引号将它们区分大小写

使用不带任何别名的单引号包装列名,例如

const result = await getRepository(Currency)
   .createQueryBuilder()
   .select(['"CODIGO"', '"DESCRIPCION"'])
   .getRawMany();

默认情况下,Oracle标识符(表名、列名等)不区分大小写。您可以使用引号将它们区分大小写

使用不带任何别名的单引号包装列名,例如

const result = await getRepository(Currency)
   .createQueryBuilder()
   .select(['"CODIGO"', '"DESCRIPCION"'])
   .getRawMany();

真正地我使用的是
this.repository.createQueryBuilder(“别名”).select([“alias.ID”,“另一个_字段]).where(“alias.ID=:ID”,{ID:idparam}).getOne()
并生成以下查询:
选择“alias”。“ID”作为“alias\u ID”,从“tablename”“alias”中选择另一个\u字段,其中“alias”。.ID=:idparam
。在甲骨文做得好吗?您没有在oracle中指明“from…”条款吗?是的。我没有,因为我在实体(
@entity(“TABLE_NAME”)
中声明了它。并将该实体作为存储库导入,如
@InjectRepository(Reponame)private readonly repoalis:repository
,但这不重要。谢谢,这是解决方案!!:-D另外,使其工作,而不是getMany()getRawMany()必须使用你可以把它作为答案。真的吗?我使用的是
this.repository.createQueryBuilder(“别名”)。选择([“alias.ID”,“other_FIELD”])。其中(“alias.ID=:ID”,{ID:idparam})。getOne();
,它生成以下查询:
选择“alias”。“ID”作为“alias_ID”,另一个来自“tablename”“alias”“WHERE”“alias”“.ID”=:idparam
。在oracle中做得很好?您是否在oracle中指明了“from…”子句?是的。我没有,因为我在实体(
@entity(“TABLE_NAME”)
中声明了它。并将该实体作为存储库导入,如
@InjectRepository(Reponame)private readonly Repoalias:Repository
但这不重要。谢谢,这是解决方案!!:-D此外,要使它工作,必须使用getMany()而不是getRawMany()。您可以将其作为答案。