dbms_sql.parse

olimpia
08 de Febrero del 2005
Hola a [email protected]:
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!!!

John
08 de Febrero del 2005
Deberias poner que error se te muestra exactamente en ingles, asi te pueda ayudar algo mas.

Olimpia
08 de Febrero del 2005
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?

John
08 de Febrero del 2005
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;

/

mmm
08 de Febrero del 2005
El error está en el execute, debes pasarle el identificador del cursor, no la instruccion

DBMS_SQL.EXECUTE(id_cursor)

Paula Andrea Madsen Perez
01 de Febrero del 2011
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.