pl/sql返回值求教!在线等待!!!

TLFLY 2003-09-14 01:51:09
delphi中使用adoquery执行sql语句
declare
a integer;
begin
a := 1
end;

使用adoquery的Open能正常运行该sql,可是怎么取得a的值呢?
使用query执行该pl/sql是否可以取得返回值?
...全文
140 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
TLFLY 2003-09-14
  • 打赏
  • 举报
回复
to beckhambobo(beckham):
实际上我在数据库中需要调用一函数: Get_Value();
该函数不能通过select get_value() from dual 执行,
因为报错:
ORA-06571: 函数 GET_VALLUE 不能保证不更新数据库.
因为我不能更改原数据库函数。所以只能通过
declare
a boolean;
begin
a := Get_Value();
end;
执行该函数,我怎样才能取得该返回值那?
TLFLY 2003-09-14
  • 打赏
  • 举报
回复
我得主要目的是取得sql语句的返回值:
我得语句是
with query do
begin
Close();
Parameters.AddParameter();
Parameters[0].Name := 'a';
Parameters[0].DataType := ftBoolean;
Parameters[0].Direction := pdInputOutput;
SQL.Clear();
SQL.AddStrings(memo_sql.Lines);
ExecSql();
end;

实际的sql语句为
begin
:a := false;
end;

可是执行的时候报错 ORA-01008 不是所有变量都赋了值。
beckhambobo 2003-09-14
  • 打赏
  • 举报
回复
pl/sql过程不能返回值,若要取值,用函数返回
create function get_value
return number
as
begin
return 1;
end;

with adoconnection1 do
begin
adoquery.close;
adoquery.sql.clear;
adoquery.sql.add('create function get_value ');
adoquery.sql.add(return number as ');
adoquery.sql.add('begin ');
adoquery.sql.add(return 1;');
adoquery.sql.add('end;');
adoquery.execsql;
adoquery.sql.clear;
adoquery.sql.add('select get_value rs from dual');
adoquery.open;
.....
Drate 2003-09-14
  • 打赏
  • 举报
回复
呵呵,如果在DELPHI中写的话,我认为不需要这样写的吧,你声明变量可以在DELPHI中声明呀,需要的时候再代入到你的SQL语句中去呀
var
a : integer;
begin
adoquery1.close;
adoquery1.sql.add('select * from table1 where fielda = :P_a');
adoquery1.parameters.parambyname('p_a').value := a;
adoquery1.open;
{...}
{如果需要循环取记录或是什么的话,你也可以在DELPHI中定义变量,在数据库中再代入}
end;
TLFLY 2003-09-14
  • 打赏
  • 举报
回复
顶一顶;
顺便说一下:
因为是在原有的库上做开发,所以不能在该库中建立存储过程,所以希望能找到办法从pl/sql中返回值,在ado中能取到吗?
TLFLY 2003-09-14
  • 打赏
  • 举报
回复
这边明天晚上结贴!希望有更好的回答
TLFLY 2003-09-14
  • 打赏
  • 举报
回复
to JCC0128 and beckham :
感谢你们的关注!
关于beckham所说的 实际上我在数据库中需要调用一函数: Get_Value();
该函数不能通过select get_value() from dual 执行,
因为报错:
ORA-06571: 函数 GET_VALLUE 不能保证不更新数据库.

关于jcc0128所说的:
可能没有办法只能用存储过程了
JCC0128 2003-09-14
  • 打赏
  • 举报
回复
to beckham and 楼主:
代码中动态创建函数 跟手工在库中建存储过程有什么区别?不是多此一举吗?
beckhambobo 2003-09-14
  • 打赏
  • 举报
回复
函数就是返回值,就这样调用就可以了
adoquery.sql.clear;
adoquery.sql.add('select get_value rs from dual');
adoquery.open;
.....
adoquery.fieldvalues('rs'); //获取其值
TLFLY 2003-09-14
  • 打赏
  • 举报
回复
http://www.delphibbs.com/delphibbs/dispq.asp?lid=455963
在上面链接中pipi.好像提到能够返回值,可是不是很详细,有人能解释一下吗?

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧