form_ddl的问题

[复制链接]
查看11 | 回复6 | 2014-2-19 11:55:14 | 显示全部楼层 |阅读模式
我现在需要动态去执行一个function并得到返回值,我知道form_ddl可以执行动态的pl/sql代码块,例如form_ddl('begin procedureA end'); 但是不知道里面可不可以执行一个function并得到返回值,这个该怎么写呢?没太用过不太明白,请高手指点,像下面这样写可以吗?
form_ddl(begin :vret := functionA(1, 2)end); vret是我在代码声明部分定义的变量.
execute immediate 可以实现上面的需求吗?

回复

使用道具 举报

千问 | 2014-2-19 11:55:14 | 显示全部楼层
这么写代码可读性很差,不如在database创建一个function,在form调用。
回复

使用道具 举报

千问 | 2014-2-19 11:55:14 | 显示全部楼层
simon_hm 发表于 2014-5-22 10:05
这么写代码可读性很差,不如在database创建一个function,在form调用。

可是没有办法啊,画面上一个text item的值,需要去执行一个表里存的function名,然后得到这个function的返回值,因为表里存的function名不一定是什么,所以到form上要动态去执行啊
回复

使用道具 举报

千问 | 2014-2-19 11:55:14 | 显示全部楼层
如果要这么写,试试exec function_name into parameter_name;
回复

使用道具 举报

千问 | 2014-2-19 11:55:14 | 显示全部楼层
simon_hm 发表于 2014-5-22 15:48
如果要这么写,试试exec function_name into parameter_name;

好的,我去试试,我现在用的是在数据库里建了个方法,参数是要执行的sql,在form里拼好字符串传进去,例如‘select function_name(parameter list) from dual’,然后数据库方法里写execute immediatesqlinto,不过这么写我总觉得怪怪的,总觉得form里应该也有类似的实现方法啊,可是在form里写execute immediatesqlinto编译都不通过。
回复

使用道具 举报

千问 | 2014-2-19 11:55:14 | 显示全部楼层
試過
call function_name() into :var嗎?
回复

使用道具 举报

千问 | 2014-2-19 11:55:14 | 显示全部楼层
我觉得笨方法应该是你把要执行的sql放到Plsql里面去执行,为什么一定要在form里面写呢?
想太多了吧
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行