今天在 FORM BUILDER中用 execute immediate 'sql staments'执行动态sql时报错。
后查发现form中用forms_ddl函数执行动态sql,并且此函数暗含了commit;
详细介绍如下:
一、FORMS_DDL函数
FUNCTION FORMS_DDL(statement VARCHAR2);
用于动态执行SQL语句与PL/SQL语句
注意事项:
1、参数statement的最大容量不能超过32K。
2、DDL类型的SQL语句,暗含一个commit命令。
二、EXEC_SQL包
用于动态执行DDL类型与DML类型的SQL语句。
EXEC_SQL包的一般使用步聚:
第一步:连接数据库:
EXEC_SQL.Open_Connection /EXEC_SQL.Default_Connection
第二步:创建一个指针变量 (游标):
EXEC_SQL.Open_Cursor
第三步:为指针变量加载一个SQL语句(DDL、DML): EXEC_SQL.Open_Cursor
第四步:执行所加载一个SQL语句:
EXEC_SQL.Execute
第五步:批量针变量(游标)与关闭数据库连接:
EXEC_SQL.Is_Open、EXEC_SQL.Close_Cursor 、EXEC_SQL.Close_Cursor、EXEC_SQL.Close_Cursor
三、总结
1、FORMS_DDL函数主要用于动态执行DDL类型的SQL语句(可以理解为因FORM中不能直接使用DDL类型的SQL语句。)。 FORMS_DDL函数只能作用于当前FORM所连接的数据库。
2、 EXEC_SQL包主要有两个重要用途:
第一:用于动态执行select语句并返回一个结果集。
第二:用于不同数据库之间数据访问。