dbms_sql.parse
Hola a tod@s:
la instrucci贸n DBMS_SQL.PARSE(id_cursor,instruccion,DBMS_SQL.NATIVE); me da error de restricci贸n de implantaci贸n: bdms_sql.native, no se puede acceder directamente a una variable o cursor de acceso remoto..
驴Porqu茅 me da este error? Tambien he probado poniendo en lugar de native, v7/v6... Estoy desesperada!!! 驴Alguien me puede ayudar?
Gracias compa帽eros!!!
la instrucci贸n DBMS_SQL.PARSE(id_cursor,instruccion,DBMS_SQL.NATIVE); me da error de restricci贸n de implantaci贸n: bdms_sql.native, no se puede acceder directamente a una variable o cursor de acceso remoto..
驴Porqu茅 me da este error? Tambien he probado poniendo en lugar de native, v7/v6... Estoy desesperada!!! 驴Alguien me puede ayudar?
Gracias compa帽eros!!!
Deberias poner que error se te muestra exactamente en ingles, asi te pueda ayudar algo mas.
El c贸digo es el siguiente y lo lanzo en un procedimiento desde forms (quiz谩 ese sea el problema y tenga que hacerlo desde un procedimiento almacenado en la base de datos); este es mi c贸digo;
PROCEDURE crear(instruccion varchar2) IS
id_cursor integer;
v_dmmy integer;
BEGIN
id_cursor:=DBMS_SQL.OPEN_CURSOR;
DBMS_SQL.PARSE(id_cursor,instruccion,DBMS_SQL.NATIVE);
v_dmmy:=DBMS_SQL.EXECUTE(instruccion);
DBMS_SQL.CLOSE_CURSOR(id_cursor);
END;
el error lo da forms en el parse y es el siguiente:
"restricci贸n de implantaci贸n: dbms_sql.native: no se puede acceder directamente a una variable o cursor de paquete remoto".... Os ayuda eso?
PROCEDURE crear(instruccion varchar2) IS
id_cursor integer;
v_dmmy integer;
BEGIN
id_cursor:=DBMS_SQL.OPEN_CURSOR;
DBMS_SQL.PARSE(id_cursor,instruccion,DBMS_SQL.NATIVE);
v_dmmy:=DBMS_SQL.EXECUTE(instruccion);
DBMS_SQL.CLOSE_CURSOR(id_cursor);
END;
el error lo da forms en el parse y es el siguiente:
"restricci贸n de implantaci贸n: dbms_sql.native: no se puede acceder directamente a una variable o cursor de paquete remoto".... Os ayuda eso?
De todas formas te pongo un ejemplo por si puedes ver en tu codigo algun fallo de sintaxis, un Saludo.
Code Samples ------------
The follow sets of code examples depict how to accomplish the same task using DBMS_SQL and Native Dynamic SQL.
Prior to executing the code, create a dept_new table as follows:
CREATE TABLE dept_new
(deptno NUMBER(2),
dname VARCHAR2(14),
loc VARCHAR2(13));
Example of DBMS_SQL
CREATE OR REPLACE PROCEDURE dbms_example (deptnum IN dept_new.deptno%TYPE,
deptname IN dept_new.dname%TYPE,
location IN dept_new.loc%TYPE)
IS stmt_str varchar2(100);
rows_processed NUMBER;
cur_hdl NUMBER;
BEGIN
stmt_str := 'INSERT INTO dept_new VALUES(:deptno, :dname, :loc)';
cur_hdl := DBMS_SQL.OPEN_CURSOR;
DBMS_SQL.PARSE (cur_hdl,stmt_str,DBMS_SQL.NATIVE);
DBMS_SQL.BIND_VARIABLE(cur_hdl,':deptno',deptnum);
DBMS_SQL.BIND_VARIABLE(cur_hdl,':dname', deptname);
DBMS_SQL.BIND_VARIABLE(cur_hdl,':loc',location);
rows_processed := dbms_sql.execute(cur_hdl); DBMS_SQL.CLOSE_CURSOR(cur_hdl);
END;
/
Code Samples ------------
The follow sets of code examples depict how to accomplish the same task using DBMS_SQL and Native Dynamic SQL.
Prior to executing the code, create a dept_new table as follows:
CREATE TABLE dept_new
(deptno NUMBER(2),
dname VARCHAR2(14),
loc VARCHAR2(13));
Example of DBMS_SQL
CREATE OR REPLACE PROCEDURE dbms_example (deptnum IN dept_new.deptno%TYPE,
deptname IN dept_new.dname%TYPE,
location IN dept_new.loc%TYPE)
IS stmt_str varchar2(100);
rows_processed NUMBER;
cur_hdl NUMBER;
BEGIN
stmt_str := 'INSERT INTO dept_new VALUES(:deptno, :dname, :loc)';
cur_hdl := DBMS_SQL.OPEN_CURSOR;
DBMS_SQL.PARSE (cur_hdl,stmt_str,DBMS_SQL.NATIVE);
DBMS_SQL.BIND_VARIABLE(cur_hdl,':deptno',deptnum);
DBMS_SQL.BIND_VARIABLE(cur_hdl,':dname', deptname);
DBMS_SQL.BIND_VARIABLE(cur_hdl,':loc',location);
rows_processed := dbms_sql.execute(cur_hdl); DBMS_SQL.CLOSE_CURSOR(cur_hdl);
END;
/
El error est谩 en el execute, debes pasarle el identificador del cursor, no la instruccion
DBMS_SQL.EXECUTE(id_cursor)
DBMS_SQL.EXECUTE(id_cursor)
buenas tardes,
Mi problema es que en un package se esta utilizando la siguiente sentencia SQL:
GBL_STATMNT := 30130;
TMP_FORMULA := REPLACE(TMP_FORMULA,',','.');
STM := 'BEGIN'||CHR(10)||
'SELECT '||TMP_FORMULA||' INTO :VALOR FROM SYS.DUAL;'||CHR(10)||
'END;';
GBL_STATMNT := 30140;
C := DBMS_SQL.OPEN_CURSOR;
GBL_STATMNT := 30150;
DBMS_SQL.PARSE(C, STM, 2); --SYS.DBMS_SQL.V7 -- COMENTADO POR SEBASTIAN IBARRA -- 28-12-2007
GBL_STATMNT := 30160;
DBMS_SQL.BIND_VARIABLE(C,':VALOR',N_VALOR);
GBL_STATMNT := 30170;
DUMMY := DBMS_SQL.EXECUTE(C);
GBL_STATMNT := 30180;
DBMS_SQL.VARIABLE_VALUE(C,':VALOR',N_VALOR);
GBL_STATMNT := 30190;
DBMS_SQL.CLOSE_CURSOR(C);
Mi problema es que de base de dato nos tienen bloquedo el DBMS_SQL y el EXECUTE INMEDISTE.
Me podrian dar una alternativa de ejecutar esto.
Gracias.
Saludos.
Mi problema es que en un package se esta utilizando la siguiente sentencia SQL:
GBL_STATMNT := 30130;
TMP_FORMULA := REPLACE(TMP_FORMULA,',','.');
STM := 'BEGIN'||CHR(10)||
'SELECT '||TMP_FORMULA||' INTO :VALOR FROM SYS.DUAL;'||CHR(10)||
'END;';
GBL_STATMNT := 30140;
C := DBMS_SQL.OPEN_CURSOR;
GBL_STATMNT := 30150;
DBMS_SQL.PARSE(C, STM, 2); --SYS.DBMS_SQL.V7 -- COMENTADO POR SEBASTIAN IBARRA -- 28-12-2007
GBL_STATMNT := 30160;
DBMS_SQL.BIND_VARIABLE(C,':VALOR',N_VALOR);
GBL_STATMNT := 30170;
DUMMY := DBMS_SQL.EXECUTE(C);
GBL_STATMNT := 30180;
DBMS_SQL.VARIABLE_VALUE(C,':VALOR',N_VALOR);
GBL_STATMNT := 30190;
DBMS_SQL.CLOSE_CURSOR(C);
Mi problema es que de base de dato nos tienen bloquedo el DBMS_SQL y el EXECUTE INMEDISTE.
Me podrian dar una alternativa de ejecutar esto.
Gracias.
Saludos.
