14771 - Cursor com subquery
Problema: É possível utilizar subquery em cursor?
Ao executar o comando abaixo dispara a mensagem de erro: subquerie não são permitidas aqui
Definir Alfa xCursor;
Definir numero xNumero;
Definir alfa anumero;
SQL_Criar(xCursor);
/* Passa como parâmetro o Cursor que deseja manipular e
depois o numero da abrangência de usuário que deseja fazer.
Deve sempre ser chamado antes de se passar o comando SQL.
*/
xnumero = 32;
SQL_DefinirComando(xCursor,select (select nomrep from e090rep where codrep=b.repsup) nomrep from e090rep a, e090hrp b where a.codrep=b.codrep and a.codrep=:xnumero);
SQL_DefinirInteiro(xCursor, xnumero, xnumero);
SQL_AbrirCursor(xCursor);
Enquanto (SQL_EOF(xCursor) = 0)
{
SQL_Proximo(xCursor);
SQL_RetornarAlfa(xCursor,nomrep,aNumero);
Mensagem(Retorna, anumero);
}
SQL_FecharCursor(xCursor);
SQL_Destruir(xCursor);
Rotina / Tela: Regras
Solução: Solução 14771: Essa mensagem ocorre quando o comando utilizado é no padrão do SeniorSql2.
Ao executar o comando abaixo dispara a mensagem de erro: subquerie não são permitidas aqui
Definir Alfa xCursor;
Definir numero xNumero;
Definir alfa anumero;
SQL_Criar(xCursor);
/* Passa como parâmetro o Cursor que deseja manipular e
depois o numero da abrangência de usuário que deseja fazer.
Deve sempre ser chamado antes de se passar o comando SQL.
*/
xnumero = 32;
SQL_DefinirComando(xCursor,select (select nomrep from e090rep where codrep=b.repsup) nomrep from e090rep a, e090hrp b where a.codrep=b.codrep and a.codrep=:xnumero);
SQL_DefinirInteiro(xCursor, xnumero, xnumero);
SQL_AbrirCursor(xCursor);
Enquanto (SQL_EOF(xCursor) = 0)
{
SQL_Proximo(xCursor);
SQL_RetornarAlfa(xCursor,nomrep,aNumero);
Mensagem(Retorna, anumero);
}
SQL_FecharCursor(xCursor);
SQL_Destruir(xCursor);
Rotina / Tela: Regras
Solução: Solução 14771: Essa mensagem ocorre quando o comando utilizado é no padrão do SeniorSql2.
Para não ocorrer a mensagem e conseguir fazer subqueries em cursor precisa passar as funções abaixo depois do SQL_Criar:
SQL_UsarAbrangencia(Cur_E070FIL2,0); @Quando utilizado para executar comandos nativos é obrigatório utilizar essa função com parâmetro 0 para informar que não usa abrangência@
SQL_UsarSQLSenior2(Cur_E070FIL2,0); @ Define que o comando deverá utilizar a sintaxe nativa do banco de dados. @
Exemplo que funciona subquery:
Definir alfa Cur_E070FIL2;
SQL_Criar(Cur_E070FIL2);
SQL_UsarAbrangencia(Cur_E070FIL2,0); @Quando utilizado para executar comandos nativos é obrigatório utilizar essa função com parâmetro 0 para informar que não usa abrangencia@
SQL_UsarSQLSenior2(Cur_E070FIL2,0); @ Define que o comando deverá utilizar a sintaxe nativa do banco de dados. @
SQL_DefinirComando(Cur_E070FIL2,SELECT CODEMP, (SELECT COUNT(*) FROM E085HCL WHERE E085HCL.CODEMP = E070FIL.CODEMP) /
FROM E070FIL);
SQL_AbrirCursor(Cur_E070FIL2);
Se (SQL_EOF(Cur_E070FIL2) = 0)
SQL_RetornarInteiro(Cur_E070FIL2,CodEmp,xcodemp);
SQL_FecharCursor(Cur_E070FIL2);