Señores, buenas tardes,
Tengo un problema al tratar de ejecutar un script Oracle desde c#, con el siguiente código, al llegar al ExecuteNonQuery aparece el error ORA-00911: invalid character, he consultado muchisimo, pero de las distintas opciones que dan en la web, ninguna apunta a la solución que necesito, en sqlTools y sqlPlus el script funciona de manera correcta, si alguien tiene la solución muchas gracias.
El código a ejecutar es el siguiente:
public void EjecutarScriptORA(String strSQL)
{
try
{
string connectionString = ObjetoInstalar.ConnectionString;
using (OracleConnection connection = new OracleConnection(connectionString))
{
connection.Open();
OracleCommand cmd = new OracleCommand();
cmd.CommandText = strSQL;
cmd.Connection = connection;
cmd.CommandType = CommandType.Text;
cmd.ExecuteNonQuery();
}
}
catch (Exception ex)
{
}
}
y el script es:
DROP TABLE TMPAtributos;
/*Crea la tabla temporal*/
CREATE GLOBAL TEMPORARY TABLE TMPAtributos
(
Nombre VARCHAR2(50) NOT NULL,
Input VARCHAR2(75),
Label VARCHAR2(75),
Rfv VARCHAR2(75),
Rev VARCHAR2(75)
) ;
DECLARE
tbl_exist PLS_INTEGER;
entidad_Exist PLS_INTEGER;
CantidadInserts PLS_INTEGER ;
L_NombreEntidad Varchar2(50);
L_input Varchar2(75);
L_label Varchar2(75);
L_rfv Varchar2(75);
L_rev Varchar2(75);
L_IdEntidad Entidades.IdEntidad%TYPE;
CURSOR CUR_TMPAtributos IS
SELECT DISTINCT Nombre,Input,Label,Rfv,Rev FROM TMPAtributos;
BEGIN
INSERT INTO TMPAtributos(Nombre,Input,Label,Rfv,Rev) Values ('UnidadDeMedida','txtSimbolo','lblSimbolo','RequiredFieldValidator1','revSimbolo');
--Aqui vienen muchisimos más INserts
OPEN CUR_TMPAtributos ;
LOOP
FETCH CUR_TMPAtributos
INTO L_NombreEntidad, L_input, L_label, L_rfv, L_rev;
EXIT WHEN CUR_TMPAtributos%NOTFOUND;
SELECT IdEntidad INTO L_IdEntidad
FROM Entidades
WHERE Nombre=L_NombreEntidad;
SELECT Count(IdEntidad) INTO entidad_Exist FROM Atributos
WHERE IdEntidad = L_IdEntidad
AND COALESCE(input,'NULL')= COALESCE(L_input ,'NULL')
AND COALESCE(Label,'NULL')= COALESCE(L_label ,'NULL')
AND COALESCE(Rfv,'NULL')= COALESCE(L_rfv ,'NULL')
AND RowNum< 2;
IF entidad_Exist <1 THEN
INSERT INTO Atributos (idAtributo,IdEntidad,input,label,rfv,rev )
VALUES (seq_Atributos.NEXTVAL,L_IdEntidad,L_input,L_label,L_rfv,L_rev);
CantidadInserts:=CantidadInserts+1;
END IF;
END LOOP;
DBMS_OUTPUT.PUT_line('Se Insertaron '|| CantidadInserts ||' Atributos') ;
SELECT COUNT(*) INTO tbl_exist FROM USER_TABLES WHERE TABLE_NAME=Upper('TMPAtributos') ;
IF tbl_exist >0 THEN
EXECUTE IMMEDIATE
'DROP TABLE TMPAtributos' ;
DBMS_OUTPUT.PUT_line('Se borra la tabla temporal') ;
END IF;
COMMIT;
END;
Tengo un problema al tratar de ejecutar un script Oracle desde c#, con el siguiente código, al llegar al ExecuteNonQuery aparece el error ORA-00911: invalid character, he consultado muchisimo, pero de las distintas opciones que dan en la web, ninguna apunta a la solución que necesito, en sqlTools y sqlPlus el script funciona de manera correcta, si alguien tiene la solución muchas gracias.
El código a ejecutar es el siguiente:
public void EjecutarScriptORA(String strSQL)
{
try
{
string connectionString = ObjetoInstalar.ConnectionString;
using (OracleConnection connection = new OracleConnection(connectionString))
{
connection.Open();
OracleCommand cmd = new OracleCommand();
cmd.CommandText = strSQL;
cmd.Connection = connection;
cmd.CommandType = CommandType.Text;
cmd.ExecuteNonQuery();
}
}
catch (Exception ex)
{
}
}
y el script es:
DROP TABLE TMPAtributos;
/*Crea la tabla temporal*/
CREATE GLOBAL TEMPORARY TABLE TMPAtributos
(
Nombre VARCHAR2(50) NOT NULL,
Input VARCHAR2(75),
Label VARCHAR2(75),
Rfv VARCHAR2(75),
Rev VARCHAR2(75)
) ;
DECLARE
tbl_exist PLS_INTEGER;
entidad_Exist PLS_INTEGER;
CantidadInserts PLS_INTEGER ;
L_NombreEntidad Varchar2(50);
L_input Varchar2(75);
L_label Varchar2(75);
L_rfv Varchar2(75);
L_rev Varchar2(75);
L_IdEntidad Entidades.IdEntidad%TYPE;
CURSOR CUR_TMPAtributos IS
SELECT DISTINCT Nombre,Input,Label,Rfv,Rev FROM TMPAtributos;
BEGIN
INSERT INTO TMPAtributos(Nombre,Input,Label,Rfv,Rev) Values ('UnidadDeMedida','txtSimbolo','lblSimbolo','RequiredFieldValidator1','revSimbolo');
--Aqui vienen muchisimos más INserts
OPEN CUR_TMPAtributos ;
LOOP
FETCH CUR_TMPAtributos
INTO L_NombreEntidad, L_input, L_label, L_rfv, L_rev;
EXIT WHEN CUR_TMPAtributos%NOTFOUND;
SELECT IdEntidad INTO L_IdEntidad
FROM Entidades
WHERE Nombre=L_NombreEntidad;
SELECT Count(IdEntidad) INTO entidad_Exist FROM Atributos
WHERE IdEntidad = L_IdEntidad
AND COALESCE(input,'NULL')= COALESCE(L_input ,'NULL')
AND COALESCE(Label,'NULL')= COALESCE(L_label ,'NULL')
AND COALESCE(Rfv,'NULL')= COALESCE(L_rfv ,'NULL')
AND RowNum< 2;
IF entidad_Exist <1 THEN
INSERT INTO Atributos (idAtributo,IdEntidad,input,label,rfv,rev )
VALUES (seq_Atributos.NEXTVAL,L_IdEntidad,L_input,L_label,L_rfv,L_rev);
CantidadInserts:=CantidadInserts+1;
END IF;
END LOOP;
DBMS_OUTPUT.PUT_line('Se Insertaron '|| CantidadInserts ||' Atributos') ;
SELECT COUNT(*) INTO tbl_exist FROM USER_TABLES WHERE TABLE_NAME=Upper('TMPAtributos') ;
IF tbl_exist >0 THEN
EXECUTE IMMEDIATE
'DROP TABLE TMPAtributos' ;
DBMS_OUTPUT.PUT_line('Se borra la tabla temporal') ;
END IF;
COMMIT;
END;