style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">

ayuda con SQL server y java

Hola buenos dias,soy nuevo en el foro,tengo un problema,soy nuevo en las ejecuciones de SQL con java,necesito hacer un formulario que se conecte a la base de datos de SQL server,ya que conecto a la base de datos habilito un boton que diga COMENZAR dando click necesito disparar un query que el DBA me otorgo pero sinceramente nunca habia visto un query de ese tipo,al momento de ejecutarlo me manda esto:
Excepcion del querycom.microsoft.sqlserver.jdbc.SQLServerException: Sintaxis incorrecta cerca de '@EX_PED'.
Esta utilizando variables de Tabla,el query es muy largo y trate de separarlo por medio de variables pero no me funciona ni todo corrido.
Este es el codigo del Boton que dice Comenzar:

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {                                        
     
        sql = "DECLARE @EX_PED TABLE (PERIODO SMALLINT, EJERCICIO SMALLINT,Cerrado SMALLINT ,Orden INT,ReqtrASp SMALLINT,Ctpoliza INT ) "
                + "INSERT INTO @EX_PED";

        sql2 = "SELECT Periodo,Ejercicio, '0' AS Cerrado,'10' AS Orden,'0' AS ReqtrASp,'-1' AS Ctpoliza "
        + "from CtEmpresa1.dbo.Afectaciones"
        + "group by Periodo,Ejercicio";

        sql3 = "INSERT INTO EmpresAS.dbo.ADMPER01 (PERIODO,EJERCICIO,CERRADO,ORDENADO,REQTRASP,CTPOLIZAS)"
                + "SELECT* from  @EX_PED";

        sql4 = "DECLARE @NivelA TABLE(Fila_A int IDENTITY(1,1),Codigo_A varchar(50),"
                + " Nombre_A varchar(50),CTAM_AFEC_A varchar(2))";
        try {
            stmt = conn.createStatement();
            //stmt.executeUpdate(sql);
            res = stmt.executeQuery(sql);
            System.out.println("query exitoso \n" + res);
            stmt.close();
            res.close();
        } catch (SQLException e) {
            System.out.println("Excepcion del query" + e);
            JOptionPane.showMessageDialog(null, " Error de ejecucion del query", "Error", JOptionPane.ERROR_MESSAGE);
            JOptionPane.showMessageDialog(null, e + "");
        }
        //Un poco del Query que se debe ejecutar
//                + "DECLARE @NivelB TABLE(Fila int IDENTITY(1,1),Codigo varchar(50), "
//                + " Nombre varchar(50),CTAM_AFEC varchar(2),"
//                + "NIVEL varchar(1))"
//                + "DROP table #ASIGNA_NIVELA"
//                + "SELECT  Codigo as Codigo_A,Nombre as Nombre_A, convert(varchar(1),CtaMayor)+convert(varchar(1),Afectable) as CTAM_AFEC_A"
//                + "into #ASIGNA_NIVELA"
//                + "FROM CtEmpresa1.dbo.Cuentas"
//                + " WHERE IsNumeric(Codigo) = 1"
//                + " order by Codigo"
//                + "INSERT INTO @NivelA"
//                + "Select * from #ASIGNA_NIVELA WHERE Codigo_A>500"
//                + "DROP table #ASIGNA_NIVELB"
//                + "SELECT  Codigo,Nombre, convert(varchar(1),CtaMayor)+convert(varchar(1),Afectable) as CTAM_AFEC,'0' as  NIVEL"
//                + "into #ASIGNA_NIVELB"
//                + "FROM CtEmpresa1.dbo.Cuentas"
//                + "WHERE IsNumeric(Codigo) = 1"
//                + "order by Codigo"
//                + "INSERT INTO @NivelB"
//                + "Select * from #ASIGNA_NIVELB WHERE Codigo>500"
//                + "drop table #DEFENE_NIVELES"
//                + "SELECT * "
//                + "into #DEFENE_NIVELES"
//                + "FROM (SELECT * FROM @NivelA) Actual"
//                + "LEFT JOIN (SELECT * FROM @NivelB) Siguiente"
//                + "ON Actual.Fila_A-1= Siguiente.Fila";
       
       
    }                                        

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

CallableStatement

Me suena a que debes de utilizar CallableStatement

Intenta reemplazar esta linea

stmt = conn.createStatement();

Por esto

CallableStatement statement = conn.prepareCall(sql);
statement.execute();

Error

ya lo reemplaze y me sigue mostrando el mismo error

Imagen de santos.r09

Es un error de sintaxis de SQL, No es problema con Java

¿Ya verificaste que el Script funcione correctamente en SQL Client??, pruebalo en un cliente de SQL, cuando estes seguro que funciona lo metes a tu código en Java.

No es de SQL es de JAVA

Este es el Script de SQL y si lo ejecuto en SQL Server 2008 si lo hace,el problema es cuando lo ejecuto en java,me dice error de sintaxis por el DECLARE que es una variable de tabla,y tambien se utilizan tablas temporales

DECLARE @EX_PED TABLE (PERIODO SMALLINT, EJERCICIO SMALLINT,Cerrado SMALLINT ,Orden INT,ReqtrASp SMALLINT,Ctpoliza INT )  

INSERT INTO @EX_PED
SELECT Periodo,Ejercicio, '0' AS Cerrado,'10' AS Orden,'0' AS ReqtrASp,'-1' AS Ctpoliza
from CtEmpresa1.dbo.Afectaciones
group by Periodo,Ejercicio

---Crear tablAS Periodos
INSERT INTO EmpresAS.dbo.ADMPER01 (PERIODO,EJERCICIO,CERRADO,ORDENADO,REQTRASP,CTPOLIZAS)
SELECT* from  @EX_PED
 
     --DELETE FROM EmpresAS.dbo.ADMPER01
     --WHERE PERIODO IN (6,7)

    --SELECT * FROM CtEmpresa1.dbo.Afectaciones
    --SELECT * FROM Empresas.dbo.ADMPER01
    --order by PERIODO,EJERCICI
   

----Tablas para comparar los Niveles de las cuentas
 DECLARE @NivelA TABLE(Fila_A int IDENTITY(1,1),Codigo_A varchar(50),
                        Nombre_A varchar(50),CTAM_AFEC_A varchar(2))
 DECLARE @NivelB TABLE(Fila int IDENTITY(1,1),Codigo varchar(50),
                        Nombre varchar(50),CTAM_AFEC varchar(2),
                        NIVEL varchar(1))
 
 drop table #ASIGNA_NIVELA
 SELECT  Codigo as Codigo_A,Nombre as Nombre_A, convert(varchar(1),CtaMayor)+convert(varchar(1),Afectable) as CTAM_AFEC_A
 into #ASIGNA_NIVELA
 FROM CtEmpresa1.dbo.Cuentas
 WHERE ISNUMERIC(Codigo)=1
 order by Codigo
 
    INSERT INTO @NivelA
        Select * from #ASIGNA_NIVELA WHERE Codigo_A>500

drop table #ASIGNA_NIVELB
 SELECT  Codigo,Nombre, convert(varchar(1),CtaMayor)+convert(varchar(1),Afectable) as CTAM_AFEC,'0' as  NIVEL
 into #ASIGNA_NIVELB
 FROM CtEmpresa1.dbo.Cuentas
 WHERE ISNUMERIC(Codigo)=1
 order by Codigo
 
    INSERT INTO @NivelB
        Select * from #ASIGNA_NIVELB WHERE Codigo>500

drop table #DEFENE_NIVELES
SELECT *
into #DEFENE_NIVELES
FROM (SELECT * FROM @NivelA) Actual
LEFT JOIN (SELECT * FROM @NivelB) Siguiente
ON Actual.FILA_A-1= Siguiente.FILA    
   
-------Actualiza los Niveles y crea  las cuentas que se encuentran como DETALLE (1,1)
UPDATE #DEFENE_NIVELES SET NIVEL=CASE    WHEN CTAM_AFEC_A='11' AND CTAM_AFEC='20' THEN '1'
                                        WHEN CTAM_AFEC_A='10' AND CTAM_AFEC='11' THEN '1'
                                        WHEN CTAM_AFEC_A='21' AND CTAM_AFEC='10' THEN '2'
                                        WHEN CTAM_AFEC_A='21' AND CTAM_AFEC='21' THEN '2'
                                        WHEN CTAM_AFEC_A='20' AND CTAM_AFEC='21' THEN '2'
                                        WHEN CTAM_AFEC_A='21' AND CTAM_AFEC='20' THEN '3'
                                        WHEN CTAM_AFEC_A='21' AND CTAM_AFEC='20' THEN '3'
                                        WHEN CTAM_AFEC_A='10' AND CTAM_AFEC='21' THEN '1'
                                        WHEN CTAM_AFEC_A='20' AND CTAM_AFEC='10' THEN '2'
                                        WHEN CTAM_AFEC_A='20' AND CTAM_AFEC='20' THEN '2'
                                        WHEN CTAM_AFEC_A='11' AND CTAM_AFEC='21' THEN '1'
                                        WHEN CTAM_AFEC_A='11' AND CTAM_AFEC='11' THEN '1'
                                        WHEN CTAM_AFEC_A='21' AND CTAM_AFEC='10' THEN '2'
                                        WHEN CTAM_AFEC IS NULL  THEN SUBSTRING(CTAM_AFEC_A,1,1)
                                ELSE '2' END
    --SELECT * FROM     #DEFENE_NIVELES    
                       
---CREA LA TABLA BASE DE LAS CUENTAS
DROP TABLE #EXTR_SOLO_CUENTAS
SELECT *
INTO #EXTR_SOLO_CUENTAS
FROM CtEmpresa1.dbo.Cuentas
WHERE ISNUMERIC(Codigo)=1

------Extrae la informacion de la base

select * from CtEmpresa1.dbo.Cuentas
order by Codigo

DROP TABLE #TABLA_BASE_CUENTAS
 SELECT id AS ID,Codigo,
SUBSTRING(Codigo,1,3)+'0'+SUBSTRING(Codigo,4,1)+CASE
    WHEN SUBSTRING(Codigo,5,1)<>0 and SUBSTRING(Codigo,6,1)<>0 and SUBSTRING(Codigo,7,1)<>0
    THEN SUBSTRING(Codigo,5,1)+SUBSTRING(Codigo,6,1)+SUBSTRING(Codigo,7,1)
    WHEN SUBSTRING(Codigo,5,1)<>0 and SUBSTRING(Codigo,6,1)=0 and SUBSTRING(Codigo,7,1)<>0
    THEN SUBSTRING(Codigo,5,1)+'0'+SUBSTRING(Codigo,7,1)
    WHEN SUBSTRING(Codigo,5,1)<>0 and SUBSTRING(Codigo,6,1)=0 and SUBSTRING(Codigo,7,1)=0
    THEN SUBSTRING(Codigo,5,1)+'00'
    WHEN SUBSTRING(Codigo,5,1)=0 and SUBSTRING(Codigo,6,1)<>0 and SUBSTRING(Codigo,7,1)=0
    THEN '0'+SUBSTRING(Codigo,6,1)+'0'
    WHEN SUBSTRING(Codigo,5,1)<>0 and SUBSTRING(Codigo,6,1)<>0 and SUBSTRING(Codigo,7,1)=0
    THEN SUBSTRING(Codigo,5,1)+SUBSTRING(Codigo,6,1)+'0'
    WHEN SUBSTRING(Codigo,5,1)=0 and SUBSTRING(Codigo,6,1)=0 and SUBSTRING(Codigo,7,1)<>0
    THEN '00'+SUBSTRING(Codigo,7,1)
    WHEN SUBSTRING(Codigo,5,1)=0 and SUBSTRING(Codigo,6,1)<>0 and SUBSTRING(Codigo,7,1)<>0
    THEN '0'+SUBSTRING(Codigo,6,1)+SUBSTRING(Codigo,7,1)
ELSE '000'END +'00' AS DIGI_NIVEL,
'abcdefghijklmnopqrtsu' as NUM_CTA,
datepart(year,FechaRegistro) as EJERCICIO,
 'A' AS STATUS, Nombre AS NOMBRE,CASE WHEN CtaMayor=1 THEN 'A' ELSE 'D' END AS TIPO,
 'N' AS DEPTSINO,
 IdMoneda AS BANDMULTI,
 'N' AS BANDAJT,
 '123456789101112131415' AS CTA_PAPA,
 '123456789101112131415' AS CTA_RAIZ,
 0 AS NIVEL,
 'abcdefghijklmnopqrtsu' AS CTA_COMP,
 CASE WHEN Tipo IN('A','C','E','G','I','K') THEN 0 ELSE 1 END AS NATURALEZA
 into #TABLA_BASE_CUENTAS
 FROM  #EXTR_SOLO_CUENTAS
 WHERE Codigo > 500
 order by Codigo

 ----Limpia los Columnas Faltantes
 UPDATE #TABLA_BASE_CUENTAS SET NUM_CTA='',CTA_PAPA='',CTA_RAIZ='',CTA_COMP='',NIVEL=''
 ----Actualiza Columnas faltantes
 UPDATE #TABLA_BASE_CUENTAS SET NIVEL=#DEFENE_NIVELES.NIVEl
 FROM #DEFENE_NIVELES
 WHERE     CONVERT(NUMERIC,#DEFENE_NIVELES.Codigo_A) =CONVERT(NUMERIC,#TABLA_BASE_CUENTAS.Codigo)
 
 UPDATE #TABLA_BASE_CUENTAS SET NUM_CTA=DIGI_NIVEL+'0000000000'+CONVERT(VARCHAR(1),NIVEL)
 UPDATE #TABLA_BASE_CUENTAS SET CTA_PAPA= CASE    WHEN NIVEL= 2 THEN SUBSTRING(NUM_CTA,1,4)+'00000000000000001'
                                                WHEN NIVEL= 3 THEN SUBSTRING(NUM_CTA,1,6)+'000000000000002'
                                                ELSE '-1' END    
 UPDATE #TABLA_BASE_CUENTAS SET CTA_RAIZ= SUBSTRING(NUM_CTA,1,4)+'00000000000000001'
 
-----------Crea tabla por Ejercicio
--SELECT * FROM CtEmpresa1.dbo.Afectaciones
DROP TABLE #PERIODOS
SELECT distinct Ejercicio
INTO #PERIODOS
from  CtEmpresa1.dbo.Afectaciones
 
 
DECLARE @AÑO AS VARCHAR(30)
DECLARE @N_EJERC AS VARCHAR(30)
DECLARE @QUERY AS CHAR (4000)

    DECLARE CREACION_TABLA_EJER CURSOR FOR
    SELECT SUBSTRING(CONVERT(CHAR(4),EJERCICIO),3,2)AS AÑO ,'01' AS N_EJERC FROM #PERIODOS GROUP BY EJERCICIO
   
   
    OPEN CREACION_TABLA_EJER
    FETCH NEXT FROM CREACION_TABLA_EJER
    INTO @AÑO,@N_EJERC
    WHILE @@FETCH_STATUS=0
    BEGIN
            ---Eliminas las Tablas si existen
            SET @QUERY    =    'DROP TABLE Empresas.dbo.CUENTAS'+ @AÑO + @N_EJERC
            EXEC (@QUERY)
           
            ---Elimina tablas de Saldos de los periodos
            SET @QUERY ='DROP TABLE Empresas.dbo.SALDOS'+ @AÑO + @N_EJERC
            EXEC (@QUERY)
           
            ----Crea las tablas de los saldo
            SET @QUERY=    'CREATE TABLE Empresas.dbo.SALDOS'+ @AÑO + @N_EJERC +
                        '(NUM_CTA    VARCHAR(21) NOT NULL,EJERCICIO  SMALLINT NOT NULL,INICIAL    DOUBLE PRECISION DEFAULT 0,'+
                        'INICIALEX  DOUBLE PRECISION DEFAULT 0,CARGO01    DOUBLE PRECISION DEFAULT 0,ABONO01    DOUBLE PRECISION DEFAULT 0,'+
                        'CARGOEX01  DOUBLE PRECISION DEFAULT 0,ABONOEX01  DOUBLE PRECISION DEFAULT 0,CARGO02    DOUBLE PRECISION DEFAULT 0,'+
                        'ABONO02    DOUBLE PRECISION DEFAULT 0,CARGOEX02  DOUBLE PRECISION DEFAULT 0,ABONOEX02  DOUBLE PRECISION DEFAULT 0,'+
                        'CARGO03    DOUBLE PRECISION DEFAULT 0,ABONO03    DOUBLE PRECISION DEFAULT 0,CARGOEX03  DOUBLE PRECISION DEFAULT 0,'+
                        'ABONOEX03  DOUBLE PRECISION DEFAULT 0,CARGO04    DOUBLE PRECISION DEFAULT 0,ABONO04    DOUBLE PRECISION DEFAULT 0,'+
                        'CARGOEX04  DOUBLE PRECISION DEFAULT 0,ABONOEX04  DOUBLE PRECISION DEFAULT 0,CARGO05    DOUBLE PRECISION DEFAULT 0,'+
                        'ABONO05    DOUBLE PRECISION DEFAULT 0,CARGOEX05  DOUBLE PRECISION DEFAULT 0,ABONOEX05  DOUBLE PRECISION DEFAULT 0,'+
                        'CARGO06    DOUBLE PRECISION DEFAULT 0,ABONO06    DOUBLE PRECISION DEFAULT 0,CARGOEX06  DOUBLE PRECISION DEFAULT 0,'+
                        'ABONOEX06  DOUBLE PRECISION DEFAULT 0,CARGO07    DOUBLE PRECISION DEFAULT 0,ABONO07    DOUBLE PRECISION DEFAULT 0,'+
                        'CARGOEX07  DOUBLE PRECISION DEFAULT 0,ABONOEX07  DOUBLE PRECISION DEFAULT 0,CARGO08    DOUBLE PRECISION DEFAULT 0,'+
                        'ABONO08    DOUBLE PRECISION DEFAULT 0,CARGOEX08  DOUBLE PRECISION DEFAULT 0,ABONOEX08  DOUBLE PRECISION DEFAULT 0,'+
                        'CARGO09    DOUBLE PRECISION DEFAULT 0,ABONO09    DOUBLE PRECISION DEFAULT 0,CARGOEX09  DOUBLE PRECISION DEFAULT 0,'+
                        'ABONOEX09  DOUBLE PRECISION DEFAULT 0,CARGO10    DOUBLE PRECISION DEFAULT 0,ABONO10    DOUBLE PRECISION DEFAULT 0,'+
                        'CARGOEX10  DOUBLE PRECISION DEFAULT 0,ABONOEX10  DOUBLE PRECISION DEFAULT 0,CARGO11    DOUBLE PRECISION DEFAULT 0,'+
                        'ABONO11    DOUBLE PRECISION DEFAULT 0,CARGOEX11  DOUBLE PRECISION DEFAULT 0,ABONOEX11  DOUBLE PRECISION DEFAULT 0,'+
                        'CARGO12    DOUBLE PRECISION DEFAULT 0,ABONO12    DOUBLE PRECISION DEFAULT 0,CARGOEX12  DOUBLE PRECISION DEFAULT 0,'+
                        'ABONOEX12  DOUBLE PRECISION DEFAULT 0,CARGO13    DOUBLE PRECISION DEFAULT 0,ABONO13    DOUBLE PRECISION DEFAULT 0,'+
                        'CARGOEX13  DOUBLE PRECISION DEFAULT 0,ABONOEX13  DOUBLE PRECISION DEFAULT 0,CARGO14    DOUBLE PRECISION DEFAULT 0,'+
                        'ABONO14    DOUBLE PRECISION DEFAULT 0,CARGOEX14  DOUBLE PRECISION DEFAULT 0,ABONOEX14  DOUBLE PRECISION DEFAULT 0,'+
                        'MOV01      SMALLINT DEFAULT 0,MOV02      SMALLINT DEFAULT 0,MOV03      SMALLINT DEFAULT 0,'+
                        'MOV04      SMALLINT DEFAULT 0,MOV05      SMALLINT DEFAULT 0,MOV06      SMALLINT DEFAULT 0,'+
                        'MOV07      SMALLINT DEFAULT 0,MOV08      SMALLINT DEFAULT 0,MOV09      SMALLINT DEFAULT 0,'+
                        'MOV10      SMALLINT DEFAULT 0,MOV11      SMALLINT DEFAULT 0,MOV12      SMALLINT DEFAULT 0,'+
                        'MOV13      SMALLINT DEFAULT 0,MOV14      SMALLINT DEFAULT 0);'
                       
            EXEC (@QUERY)
   
        ---Crea las Tablas
            SET @QUERY    =    'CREATE TABLE Empresas.dbo.CUENTAS' + @AÑO + @N_EJERC+
                            '(NUM_CTA VARCHAR(21) NOT NULL,STATUS VARCHAR(1),'+
                            'TIPO VARCHAR(1), NOMBRE VARCHAR(40), DEPTSINO VARCHAR(1),'+
                            'BANDMULTI SMALLINT,BANDAJT VARCHAR(1),CTA_PAPA VARCHAR(21),'+
                            'CTA_RAIZ VARCHAR(21), NIVEL SMALLINT, CTA_COMP VARCHAR(21),'+
                            'NATURALEZA SMALLINT)'
            EXEC (@QUERY)
            ----Se Agregan las Cuentas a la tabla creada
            SET @QUERY    =    'INSERT INTO Empresas.dbo.CUENTAS'+ @AÑO + @N_EJERC+
                            '(NUM_CTA,STATUS,TIPO,NOMBRE,DEPTSINO,BANDMULTI,BANDAJT,'+
                            'CTA_PAPA,CTA_RAIZ,NIVEL,CTA_COMP,NATURALEZA)'+
                            'SELECT CONVERT(VARCHAR(21),NUM_CTA) AS NUM_CTA,CONVERT(VARCHAR(1),STATUS) AS STATUS,'+
                            'CONVERT(VARCHAR(1),TIPO) AS TIPO,CONVERT(VARCHAR(40),NOMBRE) AS NOMBRE,'+
                            'CONVERT(VARCHAR(1),DEPTSINO) AS DEPTSINO ,CONVERT(SMALLINT,BANDMULTI) AS BANDMULTI ,CONVERT(VARCHAR(1),BANDAJT) AS BANDAJT,'+
                            'CONVERT(VARCHAR(21),CTA_PAPA)AS CTA_PAPA,CONVERT(VARCHAR(21),CTA_RAIZ) AS CTA_RAIZ,'+
                            'CONVERT(SMALLINT,NIVEL) AS NIVEL,CONVERT(VARCHAR(21),CTA_COMP) AS CTA_COMP,CONVERT(SMALLINT,NATURALEZA) AS NATURALEZA '+
                            'FROM #TABLA_BASE_CUENTAS'
                       
                       
            EXEC (@QUERY)
           
                -----Inserta los saldos en Ceros
            SET @QUERY=    'INSERT INTO Empresas.dbo.SALDOS'+ @AÑO + @N_EJERC+
                        '(NUM_CTA,EJERCICIO,'+
                        'INICIAL,INICIALEX,CARGO01,ABONO01,CARGOEX01,'+
                        'ABONOEX01,CARGO02,ABONO02,CARGOEX02,ABONOEX02,CARGO03,'+
                        'ABONO03,CARGOEX03,ABONOEX03,CARGO04,ABONO04,CARGOEX04,'+
                        'ABONOEX04,CARGO05,ABONO05,CARGOEX05,ABONOEX05,CARGO06,'+
                        'ABONO06,CARGOEX06,ABONOEX06,CARGO07,ABONO07,CARGOEX07,'+
                        'ABONOEX07,CARGO08,ABONO08,CARGOEX08,CARGO09,ABONO09,'+
                        'CARGOEX09,ABONOEX09,CARGO10,ABONO10,CARGOEX10,ABONOEX10,'+
                        'CARGO11,ABONO11,CARGOEX11,ABONOEX11,CARGO12,ABONO12,'+
                        'CARGOEX12,ABONOEX12,CARGO13,ABONO13,CARGOEX13,ABONOEX13,'+
                        'CARGO14,ABONO14,CARGOEX14,ABONOEX14,MOV01,MOV02,MOV03,'+
                        'MOV04,MOV05,MOV06,MOV07,MOV08,MOV09,MOV10,MOV11,'+
                        'MOV12,MOV13,MOV14)'+
                        'SELECT CONVERT(VARCHAR(21),NUM_CTA) AS NUM_CTA,CONVERT(SMALLINT,EJERCICIO) AS EJERCICIO,'+
                        '0 AS INICIAL,0 AS INICIALEX,0 AS CARGO01,0 AS ABONO01,0 AS CARGOEX01,'+
                        '0 AS ABONOEX01,0 AS CARGO02,0 AS ABONO02,0 AS CARGOEX02,0 AS ABONOEX02,0 AS CARGO03,'+
                        '0 AS ABONO03,0 AS CARGOEX03,0 AS ABONOEX03,0 AS CARGO04,0 AS ABONO04,0 AS CARGOEX04,'+
                        '0 AS ABONOEX04,0 AS CARGO05,0 AS ABONO05,0 AS CARGOEX05,0 AS ABONOEX05,0 AS CARGO06,'+
                        '0 AS ABONO06,0 AS CARGOEX06,0 AS ABONOEX06,0 AS CARGO07,0 AS ABONO07,0 AS CARGOEX07,'+
                        '0 AS ABONOEX07,0 AS CARGO08,0 AS ABONO08,0 AS CARGOEX08,0 AS CARGO09,0 AS ABONO09,'+
                        '0 AS CARGOEX09,0 AS ABONOEX09,0 AS CARGO10,0 AS ABONO10,0 AS CARGOEX10,0 AS ABONOEX10,'+
                        '0 AS CARGO11,0 AS ABONO11,0 AS CARGOEX11,0 AS ABONOEX11,0 AS CARGO12,0 AS ABONO12,'+
                        '0 AS CARGOEX12,0 AS ABONOEX12,0 AS CARGO13,0 AS ABONO13,0 AS CARGOEX13,0 AS ABONOEX13,'+
                        '0 AS CARGO14,0 AS ABONO14,0 AS CARGOEX14,0 AS ABONOEX14,0 AS MOV01,0 AS MOV02,0 AS MOV03,'+
                        '0 AS MOV04,0 AS MOV05,0 AS MOV06,0 AS MOV07,0 AS MOV08,0 AS MOV09,0 AS MOV10,0 AS MOV11,'+
                        '0 AS MOV12,0 AS MOV13,0 AS MOV14 FROM #TABLA_BASE_CUENTAS'
            EXEC (@QUERY)
           
           
            FETCH NEXT FROM CREACION_TABLA_EJER
                INTO  @AÑO,@N_EJERC
         END
            CLOSE CREACION_TABLA_EJER
            DEALLOCATE CREACION_TABLA_EJER

Imagen de Eduardo Vargas

Intenta concatenar las variables

Hola Oliv3r

Por alguna buena razón quieren ejecutar ese código SQL escribiéndolo dentro de un método java, en vez de ponerlo en un stored procedure.

Según el código java que nos muestras, sólo estás pasando la variable "sql" al método executeQuery()
Seguramente por eso te manda el error de sintaxis relacionado con '@EX_PED' porque esta variable la estás usando en un comando "INSERT INTO" y a este comando le falta la instrucción "SELECT etc,etc, " y esto último lo tienes en la variable "sql2" la cual no la estás ejecutando.

Creo que hace falta concatener todas tus variables "sql..." y meterlas a un método "execute()": Sugiero que utilices el método "execute()" para este tipo de código que combina inserts, select, etc...

Nos cuentas cómo te fue.

Imagen de Eduardo Vargas

Seguramente usas un método inadecuado de Statement

Hola nuevamente Oliv3r,

Ya probé tu código, como debería de escribirse, y sí corre bien. Posiblemente te confundiste con lo que estabas intentando hacer y lo que te estábamos sugiriendo que hicieras.

Te paso documentación para que puedas llegar a la solución. La clave para que corra bien el código, es el uso del método adecuado de la interfaz Statement

Van varias ligas:

http://docs.oracle.com/javase/7/docs/api/java/sql/Statement.html
http://docs.oracle.com/javase/tutorial/jdbc/basics/processingsqlstatemen...
http://www.javamexico.org/foros/java_standard_edition/ayuda_con_resultse...

Imagen de Eduardo Vargas

Va la solución sobre el query que tronaba

Hola Oliv3r,

Espero que hayas podido encontrar la solución a tiempo. Me pareció que podrías estar comenzando con jdbc y sql y tal vez no podrías entender nuestras explicaciones. Desafortunadamente no tengo mucho tiempo libre y ya no pude entrar aquí a tiempo para darte la solución. De todos modos se las paso para que otras personas puedan enriquecer su conocimiento básico sobre jdbc

No tienes que partir el query ni hacerle nada. Sólo hay que meterlo como argumento del método "execute()", y debes recibir un valor booleano. Tu ejecución seguramente estaba tronando porque esperabas obtener un Resut Set y eso no se recibe cuando ejecutas juntas sentencias tales como select, update, insert, etc. Lo que recibes es un boolean.

Va:

boolean hasResultSet = stmt.execute("TU QUERY GRANDOTOTOTOTOTE");
System.out.println("query exitoso \n" + hasResultSet);

Es más, Inclusive sí puedes ejecutar el query así como lo estabas haciendo, pero sin esperar obtener nada:

stmt.executeQuery(sql);

No es conveniente asignarle a un ResultSet la respuesta obtenida de la ejecución de tu query que combina varias sentencias sql, porque no hay garantía de obtener siempre un ResultSet de respuesta, y por eso seguramente estaba tronando. Por eso es más adecuado usar el método "execute()". Inclusive esto dice la documentación de Oracle.

"execute()"

muchas gracias Eduardo yo tengo este problemitititita public void Agregar(int id, String nombre, String apellido, String direccion, String colonia, int seccion, int codigo, String telefono, String mail)
hora se que tengo que investigar sobre "execute()" para uqe me deje pasarlo netbeans GRACIAS!!

style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">