|
La palabra comilla y la variable se resuelven en la
sentencia, por ejemplo si tiene un WHERE de una variable alfa debes
colocar WHERE @SITUAC = 'ALGO' la primera comilla la resuelvo con la
palabra comilla lo mismo que la ultima y no quedan como un literal
Jaime Villa T.
----- Mensaje original -----
Enviado: Jueves, 24 de Febrero de 2005
02:59 a.m.
Asunto: Re: Sql dinamico
Pero @situac y @categoria son
dos variables y si les pongo comillas me los coje como literal
el eval lo realizaria asi C
EVAL
Seletq= 'select arcodi, arnomb, - C
from fartic - C
where
arempr=:@empresa and arsitu=:@situac - C
and arcate=:@categoria'
dcomilla s
1 inz('''')
c
eval selectq = 'select arcodi, arnomb '
+ c
'from fartic '
+ c
'where
arempr = ' +
c
@empresa +
c
' and arsitu = ' + c
comilla + c
@situac +
c
comilla
+ c
'and arcate = ' +
c
comilla + c
@categoria + c
comilla
c Esta
sentencia es completamente din�mica
Jaime Villa T. ----- Mensaje
original ----- De: Fernando
P�rez Para:
[email protected]
Enviado: Mi�rcoles, 23 de Febrero de 2005 05:27
a.m. Asunto: Re: Sql dinamico
[EMAIL PROTECTED] escribi�:
Hola Foro. Estoy haciendo una
prueba para trabajar con SQL dinamico y no hay manera, a ver si me podeis
echar una mano. En principio no hace la seleccion y el SQLCOD = -514 Os
paso el peque�o programa de pruebas. Compilo con commit *none . hasta que no
hemos pasado a V5r3 no he podido hacer nada con sql embebido y esta prueba es
bas�ndome en ejemplos que habeis enviado al Foro. La misma seleccion en
est�tico funciona bien.
FFartic IF E
k disk FProvartic O a E
disk D @empresa
S 3
0 Inz(10) D @situac S
1
Inz('A') D @categoria S
2 Inz('BR')
D Seletq S
300 * C
EVAL
Seletq= 'select arcodi, arnomb, - C
from fartic - C
where
arempr=:@empresa and arsitu=:@situac - C
and arcate=:@categoria'
� C/Exec sql
� C+ PREPARE
stmt FROM :seletQ C/end-exec
� *
� C/EXEC SQL
� C+ DECLARE C1 CURSOR FOR
Stmt C/END-EXEC
� *
� C/Exec sql
� C+ open C1
� C/end-exec
� *
� � C
Dow
sqlcod <>100 and sqlcod>=0
��---------------1-. C/Exec sql
�
| C+
FETCH NEXT FROM C1 INTO :prcodi, :prnomb C/end-exec
�
| � C
If
sqlcod<>100 and sqlcod>=0
��-------------2-. |
C Write
Provesr
�
| | � C
Endif
��-------------2-' | � C
Enddo
��---------------1-' C/Exec sql
� C+ CLOSE
C1 C/end-exec
� C
Seton
Lr �
No puedes emplear variables del lenguaje de esa forma en sql
din�mico. En su lugar, utiliza el valor de �stas mismas variables en la
sentencia, o bien prepara una sentencia con par�metros (por ejemplo, 'where
arempr = ? '), y luego ejec�tala pas�ndole dichos par�metros (creo recordar
que para un cursor ser�a 'declare c1 cursor for stmt using
:variable')
-- Saludos.
Fernando P�rez
Cer�mica Saloni. Dpto. Sistemas
|