1.BEGIN SQL: =' .............................';
是不是应该
BEGIN SQL1: =' .............................';
?2.dbms_sql.NATIVE’换成
dbms_sql.v7
是不是应该
BEGIN SQL1: =' .............................';
?2.dbms_sql.NATIVE’换成
dbms_sql.v7
是有sql语句的
如: select sysdate from dual等
2.dbms_sql.NATIVE’换成
dbms_sql.v7或者dbms_sql.v6
都不行!真的没办法!
DECLARE SQL1 VARCHAR2(1000); BEGIN SQL / sql1 ?????: =' .............................'; EXECUTE IMMEDIATE SQL1;
END;在sql*plus下可以正常执行?????
2。在sql中也不能正确的 哈 DBMS_SQL.PARSE(cursor_name, 'SELECT SYSDATE FROM DUAL',dbms_sql.NATIVE);================================================================ok?
2、将dbms_sql.NATIVE的执行权限给连接用户,我认为是权限的问题。另外即便有权限也应该设为Public类型。
1.
DECLARE SQL1 VARCHAR2(1000); BEGIN sql1: ='SELECT SYSDATE FROM DUAL'; EXECUTE IMMEDIATE SQL1;
END;
这是肯定能够执行的!
2.
declare
cursor_name INTEGER;
rows_processed INTEGER;
BEGIN
cursor_name := dbms_sql.open_cursor;
DBMS_SQL.PARSE(cursor_name, 'SELECT SYSDATE FROM DUAL',dbms_sql.NATIVE);
rows_processed := dbms_sql.execute(cursor_name);
DBMS_SQL.close_cursor(cursor_name);
END;
这肯定也是可以执行的了!拜托自己试试好不!!!!!!!
1。IMMEDIATE 这个关键字是有的,我查了!
2。我换了SYSTEM/MANAGER都一样的报错,而且原来的用户是DBATHANK YOU!
2 cursor_name INTEGER;
3 rows_processed INTEGER;
4 BEGIN
5 cursor_name := dbms_sql.open_cursor;
6 DBMS_SQL.PARSE(cursor_name, 'SELECT SYSDATE FROM DUAL',dbms_sql.NATIVE);
7 rows_processed := dbms_sql.execute(cursor_name);
8 DBMS_SQL.close_cursor(cursor_name);
9 END;
10 /PL/SQL 过程已成功完成。你的数据库环境是什么?oracle 版本是多少?
我是说在sql*plus里可以执行的语句到form 6i中却编译不了
Oracle8i介绍了一种本地动态SQL语句,是DBMS_SQL的另一种选择。用本地的动态SQL,你可以直接把动态SQL语句放在PL/SQL块中。另外,我在oracle的帮助文档里查到:
Note:
Because client-side code cannot reference remote package variables or constants, you must explicitly use the values of the constants. For example, the following code does not compile on the client: DBMS_SQL.PARSE(cur_hdl, stmt_str, dbms_sql.V7); -- uses constant
dbms_sql.V7The following code works on the client, because the argument is explicitly provided: DBMS_SQL.PARSE(cur_hdl, stmt_str, 2); -- compiles on the client
意思是在客户端不能引用服务器上的包的参数或常量(指dbms_sql.native是integer 常量,=1)。但是你可以把它替换成常数。
That is:
DBMS_SQL.PARSE(cursor_name, 'SELECT SYSDATE FROM DUAL',1);
你能告诉我第一个EXECUTE IMMEDIATE 不能执行的原因吗?
第二个问题我从metalink上问
他说form6i的pl/sql版本太低!
建议我用FORMS_DDL
可是第一个问题他没有给我答案!