FORM中执行动态sql语句

今天在 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语句并返回一个结果集。

第二:用于不同数据库之间数据访问。

时间: 2024-11-05 17:31:45

FORM中执行动态sql语句的相关文章

存储过程中执行动态Sql语句

存储过程中执行动态Sql语句 MSSQL为我们提供了两种动态执行SQL语句的命令,分别是EXEC和sp_executesql;通常,sp_executesql则更具有优势,它提供了输入输出接口,而EXEC没有.还有一个最大的好处就是利用sp_executesql,能够重用执行计划,这就大大提供了执行性能,还可以编写更安全的代码.EXEC在某些情况下会更灵活.除非您有令人信服的理由使用EXEC,否侧尽量使用sp_executesql. 1.EXEC的使用 EXEC命令有两种用法,一种是执行一个存储

怎样SQL存储过程中执行动态SQL语句

MSSQL为我们提供了两种动态执行SQL语句的命令,分别是EXEC和sp_executesql;通常,sp_executesql则更具有优势,它提供了输入输出接口,而EXEC没有.还有一个最大的好处就是利用sp_executesql,能够重用执行计划,这就大大提供了执行性能,还可以编写更安全的代码.EXEC在某些情况下会更灵活.除非您有令人信服的理由使用EXEC,否侧尽量使用sp_executesql.1.EXEC的使用 EXEC命令有两种用法,一种是执行一个存储过程,另一种是执行一个动态的批处

使用Oracle的DBMS_SQL包执行动态SQL语句

使用Oracle的DBMS_SQL包执行动态SQL语句 引用自:http://blog.csdn.net/ggjjzhzz/archive/2005/10/17/507880.aspx 引用自:http://www.cnblogs.com/simonhaninmelbourne/archive/2013/01/23/2872438.html 在某些场合下,存储过程或触发器里的SQL语句需要动态生成.Oracle的DBMS_SQL包可以用来执行动态SQL语句.本文通过一个简单的例子来展示如何利用D

Java下拼接执行动态SQL语句(转)

在实际业务中经常需要拼接动态SQL来完成复杂数据计算,网上各类技术论坛都有讨论,比如下面这些问题: http://bbs.csdn.net/topics/390876591 http://bbs.csdn.net/topics/390981627 https://www.linkedin.com/groups/SQL-Query-Help-needed-137774.S.5948812806903119877?trk=groups_items_see_more-0-b-ttl http://bb

Java下拼接执行动态SQL语句

Java拼接动态SQL的一般做法有       1.使用动态语句 很多数据库都提供了处理动态SQL的语法,如Oracle的EXECUTE IMMEDIATE语句.MSSQL的EXEC和SP_EXECUTESQL.Mysql的预处理语句等.这些功能让我们在数据库端来处理动态查询提供了极大遍历,但这种方式只适用于相对简单地动态查询,复杂的情况经常会采用下面的方式. 2.使用存储过程 对于复杂的情况,一般会在存储过程中来拼接动态SQL.使用存储过程完成相对灵活,但编码复杂度过高,有时运行效率较低. 3

存储过程执行动态sql语句

MSSQL为我们提供了两种动态执行SQL语句的命令,分别是EXEC和sp_executesql;通常,sp_executesql则更具有优势,它提供了输入输出接口,而EXEC没有.还有一个最大的好处就是利用sp_executesql,能够重用执行计划,这就大大提供了执行性能,还可以编写更安全的代码.EXEC在某些情况下会更灵活.除非您有令人信服的理由使用EXEC,否侧尽量使用sp_executesql. 1.EXEC的使用 EXEC命令有两种用法,一种是执行一个存储过程,另一种是执行一个动态的批

MySQL存储过程中实现执行动态SQL语句

sql语句中的任何部分都可以作为参数. DROP PROCEDURE if exists insertdata; delimiter //CREATE PROCEDURE insertdata(IN table_name varchar(255))begin declare var_sql varchar(800); set var_sql = concat_ws(' ', 'select count(*) from ', table_name,' where c_purchase_id is

DB2 存储过程中执行动态SQL

样本代码: DROP PROCEDURE QUOTATION.COPY_SAMPLE; CREATE PROCEDURE QUOTATION.COPY_SAMPLE ( IN tableNameFrom VARCHAR(30) , IN tableNameTo VARCHAR(30) , INOUT copyResult INTEGER) BEGIN DECLARE SQLCODE INTEGER DEFAULT 0; SET copyResult = 0; -- Proecss 1 BEGIN

自定义函数执行动态sql语句

--函数中不能调用动态SQL,使用用存储过程吧.如果还要对函数做其他操作,换成存储过程不方便,可以考虑把其他操作一起封装在存储过程里面.如: create proc [dbo].[FUN_YSCL_GetSpvalue] @FormID VARCHAR(200) AS BEGIN     DECLARE @TableID VARCHAR(20)     SELECT @TableID = tb.vcTableID FROM tG10Money tm LEFT JOIN tG10Tables tb